Jobtiens lerreur dans mon titre lorsque jessaye de compiler le code suivant:

#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éponse

Votre code est complètement faux à presque tous les égards.


#define char incomingByte; //Defines incomingByte 

Cette ligne signifie que le compilateur remplacera incomingByte; chaque fois quil verra char.


#define char sendBack = K; 

Maintenant, il remplacera sendBack = K; quand il verra char.


#define char ?; 

Maintenant, il remplacera ?; quand il verra char.


#define pollTime; 

Je ne sais pas ce que vous pensez ici. Si vous essayez de déclarer une variable que vous devez donner un type, comme ceci:

int pollTime; 

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

Ceux les lignes sont OK.


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

Vous ne voulez pas du point-virgule ici. Une boucle for nest pas écrite comme ça. Vous voulez peut-être dire while, cest-à-dire.

while(Serial.available() > 0) 

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

Cela ne fait rien de la sorte. Elle retarde 200 µs, elle ne définit rien.


incomingByte = Serial.read(); 

Cette ligne est correcte, en supposant que vous ayez déclaré incomingByte comme ceci, et pas comme vous lavez fait:

char incomingByte; 

if(incomingByte = ?) { 

Que doit être entre guillemets simples, car vous comparez un caractère. Vous comparez également avec == pas = ie.

if(incomingByte == "?") { 

Serial.print(sendBack); 

Daprès votre code précédent, vous voulez dire:

Serial.print("K"); 

 } } } 

Ces lignes semblent correctes.


Je vous suggère de lire une page pour débutants sur la programmation C. Ceci est ce que vous faites ici nest que pure supposition. Premièrement, lisez comment fonctionne #define. Voici une page: https://www.techonthenet.com/c_language/constants/create_define.php . Et un autre: http://www.cprogramming.com/reference/preprocessor/define.html

Commentaires

  • Merci. Cela a été très utile. Je ' vais examiner les liens que vous avez fournis.
  • P.S. vous devez remplacer " respect " par " aspect " dans la première ligne
  • Je ' ne suis pas sûr de cela. Voir à tous égards ce qui signifie: entièrement, carrément, complètement, complètement, totalement, totalement, totalement

Réponse

[UPDATE]

Essayez ceci:

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

Commentaires

  • Lorsque jexécute le code, cela donne lerreur suivante:
  • conversion invalide de ' const char * ' à ' char ' [-fpermissive]
  • actualisez la page et testez le nouveau code
  • Merci. Cette partie a fonctionné. Jai oublié de mentionner que jen ai également besoin pour éteindre la LED si la condition nest pas remplie. Lorsque jexécute le code que vous avez fourni, la LED est allumée.
  • Il ny a aucune raison ' dutiliser le code ascii pour un point dinterrogation ici, cela fait le programme difficile à comprendre. Utilisez '?' votre erreur précédente était le résultat de lutilisation dune chaîne (guillemets doubles) plutôt que dun seul caractère (guillemets simples).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *