Saan virhe otsikossa, kun yritän koota seuraavaa koodia:

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

vastaus

Koodisi on melkein väärä melkein kaikilta osin.


#define char incomingByte; //Defines incomingByte 

Tämä rivi tarkoittaa, että kääntäjä korvaa incomingByte; aina, kun se näkee char.


#define char sendBack = K; 

Nyt se korvaa sendBack = K;, kun se näkee char.


#define char ?; 

Nyt se korvaa ?; nähdessään char.


#define pollTime; 

En tiedä mitä ajattelet täällä. Jos yrität julistaa muuttuja, jonka on annettava tyyppi, kuten tämä:

int pollTime; 

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

Ne rivit ovat kunnossa.


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

Et halua puolipistettä sinne. for -silmukkaa ei ole kirjoitettu näin. Tarkoitat mahdollisesti while, ts.

while(Serial.available() > 0) 

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

Se ei tee mitään sellaista. Se viivästyttää 200 µs, se ei aseta mitään.


incomingByte = Serial.read(); 

Tämä rivi on OK, olettaen, että olet ilmoittanut incomingByte kuten tämä, eikä niin kuin teit:

char incomingByte; 

if(incomingByte = ?) { 

Se täytyy olla yksittäisissä lainausmerkeissä, kun verrataan merkkiä. Verrataan myös ryhmään == ei = ie.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Se näyttää aiemmalta koodiltasi:

Serial.print("K"); 

 } } } 

Nämä rivit näyttävät hyvältä.


Ehdotan, että luet aloittajien sivun C-ohjelmoinnista. Tämä on vain arvaus mitä teet täällä. Ensinnäkin, lue lisää siitä, miten #define toimii. Tässä on yksi sivu: https://www.techonthenet.com/c_language/constants/create_define.php . Ja toinen: http://www.cprogramming.com/reference/preprocessor/define.html

Kommentit

  • Kiitos. Tämä oli erittäin hyödyllistä. ' tarkastelen antamiasi linkkejä.
  • P.S. sinun tulisi muuttaa " respect " arvoksi " aspekti " ensimmäisellä rivillä
  • En ' ole varma siitä. Katso kaikilta osin , mikä tarkoittaa: kokonaan, suoraan, kokonaan, perusteellisesti, kokonaan, kokonaan, täysin

Vastaa

[PÄIVITYS]

Kokeile tätä:

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

kommentit

  • Kun suoritan koodin, se antaa seuraavan virheen:
  • virheellinen muunnos kohteesta ' const char * ' – ' char ' [-fpermissive]
  • päivitä sivu ja testaa uusi koodi
  • kiitos. Tämä osa toimi. Unohdin mainita, että tarvitsen sitä myös sammuttamaan LED: n, jos ehto ei täyty. Kun suoritan antamasi koodin, jonka LED-valo palaa.
  • Siellä ' ei todellakaan ole syytä käyttää ascii-koodia kysymysmerkkiin tässä, se tekee ohjelmaa vaikea ymmärtää. Käytä '?' aikaisempi virhe johtui merkkijonon (kaksoislainausmerkit) käytöstä yksittäisen merkin (yksittäiset lainausmerkit) sijaan.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *