Zobrazuje se mi chyba v názvu při pokusu o kompilaci následujícího kódu:

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

Odpovědět

Váš kód je téměř v každém ohledu špatně.


#define char incomingByte; //Defines incomingByte 

Tento řádek znamená, že kompilátor nahradí incomingByte;, kdykoli vidí char.


#define char sendBack = K; 

Nyní nahradí sendBack = K;, když uvidí char.


#define char ?; 

Nyní nahradí ?;, když vidí char.


#define pollTime; 

Nevím, co si zde myslíte. Pokud se snažíte deklarovat proměnnou, kterou musíte zadat, například:

int pollTime; 

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

Ty řádky jsou v pořádku.


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

Nechcete tam středník. Smyčka for není takto napsána. Možná myslíte while, tj.

while(Serial.available() > 0) 

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

To nedělá nic takového. Zpožďuje se 200 µs, nic nenastavuje.


incomingByte = Serial.read(); 

Tento řádek je v pořádku, za předpokladu, že jste deklarovali incomingByte takto, a ne tak, jak jste to udělali:

char incomingByte; 

if(incomingByte = ?) { 

To musí být v jednoduchých uvozovkách, protože porovnáváte postavu. Rovněž porovnáváte s == ne = tj.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Vypadá to z vašeho dřívějšího kódu, který máte na mysli:

Serial.print("K"); 

 } } } 

Tyto řádky vypadají dobře.


Navrhuji, abyste si přečetli stránku pro začátečníky o programování v jazyce C. Toto je jen čisté dohady, co zde děláte. Jednak si přečtěte, jak #define funguje. Zde je jedna stránka: https://www.techonthenet.com/c_language/constants/create_define.php . A další: http://www.cprogramming.com/reference/preprocessor/define.html

Komentáře

  • Děkuji. To bylo velmi užitečné. ' Podívám se na odkazy, které jste poskytli.
  • P.S. měli byste změnit " respektovat " na " aspekt " v prvním řádku
  • I ' si tím nejsem jistý. Viz ve všech ohledech , což znamená: úplně, úplně, úplně, důkladně, úplně, úplně, úplně

Odpověď

[UPDATE]

Zkuste toto:

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

Komentáře

  • Když spustím kód, zobrazí se následující chyba:
  • neplatná konverze z ' const char * ' až ' char ' [-fpermissive]
  • obnovte stránku a otestujte nový kód
  • děkuji. Tato část fungovala. Zapomněl jsem zmínit, že také potřebuji vypnout LED, pokud podmínka není splněna. Když spustím kód, který jste zadali, LED dioda svítí.
  • Tady ' opravdu není důvod používat zde kód ascii pro otazník program těžko pochopitelný. Použijte '?' vaše dřívější chyba byla výsledkem použití řetězce (dvojité uvozovky) místo jednoho znaku (jednoduché uvozovky).

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *