Hiba jelentkezik a címemben, amikor megpróbálom összeállítani a következő kódot:

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

Válasz

A kódod szinte minden szempontból hibás.


#define char incomingByte; //Defines incomingByte 

Ez a sor azt jelenti, hogy a fordító a incomingByte; helyébe lép, amikor látja a char.


#define char sendBack = K; 

Most helyettesíti a következőt: sendBack = K;, ha meglátja a char.


#define char ?; 

Mostantól a ?; helyébe lép, ha meglátja a char.


#define pollTime; 

Nem tudom, mire gondolsz itt. Ha nyilatkozni próbálsz egy változó, amelyet meg kell adnia egy ilyen típust:

int pollTime; 

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

Azok a sorok rendben vannak.


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

Nem akarja, hogy a pontosvessző ott legyen. A for ciklus nem így van megírva. Valószínűleg while, azaz.

while(Serial.available() > 0) 

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

Ez nem tesz semmit. Késlelteti a 200 µs-ot, nem állít be semmit.


incomingByte = Serial.read(); 

Ez a sor rendben van, ha azt mondjuk, hogy incomingByte mint ez, és nem úgy, ahogy te tetted:

char incomingByte; 

if(incomingByte = ?) { 

Ez egyetlen idézőjelben kell szerepelnie, ahogyan egy karaktert hasonlít össze. A == és a = ie.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Úgy tűnik, a korábbi kódod alapján érted:

Serial.print("K"); 

 } } } 

Ezek a sorok rendben vannak.


Javaslom, hogy olvasson el egy kezdő oldalt a C programozásról. Ez csak találgatás, amit itt csinálsz. Egyrészt olvassa el a #define működését. Itt van egy oldal: https://www.techonthenet.com/c_language/constants/create_define.php . És még egy: http://www.cprogramming.com/reference/preprocessor/define.html

Megjegyzések

  • Köszönöm. Ez nagyon hasznos volt. ' Megnézem az Ön által megadott linkeket.
  • P.S. a " respekt " -re " szempontot kell módosítania " az első sorban
  • Én ebben nem vagyok biztos # '. Lásd: minden tekintetben , ami azt jelenti: teljesen, egyenesen, teljesen, alaposan, összesen, teljesen, teljesen

Válasz

[UPDATE]

Próbálja ki:

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

megjegyzések

  • Amikor futtatom a kódot, a következő hibát jelzi:
  • érvénytelen konverzió const char * ' – ' char ' [-fpermissive]
  • frissítse az oldalt és tesztelje az új kódot
  • köszönöm. Ez a rész bevált. Elfelejtettem megemlíteni, hogy szükségem van rá is a LED kikapcsolásához, ha a feltétel nem teljesül. Amikor futtatom a megadott kódot, a LED világít.
  • Ott ' nincs ok arra, hogy itt kérdőjelként használjuk az ascii kódot, ez a program nehezen érthető. Használja a '?' alkalmazást, korábbi hibája egy karakterlánc (kettős idézőjelek), nem pedig egy karakter (egyes idézőjelek) használata volt.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük