Estou recebendo o erro no meu título quando tento compilar o seguinte código:
#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); } } }
Resposta
Seu código está completamente errado em quase todos os aspectos.
#define char incomingByte; //Defines incomingByte
Essa linha significa que o compilador substituirá incomingByte;
sempre que encontrar char
.
#define char sendBack = K;
Agora substituirá sendBack = K;
quando vir char
.
#define char ?;
Agora substituirá ?;
quando vir char
.
#define pollTime;
Não sei o que você está pensando aqui. Se está tentando declarar uma variável que você deve fornecer um tipo, como este:
int pollTime;
bool running = true; void setup() { Serial.begin(9600); //Set data rate. } void loop() {
Aqueles as linhas estão OK.
for(Serial.available() > 0;) { //Gets you the number of bytes that are available to be read from the serial port.
Você não quer o ponto-e-vírgula lá. Um for
loop não é escrito assim. Você possivelmente quer dizer while
, ou seja,
while(Serial.available() > 0)
pollTime = delayMicroseconds(200); // Sets a poll time of 200 microseconds.
Isso não é fazer nada disso. Está atrasando 200 µs, não está configurando nada.
incomingByte = Serial.read();
Essa linha está OK, supondo que você declarou incomingByte
assim, e não da maneira que você fez:
char incomingByte;
if(incomingByte = ?) {
Isso precisa estar entre aspas simples, pois você está comparando um caractere. Além disso, compare com ==
e não =
, ou seja,
if(incomingByte == "?") {
Serial.print(sendBack);
Parece com seu código anterior que você quis dizer:
Serial.print("K");
} } }
Estas linhas parecem corretas.
Sugiro que você leia uma página para iniciantes sobre programação em C. apenas adivinhação do que você está fazendo aqui. Por um lado, leia sobre como funciona #define
. Aqui está uma página: https://www.techonthenet.com/c_language/constants/create_define.php . E outro: http://www.cprogramming.com/reference/preprocessor/define.html
Comentários
- Obrigada. Isso foi muito útil. Eu ' examinarei os links que você forneceu.
- P.S. você deve alterar " respect " para " aspecto " na primeira linha
- Eu ' não tenho certeza sobre isso. Veja em todos os aspectos , o que significa: inteiramente, sem rodeios, totalmente, completamente, totalmente, totalmente, totalmente
Resposta
[ATUALIZAÇÃO]
Tente isto:
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"); } } }
Comentários
- Quando executo o código, ocorre o seguinte erro:
- conversão inválida de ' const char * ' a ' char ' [-fpermissivo]
- atualize a página e teste o novo código
- Obrigado. Esta parte funcionou. Esqueci de mencionar que também preciso desligar o LED caso a condição não seja atendida. Quando executo o código que você forneceu, o LED está ligado.
- Não há ' realmente nenhuma razão para usar o código ASCII para um ponto de interrogação aqui, isso faz o programa é difícil de entender. Use
'?'
seu erro anterior foi o resultado do uso de uma string (aspas duplas) em vez de um único caractere (aspas simples).