Hey Leute,
Ich möchte Sensordaten, welche ich mit einem Arduino Micro auslesen via Micro-USB an mein Jetson Nano Board übertragen.
Das funktioniert allerdings nicht wie gewünscht
Am seriellen Monitor funktioniert es perfekt, sobald ich allerdings meinen Arduino an das Jetson Nano Board hänge und das unten zu sehende C-Skript ausführe, wird nichts ausgelesen. Meiner Meinung nach hängt sich das System dann in der "write"-Funktion auf, was läuft da falsch?
Hier der entsprechende Teil des Codes aus Arduino-Seite:
String befehl;
void loop() {
performOPC(); // Hier misst ein Sensor und updatet regelmäßig seine Messwerte
if(Serial.available()){
befehl = Serial.readStringUntil('\n');
if(befehl.equals("irgendwas" == false)){
performMeasurement(); //Auslesen weiterer Sensoren plus
Serial.flush();
Serial.read();
}
}
}
Und hier das C-Skript:
void delay(unsigned int mseconds);
int openConnection(char[], speed_t);
int main(int argc, char *argv[])
//CONNECTION ARDUINO - JETSON
int fd, n;
char buf_ard[200] = "";
/* open serial port Arduino*/
fd = openConnection("/dev/ttyACM0", B9600);
/* Everything set up. Now get data from connected devices every 5min */
/* Send byte to trigger Arduino to send string back */
write(fd, "0", 1);
/* Receive string from Arduino */
sleep(1000);
n = read(fd, buf_ard, 200);
/* insert terminating zero in the string */
buf_ard[n] = '\0';
/* close stream */
close(fd);
return 0;
}
int openConnection(char* str, speed_t baudrate)
{
int fd;
struct termios toptions;
fd = open(str, O_RDWR | O_NOCTTY);
printf("fd opened as %i\n", fd);
/* wait for the Arduino to reboot */
usleep(3500000);
/* reset serial port settings */
cfmakeraw(&toptions);
/* set 115200 baud both ways */
cfsetispeed(&toptions, baudrate);
cfsetospeed(&toptions, baudrate);
/* 8 bits, no parity, 1 stop bits */
toptions.c_cflag &= ~PARENB; // No Parity
toptions.c_cflag &= ~CSTOPB; // Reset Stop bit to 1
toptions.c_cflag &= ~CSIZE;
toptions.c_cflag |= CS8;
/* Canonical mode */
toptions.c_lflag |= ICANON;
toptions.c_iflag &= ~IXON;
toptions.c_iflag &= ~IXOFF;
toptions.c_cflag &= ~CRTSCTS; /* No Hardware flow Control */
toptions.c_cflag |= (CREAD | CLOCAL); /* Enable receiver,Ignore Modem Control lines */
/* commit the serial port settings */
tcsetattr(fd, TCSANOW, &toptions);
tcflush(fd, TCIFLUSH);
return fd;
}
void delay(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
Bin für jeden Hinweis in eine richtige Richtung dankbar
Ziel ist es eigentlich mit dem C-Skript (Jetson Nano Board) alle 5 Minuten, wie per Tastatureingabe per seriellem Monitor (was ja funktioniert) eine Ausgabe der Sensordaten vom Arduino zu triggern.