W tytule pojawia się błąd, gdy próbuję skompilować następujący kod:

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

Odpowiedź

Twój kod jest całkowicie błędny prawie pod każdym względem.


#define char incomingByte; //Defines incomingByte 

Ta linia oznacza, że kompilator podstawi incomingByte; za każdym razem, gdy zobaczy char.


#define char sendBack = K; 

Teraz zastąpi sendBack = K;, gdy zobaczy char.


#define char ?; 

Teraz zastąpi ?;, gdy zobaczy char.


#define pollTime; 

Nie wiem, o czym tutaj myślisz. Jeśli próbujesz zadeklarować zmienną, którą musisz podać typ, na przykład:

int pollTime; 

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

Te linie są w porządku.


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

Nie chcesz tam średnika. Pętla for nie jest tak napisana. Prawdopodobnie masz na myśli while, tj.

while(Serial.available() > 0) 

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

To nic takiego. Opóźnia 200 µs, niczego nie ustawia.


incomingByte = Serial.read(); 

Ta linia jest OK, zakładając, że zadeklarowałeś incomingByte w ten sposób, a nie w ten sposób:

char incomingByte; 

if(incomingByte = ?) { 

Że musi być w apostrofach, ponieważ porównujesz znak. Porównujesz również z ==, a nie = tj.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Wygląda na to, że masz na myśli wcześniejszy kod:

Serial.print("K"); 

 } } } 

Te wiersze wyglądają dobrze.


Proponuję przeczytać stronę dla początkujących o programowaniu w C. To jest zgaduj, co tu robisz. Przeczytaj, jak działa #define. Oto jedna strona: https://www.techonthenet.com/c_language/constants/create_define.php . I jeszcze: http://www.cprogramming.com/reference/preprocessor/define.html

Komentarze

  • Dziękuję Ci. To było bardzo pomocne. ' przyjrzę się podanym przez Ciebie linkom.
  • P.S. należy zmienić " respekt " na " aspekt " w pierwszej linii
  • Nie ' nie jestem tego pewien. Zobacz pod każdym względem , co oznacza: całkowicie, wprost, całkowicie, dokładnie, całkowicie, całkowicie, całkowicie

Odpowiedź

[UPDATE]

Spróbuj:

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

Komentarze

  • Po uruchomieniu kodu pojawia się następujący błąd:
  • nieprawidłowa konwersja z ' const char * ' to ' char ' [-fpermissive]
  • odśwież stronę i przetestuj nowy kod
  • Dziękujemy. Ta część zadziałała. Zapomniałem wspomnieć, że potrzebuję go też do wyłączania diody, jeśli warunek nie jest spełniony. Kiedy uruchamiam kod, który podałeś, dioda LED świeci.
  • Nie ' naprawdę nie ma powodu, aby używać kodu ascii jako znaku zapytania, program trudny do zrozumienia. Użyj '?', twój wcześniejszy błąd był wynikiem użycia ciągu (podwójne cudzysłowy), a nie pojedynczego znaku (pojedyncze cudzysłowy).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *