Jeg får fejlen i min titel, når jeg prøver at kompilere følgende kode:
#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); } } }
Svar
Din kode er helt forkert i næsten alle henseender.
#define char incomingByte; //Defines incomingByte
Denne linje betyder, at compileren erstatter incomingByte;
, når den ser char
.
#define char sendBack = K;
Nu erstatter den sendBack = K;
når den ser char
.
#define char ?;
Nu erstatter det ?;
når det ser char
.
#define pollTime;
Jeg ved ikke hvad du tænker her. Hvis du prøver at erklære en variabel, du skal angive en type, som denne:
int pollTime;
bool running = true; void setup() { Serial.begin(9600); //Set data rate. } void loop() {
Disse linjer er OK.
for(Serial.available() > 0;) { //Gets you the number of bytes that are available to be read from the serial port.
Du vil ikke have semikolonet der. En for
loop er ikke skrevet sådan. Du mener muligvis while
, dvs.
while(Serial.available() > 0)
pollTime = delayMicroseconds(200); // Sets a poll time of 200 microseconds.
Det gør intet af den slags. Det forsinker 200 µs, det indstiller ikke noget.
incomingByte = Serial.read();
Denne linje er OK, forudsat at du erklærede incomingByte
sådan og ikke som du gjorde:
char incomingByte;
if(incomingByte = ?) {
At skal være i enkelte citater, da du sammenligner et tegn. Du sammenligner også med ==
ikke =
dvs.
if(incomingByte == "?") {
Serial.print(sendBack);
Det ser ud fra din tidligere kode, du mener:
Serial.print("K");
} } }
Disse linjer ser OK ud.
Jeg foreslår, at du læser en begynderside om C-programmering. Dette er bare gætte, hvad du laver her. For en ting skal du læse om, hvordan #define
fungerer. Her er en side: https://www.techonthenet.com/c_language/constants/create_define.php . Og en anden: http://www.cprogramming.com/reference/preprocessor/define.html
Kommentarer
- Tak skal du have. Dette var meget nyttigt. Jeg ' Jeg vil se på de links, du har angivet.
- P.S. du skal ændre " respektere " til " aspekt " i første linje
- Jeg ' er ikke sikker på det. Se i alle henseender , hvilket betyder: helt, direkte, helt, grundigt, helt, fuldstændigt,
Svar
[UPDATE]
Prøv dette:
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"); } } }
Kommentarer
- Når jeg kører koden, giver det følgende fejl:
- ugyldig konvertering fra ' const char * ' til ' char ' [-fpermissive]
- opdater siden og test den nye kode
- Tak. Denne del fungerede. Jeg glemte at nævne, at jeg også har brug for det for at slukke for LED, hvis betingelsen ikke er opfyldt. Når jeg kører koden, som du har angivet, er LEDen tændt.
- Der ' er virkelig ingen grund til at bruge ascii-koden til et spørgsmålstegn her, det gør programmet svært at forstå. Brug
'?'
din tidligere fejl var et resultat af at bruge en streng (dobbelt anførselstegn) snarere end et enkelt tegn (enkelt anførselstegn).