Estou fazendo um projeto no tinkercad usando 2 arduinos, onde eu aperto um botao em um e o outro acende uma luz e vice versa, esse é meu código:
int botaoPin = 7;
int led8 = 8;
int botaoState = 0;
void setup() {
pinMode(botaoPin, INPUT);
pinMode(led8, OUTPUT);
Serial.begin(9600);
}
void loop() {
botaoState=digitalRead(botaoPin);
if (Serial.find("Ligado")){
digitalWrite(led8, HIGH);
delay(1000);
digitalWrite(led8, LOW);
}
if (botaoState==HIGH){
Serial.write("Ligado");
}
delay(2000);
}
aparentemente o Serial.find sempre retorna verdadeiro, mesmo se eu não aperto nenhum botao os 2 leds piscam(os 2 arduinos contem o mesmo código), alguém poderia me ajudar? Obrigado!
Tentei usar o serial.read e o serial.write com o valor 1 também e tive o mesmo problema, como estou fazendo o projeto no tinkercad imagino que o problema não seja lixo no buffer ou algo assim
Tens de ler um pouco acerca de protocolos de comunicação e como funciona a porta série juntamente com o teu código.
Para já, estás a ver se existe a palavra Ligado no buffer sem saberes se o buffer tem algo para ver... mas o que provavelmente está a acontecer é que o método find() não "lê" a porta série.
A palavra ligado chegou, foi armazenada e continua no armazém, o método find() apenas te diz que está lá, mas tens de ser tu a esvaziar a pilha.
Podes sempre usar Serial.read() 6 vezes sempre que o find retorna verdadeiro, mas não é de fiar, na minha opinião. Experimenta e vê o resultado.
Podes também criar um protocolo mais... simples onde cada caracter diz algo ao sistema que o recebe em vez de enviares mensagens que são fáceis para tu leres, mas difíceis para uma máquina o fazer.
Esta é uma duplicata de Help with Serial library
Normalmente eu excluiria ou mesclaria tópicos duplicados, mas este tem respostas e os dois tópicos estão em idiomas diferentes, então fechei e vinculei ao outro.
@vendru,
Criar o mesmo tópico várias vezes é contra as regras do fórum e pode levar à suspensão permanente do fórum.