Beim Versuch, den folgenden Code zu kompilieren, wird der Fehler in meinem Titel angezeigt:

#define char incomingByte; //Defines incomingByte #define char sendBack = K; #define char ?; #define pollTime; bool running = true; void setup() { Serial.begin(9600); //Set data rate. } void loop() { for(Serial.available() > 0;) { //Gets you the number of bytes that are available to be read from the serial port. pollTime = delayMicroseconds(200); // Sets a poll time of 200 microseconds. incomingByte = Serial.read(); if(incomingByte = ?) { Serial.print(sendBack); } } } 

Antwort

Ihr Code ist in fast jeder Hinsicht völlig falsch.


#define char incomingByte; //Defines incomingByte 

Diese Zeile bedeutet, dass der Compiler incomingByte; ersetzt, wenn er char sieht.


#define char sendBack = K; 

Jetzt wird sendBack = K; ersetzt, wenn char.


#define char ?; 

Jetzt wird ?; ersetzt, wenn .


#define pollTime; 

Ich weiß nicht, was Sie hier denken. Wenn Sie versuchen, zu deklarieren Eine Variable, die Sie wie folgt eingeben müssen:

int pollTime; 

bool running = true; void setup() { Serial.begin(9600); //Set data rate. } void loop() { 

Diese Zeilen sind in Ordnung.


for(Serial.available() > 0;) { //Gets you the number of bytes that are available to be read from the serial port. 

Sie möchten das Semikolon dort nicht. Eine for -Schleife wird nicht so geschrieben. Sie meinen möglicherweise while, dh

while(Serial.available() > 0) 

pollTime = delayMicroseconds(200); // Sets a poll time of 200 microseconds. 

Das macht nichts dergleichen. Es verzögert 200 µs, es wird nichts eingestellt.


incomingByte = Serial.read(); 

Diese Zeile ist in Ordnung, vorausgesetzt, Sie haben so und nicht so, wie Sie es getan haben:

char incomingByte; 

if(incomingByte = ?) { 

Das muss in einfachen Anführungszeichen stehen, wenn Sie ein Zeichen vergleichen. Außerdem vergleichen Sie mit == nicht = dh

if(incomingByte == "?") { 

Serial.print(sendBack); 

Aus Ihrem früheren Code geht hervor, dass Sie Folgendes meinen:

Serial.print("K"); 

 } } } 

Diese Zeilen sehen in Ordnung aus.


Ich schlage vor, Sie lesen eine Anfängerseite über C-Programmierung Nur eine Vermutung, was Sie hier tun. Lesen Sie zum einen, wie #define funktioniert. Hier ist eine Seite: https://www.techonthenet.com/c_language/constants/create_define.php . Und noch eines: http://www.cprogramming.com/reference/preprocessor/define.html

Kommentare

  • Danke. Das war sehr hilfreich. Ich ' werde die von Ihnen bereitgestellten Links untersuchen.
  • P.S. Sie sollten " respektieren " in " Aspekt " in der ersten Zeile
  • Ich ' bin mir da nicht sicher. Siehe in jeder Hinsicht , was bedeutet: vollständig, vollständig, vollständig, vollständig, insgesamt, vollständig, vollständig

Antwort

[UPDATE]

Versuchen Sie Folgendes:

int question = 63; //in the ascii table, ? is 63 void setup() { Serial.begin(9600); //set baud rate. } void loop() { if (Serial.available()) { //Gets you the number of bytes that are available to be read from the serial port. if (Serial.read() == question) { Serial.println("OK"); } } } 

Kommentare

  • Wenn ich den Code ausführe, wird der folgende Fehler ausgegeben:
  • ungültige Konvertierung von ' const char * ' bis ' char ' [-fpermissive]
  • Aktualisieren Sie die Seite und testen Sie den neuen Code.
  • Vielen Dank. Dieser Teil hat funktioniert. Ich habe vergessen zu erwähnen, dass ich es auch brauche, um die LED auszuschalten, wenn die Bedingung nicht erfüllt ist. Wenn ich den von Ihnen angegebenen Code ausführe, leuchtet die LED.
  • Es gibt ' wirklich keinen Grund, den ASCII-Code hier für ein Fragezeichen zu verwenden das Programm schwer zu verstehen. Verwenden Sie '?' Ihr früherer Fehler war das Ergebnis der Verwendung einer Zeichenfolge (doppelte Anführungszeichen) anstelle eines einzelnen Zeichens (einfache Anführungszeichen).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.