Primesc eroarea în titlul meu când încerc să compilez următorul cod:

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

Răspuns

Codul dvs. este complet greșit în aproape toate aspectele.


#define char incomingByte; //Defines incomingByte 

Această linie înseamnă că compilatorul va substitui incomingByte; ori de câte ori vede char.


#define char sendBack = K; 

Acum va înlocui sendBack = K; când va vedea char.


#define char ?; 

Acum va înlocui ?; când va vedea char.


#define pollTime; 

Nu știu la ce vă gândiți aici. Dacă încercați să declarați o variabilă trebuie să dați un tip, astfel:

int pollTime; 

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

Cei liniile sunt OK.


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

Nu vrei punctul și virgula acolo. O buclă for nu este scrisă așa. Vrei să spui while, adică

while(Serial.available() > 0) 

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

Asta nu face nimic de genul. Întârzie 200 µs, nu „setează nimic.


incomingByte = Serial.read(); 

Această linie este OK, presupunând că ați declarat incomingByte așa, și nu așa cum ai făcut-o:

char incomingByte; 

if(incomingByte = ?) { 

Că trebuie să fie între ghilimele simple, deoarece comparați un caracter. De asemenea, comparați cu == nu = adică.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Se pare că din codul tău anterior vrei să spui:

Serial.print("K"); 

 } } } 

Aceste linii arată OK.


Vă sugerez să citiți o pagină pentru începători despre programarea C. Aceasta este presupuneți pur și simplu ce faceți aici. În primul rând, citiți cum funcționează #define. Iată o pagină: https://www.techonthenet.com/c_language/constants/create_define.php . Și un altul: http://www.cprogramming.com/reference/preprocessor/define.html

Comentarii

  • Mulțumesc. A fost foarte util. ' voi analiza linkurile pe care le-ați furnizat.
  • P.S. ar trebui să schimbați " respectați " în " aspect " în prima linie
  • Nu ' nu sunt sigur despre asta. A se vedea din toate punctele de vedere ceea ce înseamnă: în întregime, direct, în întregime, în întregime, în totalitate, în totalitate, în totalitate

Răspuns

[UPDATE]

Încercați acest lucru:

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

Comentarii

  • Când rulez codul, apare următoarea eroare:
  • conversie invalidă de la ' const char * ' la ' char ' [-fpermissive]
  • reîmprospătați pagina și testați noul cod
  • Vă mulțumim. Această parte a funcționat. Am uitat să menționez că am nevoie și de acesta pentru a opri LED-ul dacă condiția nu este îndeplinită. Când rulez codul pe care l-ați furnizat, LED-ul este aprins.
  • Nu există ' într-adevăr niciun motiv pentru a folosi codul ascii pentru un semn de întrebare aici, face programul greu de înțeles. Utilizați '?' eroarea dvs. anterioară a fost rezultatul utilizării unui șir (ghilimele duble), mai degrabă decât a unui singur caracter (ghilimele unice).

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *