Ik krijg de fout in mijn titel wanneer ik probeer de volgende code te compileren:

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

Antwoord

Uw code is in bijna elk opzicht volledig fout.


#define char incomingByte; //Defines incomingByte 

Die regel betekent dat de compiler incomingByte; zal vervangen wanneer hij char ziet.


#define char sendBack = K; 

Nu zal het sendBack = K; vervangen wanneer het char.


#define char ?; 

Nu zal het ?; vervangen wanneer het .


#define pollTime; 

Ik weet niet wat je hier denkt. Als je probeert een variabele die je een type moet geven, zoals deze:

int pollTime; 

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

Die regels zijn OK.


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

Je wilt de puntkomma daar niet. Een for lus wordt niet zo geschreven. U bedoelt mogelijk while, dwz.

while(Serial.available() > 0) 

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

Dat doet niets van dien aard. Het vertraagt 200 µs, het stelt niets “in.


incomingByte = Serial.read(); 

Die regel is in orde, ervan uitgaande dat je zoals dit, en niet zoals u deed:

char incomingByte; 

if(incomingByte = ?) { 

Dat moet tussen enkele aanhalingstekens staan, aangezien u een teken vergelijkt. U vergelijkt ook met == niet = dwz.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Het lijkt op je eerdere code die je bedoelt:

Serial.print("K"); 

 } } } 

Deze regels zien er goed uit.


Ik stel voor dat je een beginnerspagina leest over programmeren in C. Dit is gewoon puur giswerk wat je hier doet. Lees bijvoorbeeld hoe #define werkt. Hier is één pagina: https://www.techonthenet.com/c_language/constants/create_define.php . En nog een: http://www.cprogramming.com/reference/preprocessor/define.html

Reacties

  • Dank je. Dit was erg nuttig. Ik ' kijk naar de links die je hebt opgegeven.
  • P.S. je moet " respect " veranderen in " aspect " in de eerste regel
  • Ik ' ben daar niet zeker van. Zie in alle opzichten wat betekent: helemaal, ronduit, helemaal, grondig, helemaal, helemaal, helemaal

Antwoord

[UPDATE]

Probeer dit:

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

Reacties

  • Wanneer ik de code uitvoer, krijg je de volgende foutmelding:
  • ongeldige conversie van ' const char * ' tot ' char ' [-fpermissive]
  • vernieuw de pagina en test de nieuwe code.
  • Bedankt. Dit deel werkte. Ik vergat te vermelden dat ik het ook nodig heb om de LED uit te schakelen als niet aan de voorwaarde wordt voldaan. Wanneer ik de code uitvoer die je hebt opgegeven, brandt de LED.
  • Daar ' is echt geen reden om de ascii-code hier voor een vraagteken te gebruiken, het maakt het programma is moeilijk te begrijpen. Gebruik '?' je eerdere fout was het resultaat van het gebruik van een string (dubbele aanhalingstekens) in plaats van een enkel teken (enkele aanhalingstekens).

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *