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.