Das ist ja großartig.
Ich möchte Dich noch auf ein paar Dinge hinweisen, wenn Du Wert auf ein stimmiges Programm legst (zumal Du Deinen Code auch anderen hier zur Verfügung stellst):
a) Im Falle eines Fehlers, beispielsweise UART_BUFFER_OVERFLOW, UART_OVERRUN_ERROR, UART_FRAME_ERROR wird dessen Wert (inkl. den UART_BUFFER... Bits) nochmals an den PC gesendet (Stichwort "Echo").
b) dein Prozessor ist unnötig belastet: er vergleicht die bisher empfangene Zeichenkette jedesmal wenn ein einzelnes Zeichen empfangen wurde. D.h. er wird einen Befehl zwei mal ausführen auch wenn Du kein ENTER gedrückt hast (aber nur wenn die Zeichenlänge identisch ist mit dem zuvor abgesetzten Befehl ist, bsp. TEMP1 und TEMP2. Mach Dir bitte die Mühe, und überprüfe den empfangenen String erst dann wenn tatsächlich ENTER empfangen wurde (zumal Du Deinen Code hier als Beispiel veröffentlicht hast)
Ich mag an dieser Stelle etwas pingelig klingen, aber glaub mir, viele unvorhergesehene Verhaltensweisen eines Roboters oder einer Steuerung haben mit unsachgemäßer Programmierung zu tun. Nicht um sonst gibt es den "Programmierer" als Beruf mit entsprechender Ausbildung.
Für ein solch' kleines Projekt ist es ggf. noch verschmerzbar, aber spätestens wenn es um das automatische Füttern Deiner Fische geht (wenn Du beispielsweise 3 Wochen in Urlaub bist), wäre es mehr als tragisch wenn deine Fische verhungern oder verkocht sind, weil die Heizung zu hoch heizt.
Die Erfahrung zeigt: was schief gehen kann, passiert auch. Es ist nur eine Frage der Wahrscheinlichkeit wann ein Bug im Programmcode zum tragen kommt.
Falls Du mir nicht glaubst, versuche folgendes:
a) sende an dein Board "TEMP1" und drücke ENTER
b) sende den Buchstaben "T" an Dein Board und es wird mit "Temperatur1=.......\n" antworten, noch bevor Du ENTER gedrückt hast
Sei so gut und mache Deine "if (strcmp" Anweisungen bitte in die Klammer von "if ((unsigned char)c==13)" hinein.
Wenn Du noch Fragen zum Code hast, poste einfach. Ich schau mir den gerne nochmal an.
Lesezeichen