Hallo,
ich möchte mit meinem Mikrocontrollerboard (Arduino) zwei Variablen an
meinen PC senden via serielle Schnittstelle. Diese werden dann dort
verarbeitet und der Rückgabewert soll dann wieder auf der seriellen
Schnittstelle landen und vom Mikrocontrollerboard empfangen werden.
Hinter dem ganzen Programm steckt ein Fuzzy-Regler, welcher auf Windows
läuft und die Parameter vom Board bekommt. Dann berechnet der Regler die
Stellgröße und schreibt diese wieder auf die serielle Schnittstelle.
Dort ließt das Board diese dann und sendet sie zum Ausgang.
Den Code für mein MC-Board habe ich schon fertig:
1 | float ergebnis;
|
2 | //float ergebnis = 0.0;
|
3 | int wert1; //Regeldifferenz, ist e ein Integerwert oder float?
|
4 | int wert2; //Regelldifferenz über die Zeit
|
5 |
|
6 | void setup() { //SETUP
|
7 |
|
8 | Serial.begin(9600);
|
9 | // pinMode(ledPin, OUTPUT);
|
10 |
|
11 | }
|
12 |
|
13 | void loop() { //Programmschleife
|
14 |
|
15 | Serial.print('@'); // sende Startzeichen
|
16 | Serial.print(","); // sende Zeichen Feldtrennung
|
17 | Serial.print(wert1);
|
18 | Serial.print(",");
|
19 | Serial.print(wert2);
|
20 | Serial.print(",\n"); // neue Zeile, Ende Uebertragung
|
21 | Serial.flush(); // wartet bis alles uebertragen ist!
|
22 |
|
23 | if (Serial.available() > 0) //wenn sich Daten auf der seriellen Schnittstelle befinden
|
24 | {
|
25 | float ergebnis = Serial1.parseFloat(); //suche nächsten Float-Wert
|
26 | delay(1000); // warte 1 Sek.
|
27 | Serial.write(ergebnis); //schreibe den empfangenen Wert wieder auf die Schnittstelle
|
28 | lcd.print(ergebnis); //schreibe den empfangenen ergebnis auf das LCD Display
|
29 | }
|
30 | }
|
Die passende Windows.exe dazu möchte ich mit DevCpp erstellen. Doch wie
sieht der passende Code dazu aus, um die beiden Integer-Variablen von
der seriellen Schnittstelle auszulesen und das Ergebnis dort wieder
hinzuschreiben?
Den Code für die Verarbeitung der beiden Werte habe ich bereits
erfolgreich in mein DevCpp Projekt eingebunden und getestet.
Ich habe den Windows Code mal hier hochgeladen:
http://www.file-upload.net/download-9509213/fuzzy0.zip.html
In der Konsole passt der Wert, doch auf der seriellen Schnittstelle sagt
er immer dieser sei 0.0000:
1 | long stell;
|
2 | DOUBLE **outputMatrix;
|
3 |
|
4 | PRINTF("Stellwert = %.12f", stell); //das funktioniert, hier wird der richtige Wert angezeigt
|
5 |
|
6 | file = fopen("COM4:","w");
|
7 | fprintf(file,"%.12f", stell); //hier wird nur 0.000000000 angezeigt
|
8 | fprintf(file,"\nDaten erfolgreich gesendet..."); //das funktioniert
|
9 | fclose(file);
|
Ich habe es schon mit %d, %i und sprintf probiert. Aber er zeigt mir
einfach den Wert nicht an. Woran mag das liegen?
LG