Jeg får feilen i tittelen min når jeg prøver å kompilere følgende kode:

#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

Koden din er helt feil i nesten alle henseender.


#define char incomingByte; //Defines incomingByte 

Denne linjen betyr at kompilatoren vil erstatte incomingByte; når den ser char.


#define char sendBack = K; 

Nå vil den erstatte sendBack = K; når den ser char.


#define char ?; 

Nå vil den erstatte ?; når den ser char.


#define pollTime; 

Jeg vet ikke hva du tenker her. Hvis du prøver å erklære en variabel du må gi en type, slik:

int pollTime; 

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

Disse linjene er OK.


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

Du vil ikke ha semikolonet der. En for sløyfe er ikke skrevet slik. Du mener muligens while, dvs.

while(Serial.available() > 0) 

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

Det gjør ingenting av den typen. Den forsinker 200 µs, den angir ikke noe.


incomingByte = Serial.read(); 

Den linjen er OK, forutsatt at du erklærte incomingByte slik, og ikke slik du gjorde:

char incomingByte; 

if(incomingByte = ?) { 

At må være i enkelte anførselstegn, ettersom du sammenligner et tegn. Du sammenligner også med == ikke = dvs.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Det ser ut fra din tidligere kode du mener:

Serial.print("K"); 

 } } } 

Disse linjene ser OK ut.


Jeg foreslår at du leser en nybegynnerside om C-programmering. Dette er bare ren gjetning hva du gjør her. For en ting, les om hvordan #define fungerer. Her er en side: https://www.techonthenet.com/c_language/constants/create_define.php . Og en annen: http://www.cprogramming.com/reference/preprocessor/define.html

Kommentarer

  • Takk skal du ha. Dette var veldig nyttig. Jeg ' Jeg vil se på lenkene du oppga.
  • P.S. bør du endre " respektere " til " aspekt " i første linje
  • Jeg ' er ikke sikker på det. Se i alle henseender som betyr: helt, direkte, helt, grundig, helt, helt, fullstendig

Svar

[UPDATE]

Prøv dette:

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 jeg kjører koden, gir det følgende feil:
  • ugyldig konvertering fra ' const char * ' til ' char ' [-fpermissive]
  • oppdater siden og test den nye koden
  • Takk. Denne delen fungerte. Jeg glemte å nevne at jeg også trenger det for å slå av lysdioden hvis ikke vilkåret er oppfylt. Når jeg kjører koden du har oppgitt, lyser LED-en.
  • Det ' er egentlig ingen grunn til å bruke ascii-koden for et spørsmålstegn her, det gjør det programmet vanskelig å forstå. Bruk '?' den tidligere feilen din var et resultat av å bruke en streng (doble anførselstegn) i stedet for et enkelt tegn (enkelt anførselstegn).

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *