Forum: PC-Programmierung Datenübertragung über /dev/ttyACM0


von Jan M. (pietus3)


Lesenswert?

Hallo,

Ich versuche auf Linux Mint 17.3 eine Datenübertragung zwischen meinem 
PC und meinem Arduino herzustellen. Dafür nutze ich die C-Standard 
Bibliothek File.

Bei meiner Datenübertragung scheint es noch zu hapern. Ich kann zwar 
Datenübertragen, aber nur unregelmäßig nicht vollständing also nicht 
sicher. Natürlich wird der Code nicht perfekt sein. Ich wollte vorallem 
Fragen, ob mein Ansatz ok ist oder ich auf einem Holzweg bin. Hier mein 
Code.

Der C-Code der auf dem PC asgeführt wird:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
#include <unistd.h>
5
6
int main(){
7
  
8
        FILE *fp;
9
     
10
  char bufflen[255];
11
12
     fp = fopen("/dev/ttyACM0", "r+");
13
14
  setbuf(fp,bufflen);
15
while(1){
16
     fprintf(fp, "Hey");
17
18
  fflush(fp);
19
20
  fscanf(fp,"%s",bufflen);
21
     printf("Received: %s", bufflen );
22
        sleep(100);
23
}
24
     fclose(fp);
25
}

Hier der QuellText von meinem Arduino
1
String inData;
2
3
void setup() {
4
    Serial.begin(9600);
5
   
6
}
7
8
void loop() {
9
    while (Serial.available() > 0)
10
    {
11
        char recieved = Serial.read();
12
        inData += recieved; 
13
14
        
15
        if (recieved == 'y')
16
        {
17
            Serial.print("Arduino Received: ");
18
            Serial.println(inData);
19
20
            inData = "";
21
        }
22
    }
23
}

Schonmal Vielen Dank für eure Hilfe

Pietus3

: Verschoben durch User
von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Da fehlt das wichtigste: Die Verwendung von termios.

Eine der besten lesbaren Einführungen dazu findet man in

Stephen A. Rago; W. Richard Stevens: Advanced Programming in the UNIX 
Environment

Eher miese Übersichten findet man in:

https://en.wikibooks.org/wiki/Serial_Programming:Unix/termios
http://tldp.org/HOWTO/Serial-Programming-HOWTO/x56.html

von Clemens L. (c_l)


Lesenswert?

Warum rufst du setbuf() auf? Mal davon abgesehen, dass der Puffer 
mindestens BUFSIZ Bytes haben muss, kannst du den Puffer dann für nichts 
anderes verwenden.

von Jan M. (pietus3)


Lesenswert?

Ok vielen Dank ich les mich dann mal in termios ein.

Und ich habe setbuf aufgerufen weil ich dachte dass dies die Pufferung 
verbessern würde. Scheint dann wohl nicht so.

Danke

von Noch einer (Gast)


Lesenswert?

Einfacher wäre, mit einem Terminalemulator wie cutecom die verschiedenen 
Parameter ausprobieren.

Falls es damit nicht stabil läuft, liegt es an der Hardware.

Wenn es läuft, mit stty die Parameter auslesen. Terminalemulator 
beenden. Am Anfang deines Programm diese Parameter wieder setzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.