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