Sou novo no Arduino e tenho o seguinte:
int delaynum; char cval[12]; void setup() { Serial.begin(9600); Serial.print("Enter Number"); Serial.flush(); int i=0; while(i<12) { if(Serial.available()>0) { char ch=Serial.read(); if(ch>="0"&&ch<="9") { cval[i]=ch; i++; } else { cval[i]=0; delaynum=atoi(cval); break; } } } } void loop() { Serial.println(delaynum); exit(0); }
A saída do código no breadboard virtual: (eu digitei 100)
Mas quando eu removo Serial.flush()
A saída como (eu digitei 100)
Estou esperando o resultado:
Insira o número (desejo inserir número 100 após a saída)
100
Por que o código não funciona?
Estou usando o IDE do Arduino com placa de pão virtual (ATMega328p)
Comentários
- é um erro da emulação. Serial.flush () apenas espera até que os dados sejam enviados completamente.
Resposta
Não saber qual placa de ensaio virtual faz em um Arduino normal, faria o seguinte:
Serial.flush () limpa o buffer e isso leva algum tempo normalmente, você espera no mínimo cerca de 100 ms para gravar / ler nesse buffer novamente.
Como seu código é executado na configuração (apenas uma vez), o serial não está disponível, pois ainda está sendo liberado e, portanto, seu resultado.
Como o nome setup diz, ele deve ser usado apenas para configurar HW / SW, mas não para executar pois você pode obter todos os tipos de resultados estranhos.
Se você usar “\ n” também conhecido como terminadores de nova linha em sua comunicação, você pode optar por eles e a descarga só será necessária se a conexão for interrompida e você tiver que reenviar os dados.
EDITAR
Waits for the transmission of outgoing serial data to complete.
Se você enviar um caractere, ele será colocado em um buffer para transmissão. Leva tempo para cada caractere ser enviado porque o serial é lento. Assim que estiver no buffer, ele será enviado automaticamente em segundo plano enquanto o programa passa imediatamente para a próxima instrução. Isso é feito para que o programa não perca tempo aguardando o envio de caracteres.
flush () é uma forma de aguardar o envio, em vez de prosseguir imediatamente para o usuário programa.
Assim, após chamar flush (), você pode ter certeza de que todos os dados foram enviados e que o buffer está vazio. Portanto, no seu caso, onde você os colocou, não faz sentido.
Comentários
- Você pode explicar com mais detalhes e o Arduino usar o mesmo buffer para entrada e saída ou serial.flush () liberar os buffers de entrada e saída?
- Veja minha edição acima. Por favor, marque como aceito se estiver ok
- Então, no seu caso onde você o colocou, não faz sentido, por quê? O Arduino não espera na função de configuração e qual é a solução para isso você pode explicar, por favor, eu sou novo nisso.
- Por favor, leia em Arduino.cc o basic101 Não vou ensinar aqui, nós resolvemos um problema por vez
- de alguma forma esta resposta não ' não diga nada para responder ao problema