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).