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.