Ricevo lerrore nel titolo quando provo a compilare il codice seguente:

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

Risposta

Il tuo codice è completamente sbagliato in quasi tutti gli aspetti.


#define char incomingByte; //Defines incomingByte 

Questa riga significa che il compilatore sostituirà incomingByte; ogni volta che vede char.


#define char sendBack = K; 

Ora sostituirà sendBack = K; quando vedrà char.


#define char ?; 

Ora sostituirà ?; quando vede char.


#define pollTime; 

Non so cosa stai pensando qui. Se stai cercando di dichiarare una variabile a cui devi dare un tipo, come questo:

int pollTime; 

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

Quelle le righe sono OK.


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

Non vuoi che ci sia il punto e virgola. Un for loop non è scritto in questo modo. Forse intendi while, ad es.

while(Serial.available() > 0) 

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

Questo non fa nulla del genere. È in ritardo di 200 µs, non sta impostando nulla.


incomingByte = Serial.read(); 

Quella riga è OK, supponendo che tu abbia dichiarato incomingByte in questo modo, e non come hai fatto tu:

char incomingByte; 

if(incomingByte = ?) { 

che deve essere racchiuso tra virgolette singole, poiché stai confrontando un carattere. Inoltre, effettui il confronto con == non = es.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Sembra che dal tuo codice precedente intendessi:

Serial.print("K"); 

 } } } 

Queste righe sembrano OK.


Ti suggerisco di leggere una pagina per principianti sulla programmazione C. Questa è è solo pura supposizione quello che stai facendo qui. Per prima cosa, leggi come funziona #define. Ecco una pagina: https://www.techonthenet.com/c_language/constants/create_define.php . E un altro: http://www.cprogramming.com/reference/preprocessor/define.html

Commenti

  • Grazie. Questo è stato molto utile. ' esaminerò i link che hai fornito.
  • P.S. devi modificare " rispetto " in " aspetto " nella prima riga
  • ' non ne sono sicuro. Vedere sotto tutti gli aspetti che significa: interamente, a titolo definitivo, completamente, completamente, completamente, totalmente, completamente

Risposta

[AGGIORNAMENTO]

Prova questo:

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

Commenti

  • Quando eseguo il codice, viene visualizzato il seguente errore:
  • conversione non valida da ' const char * ' a ' char ' [-fpermissive]
  • aggiorna la pagina e prova il nuovo codice
  • Grazie. Questa parte ha funzionato. Ho dimenticato di dire che ho bisogno anche di spegnere il LED se la condizione non è soddisfatta. Quando eseguo il codice che hai fornito, il LED è acceso.
  • Non ' non cè davvero alcun motivo per usare il codice ASCII per un punto interrogativo qui, fa il programma difficile da capire. Utilizza '?' il tuo errore precedente era il risultato dellutilizzo di una stringa (virgolette doppie) invece di un singolo carattere (virgolette singole).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *