Jag får felet i min titel när jag försöker sammanställa följande kod:

#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); } } } 

Svar

Din kod är helt fel i nästan alla avseenden.


#define char incomingByte; //Defines incomingByte 

Den raden betyder att kompilatorn ersätter incomingByte; när den ser char.


#define char sendBack = K; 

Nu ersätter den sendBack = K; när den ser char.


#define char ?; 

Nu ersätter den ?; när den ser char.


#define pollTime; 

Jag vet inte vad du tänker här. Om du försöker förklara en variabel som du måste ange en typ, så här:

int pollTime; 

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

Dessa rader är OK.


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

Du vill inte ha semikolon där. En for -slinga är inte skriven så. Du menar möjligen while, dvs.

while(Serial.available() > 0) 

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

Det gör ingenting av det slaget. Det fördröjer 200 µs, det ställer inte in något.


incomingByte = Serial.read(); 

Den raden är OK, förutsatt att du förklarade incomingByte så här och inte som du gjorde:

char incomingByte; 

if(incomingByte = ?) { 

Det måste anges i enstaka citat, eftersom du jämför ett tecken. Du jämför också med == inte = dvs.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Från din tidigare kod ser du ut som:

Serial.print("K"); 

 } } } 

Dessa rader ser OK ut.


Jag föreslår att du läser en nybörjarsida om C-programmering. Detta är bara rent gissning vad du gör här. För en sak, läs om hur #define fungerar. Här är en sida: https://www.techonthenet.com/c_language/constants/create_define.php . Och en annan: http://www.cprogramming.com/reference/preprocessor/define.html

Kommentarer

  • Tack. Detta var till stor hjälp. Jag ' Jag tittar på länkarna som du angav.
  • P.S. du bör ändra " respektera " till " aspekt " i första raden
  • Jag ' är inte säker på det. Se i alla avseenden vilket betyder: helt, fullständigt, helt, grundligt, helt, helt, fullständigt

Svar

[UPPDATERING]

Prova detta:

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"); } } } 

Kommentarer

  • När jag kör koden ger det följande fel:
  • ogiltig konvertering från ' const char * ' till ' char ' [-tillåtet]
  • uppdatera sidan och testa den nya koden
  • Tack. Denna del fungerade. Jag glömde att nämna att jag också behöver den för att stänga av lysdioden om villkoret inte är uppfyllt. När jag kör koden som du har angett att lysdioden lyser.
  • Det finns ' egentligen ingen anledning att använda ascii-koden för ett frågetecken här, det gör programmet svårt att förstå. Använd '?' ditt tidigare fel var ett resultat av att du använder en sträng (dubbla citat) snarare än ett enstaka tecken (enstaka citat).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *