2016-04-12 4 views
0

fand ich ein Tutorial für Daten zu einer Arduino-Board hier schreiben: https://salilkapur.wordpress.com/2013/03/08/communicating-with-arduino-using-c/Wie liest man Daten von Arduino Board zu PC mit C?

Der Code file = fopen("/dev/ttyUSB0","w+"); verwendet den Port für den Lese-/Schreibvorgang zu öffnen, und verwendet fprintf Daten an das Gerät zu schreiben. Aber als ich versuchte, mit fscanf die Daten aus dem Arduino (ich verwendete Serial.print zum Schreiben der Daten zurück auf den PC von der Arduino Ende, und die Daten wurden als DEC formatiert), es funktioniert nicht.

Ich kann die Ausgabe mit dem seriellen Monitor in der Arduino IDE sehen, aber ich bin nicht in der Lage, die Ausgabe in meinem C-Programm Ausgabe anzuzeigen. Warum funktioniert es nicht und was muss ich tun, damit es funktioniert?

Das Programm wurde in Ubuntu ausgeführt.

Das ist mein C-Code, der auf dem PC laufen soll:

#include <stdio.h> 


int main() 
{ 
    FILE *file; 
    char a=0; 
    file = fopen("/dev/ttyUSB0","w+"); 
    int i = 0; 
    if(file == -1) 
     printf("error"); 
    for(i = 0 ; i < 3 ; i++) 
    { 
     fprintf(file,"C"); 
     fscanf(file, "%c", &a); 
     printf("%c", a); 
    } 



    fclose(file); 
} 

Ich habe auch versucht, einige Variationen wie unter Verwendung von %d statt %c, int anstelle von char und fflush verwenden. Ich weiß nicht, warum es nicht funktioniert. Könnte es sein, dass mein Arduino-Board nicht funktioniert?

Hinweis: Es soll nach jeder Zeicheneingabe eine Ausgabe geben.

+0

Ich vermute, es könnte ein Problem in Ihrem Code. – Lundin

+0

Sind Sie sicher, dass Ihr Arduino auf '/ dev/ttyUSB0' steht? Ist der serielle Monitor in der Arduino IDE geöffnet (Sie können nicht lesen/schreiben, wenn es ist)? Ändern Sie 'if (file == -1)' in 'if (file == NULL)'. Was ist der Arduino-Code? Übrigens, Sie versuchen eine Zahl ('DEC' in Arduino) mit einem'% c' in Ihrem scanf zu lesen, versuchen Sie es mit '% d' – Rolbrok

Antwort

0

Der Grund, warum Sie nicht alles lesen kann, ist, dass, wenn Sie

file = fopen("/dev/ttyUSB0","w+");

the arduino is reset nennen, und es dauert 1-2 Sekunden zu booten. Aus irgendeinem Grund hängt das Lesen unabhängig.

Hinzufügen sleep(2); neben fopen wird wahrscheinlich den Trick tun.

Sehen, wie man disable auto reset