Preciso fazer um projeto que acenda até 3 leds e apague esses leds inserindo "apagar led" no monitor serial, eu consegui fazer os leds acenderem mas não consigo usar o comando de apagar. Vi exemplos que usam o "serial.readString" mais ou menos desse jeito mas não consegui fazer dar certo
int n;
String p;
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.println("Quantos leds vc quer acender?");
}
void loop() {
if(Serial.available()){
n = Serial.parseInt();
switch(n){
case 1:
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
break;
case 2:
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
break;
case 3:
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,LOW);
break;
}
p=Serial.readString();
if(p=="apagar led"){
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
digitalWrite(5,LOW);
}
}
}
Veja se a opção de final de linha no Monitor Serial está como "Nenhum final-de-linha":
Primeiro, você checa se a entrada do Serial é a palavra "apagar led", se não, converte para um número
e testa.
Veja se isso faz o que você quer:
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.println("Quantos leds vc quer acender?");
}
void loop() {
if (Serial.available()) {
String p = Serial.readString();
if (p == "apagar led") {
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
else {
int n = p.toInt();
switch (n) {
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 2:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 3:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
}
}
}
}
Ainda não deu, amigo... Ele acende os leds mas na hora que eu envio "apagar led" eles continuam acesos
Aparentemente você não pode usar o operador == para comprar String e cstring, tem que usar o método String.compareTo().
Teste isto aqui, coloquei uns print() para debug:
void setup() {
Serial.begin(9600);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
Serial.println("Quantos leds vc quer acender?");
}
void loop() {
if (Serial.available()) {
String p = Serial.readString();
Serial.print("Recebido = [");
Serial.print(p);
Serial.println("]");
if (p.compareTo("apagar led") == 0) {
Serial.println("Apaga leds");
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
else {
int n = p.toInt();
Serial.print("Acende leds = ");
Serial.println(n);
switch (n) {
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 2:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
break;
case 3:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
break;
}
}
}
}
Veja se a opção de final de linha no Monitor Serial está marcada como "Nenhum final-de-linha", no canto inferior direito:
Teste com o primeiro código que lhe passei, se não funcionar, teste com o segundo e coloque aqui o que aparece no Monitor Serial.
O segundo código e o "nenhum final de linha" deram certo aqui, muito obrigado!!