mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART Problem (Anfänger)


Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Aua (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aua! C-Grundlagen: Stringvergleiche!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankeschön jetzt weiß ich wonach ich suchen muss

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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__...

Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
empfange doch einfach bis zum \n und speicher das \n nicht erst im 
string.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.