Hallo, Ich versuche gerade ein Programm zu schreiben welches beim Empfang von "on" eine LED einschaltet. Prinzipiell funktoniert bei mir die Kommunikation zwischen PC und AVR. Ich denke ich habe einen Fehler bei der Abfrage: if(Line == "on") Muss ich hier noch das '\n' und '\0' mitabfragen. (hab ich eigentlich schon alles versucht) Oder stimmt etwas mit meinen Datenformaten nocht? Für Tipps zu einem Lösungsansatz wäre ich recht dankbar. Danke im Voraus mfg Patrick
Patrick schrieb: > Ich denke ich habe einen Fehler bei der Abfrage: if(Line == "on") gut gedacht. Denn C kann keine strings so vergleichen, so wie du es geschrieben hast vergleichst du adressen. schau dir mal die funktion strcmp an.
In jedem C Buch bzw Tutorial wirst du strcmp() finden. Wenn deine Vergleichsstrings sich nicht ändern, dann lass sie am besten im Flash. Das spart RAM. http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#gae3a7686c2e207b543be3b402d919761a
Das mit dem Vergleichen hat nun geklappt. Allerdings wenn ich den String über die RS232 Schnittstelle einlese klappt das ganze noch immer nicht wie gewünscht. Muss ich etwa das /n bzw /0 mit vergleichen? Als Rückgabe erhalte ich allerdings: (siehe auch Anhang) Empfangen wurde: on Empfangen wurde: on mfg Patrick
Für Rückgabewert 0 müssen bei strcmp() die Strings ident sein. Also gleich lang und gleicher Inhalt (nur bei strcasecmp() ist Groß- und Kleinschreibung egal). Also entweder \r und \n mit \0 überschreiben, oder gleich nur die ersten 2 Zeichen mit strncmp_P überprüfen. Bei letzterer Methode würde dann aber auch ein Vergleich von "online" mit "on" den Rückgabewert 0 liefern, da ja die ersten beiden Zeichen stimmen.
so schluss für heute. ich habe es zwar geschafft die Position von \r im string zu bestimmen wie ich diesen aber durch \0 ersetze weiß ich noch nicht. Vielleicht hat hier noch wer einen Tipp für mich. Mein Programm funktionier nun aberer trotzdem da ich den empfangenen String einfach mit "on\r" vergleiche. char Line[40]; // String mit maximal 39 zeichen char Line2[4]="on\r"; char Line3[5]="off\r"; uart_gets( Line, sizeof( Line ) ); if(strcmp(Line,Line2)==0) { PORTC &= ~(1<<0); } if(strcmp(Line,Line3)==0) { PORTC |= (1<<0); } Dankeschön und noch einen schönen Abend mfg Patrick
empfange doch einfach bis zum \n und speicher das \n nicht erst im string.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.