Pessoal, estou com duvidas no meu trabalho de conclusão de curso. Estou desenvolvendo um projeto onde uso um sensor ultrasonico e quero que seja executado uma condição dentro de um case. Só que quando o botão é acionado essa condição não é executada. se alguém puder me ajudar...
Segue a sketch do programa.
O problema está no case 4...
#include <Wire.h>
#include <NewPing.h>
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
const int trigPin = 12;
const int echoPin = 13;
const int ledPinS = 8;
const int ledPinD = 7;
const int bUp = A0;
const int bDown = A1;
const int bSbman = A2;
const int bDsman = A3;
const int bEnter = 4;
const int bUp0 = 90;
const int bDown0 = 91;
const int bSbman0 = 92;
const int bDsman0 = 93;
const int bEnter0 = 94;
const int DISTANCIA_MAX = 1000;
char state = 1;
int sobe = 0;
int addr = 0;
int value = 15;
boolean aSbman, aDsman, aUp, aDown, aEnter;
NewPing sonar(trigPin, echoPin, DISTANCIA_MAX);
float distancia = 0;
void setup()
{
lcd.begin(20,4);
EEPROM.write(addr,value);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(ledPinS, OUTPUT);
pinMode(ledPinD, OUTPUT);
pinMode(bSbman, INPUT);
pinMode(bDsman, INPUT);
pinMode(bUp, INPUT);
pinMode(bDown, INPUT);
pinMode(bEnter, INPUT);
digitalWrite(bSbman,HIGH);
digitalWrite(bDsman,HIGH);
digitalWrite(bUp, HIGH);
digitalWrite(bDown, HIGH);
digitalWrite(bEnter, HIGH);
for(int i = 0; i< 3; i++);
{
lcd.backlight();
delay(250);
lcd.noBacklight();
delay(250);
}
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("SENAI ROBERTO MANGE");
delay(1000);
lcd.setCursor(3,1);
lcd.print("0S IMPOSSIVEIS");
delay(1000);
lcd.setCursor(5,2);
lcd.print("ELEVAFACIL");
delay(1000);
lcd.setCursor(8,3);
lcd.print("5 MN");
delay(1000);
}
void loop()
{
delay(50);
int distancia = sonar.ping()/US_ROUNDTRIP_CM;
switch (state) { // Define checa qual tela atual
case 1: // executado quando na TELA 1
switch (CheckButton()) {
case bUp:
lcd.clear(); Set_state(4); // antes de mudar de tela, limpar o
break; // display com a função lcd.clear()
case bDown:
lcd.clear(); Set_state(2);
break;
default: // Caso nenhum botão tenha sido apertado, ela executa a set_state
Set_state(1); // mesmo assim para atualizar o display.
}
break;
case 2: // executado quando na TELA 2
switch (CheckButton()) {
case bUp:
lcd.clear(); Set_state(1);
break;
case bDown:
lcd.clear(); Set_state(3);
break;
default:
Set_state(2);
}
break;
case 3:
switch (CheckButton()) {
case bSbman:
sobe=!sobe;
digitalWrite(ledPinS,sobe);
lcd.setCursor(8,3);
lcd.print("SOBE");
delay(100);
break;
case bDsman:
sobe=!sobe;
digitalWrite(ledPinD,sobe);
digitalWrite(ledPinS,LOW);
lcd.setCursor(8,3);
lcd.print("DESCE");
break;
case bUp:
lcd.clear(); Set_state(2);
break;
case bDown:
lcd.clear(); Set_state(4);
break;
default:
Set_state(3);
}
break;
case 4: // executado quando na TELA 4
switch (CheckButton()) {
case bEnter:
delay(50);
distancia = sonar.ping()/US_ROUNDTRIP_CM;
if(distancia > EEPROM.read(addr))
{
digitalWrite(ledPinS,1);
}
else
{
digitalWrite(ledPinS,0);
}
if(distancia < EEPROM.read(addr))
{
digitalWrite(ledPinD,1);
}
else
{
digitalWrite(ledPinD,0);
}
break;
case bUp:
lcd.clear(); Set_state(3);
break;
case bDown:
lcd.clear(); Set_state(1);
break;
default:
Set_state(4);
break;
}
default: ;
}
}
char CheckButton() {
if (aSbman!=digitalRead(bSbman)) {
aSbman=!aSbman;
if (aSbman) return bSbman0; else return bSbman;
} else
if (aDsman!=digitalRead(bDsman)) {
aDsman=!aDsman;
if (aDsman) return bDsman0; else return bDsman;
} else
if (aUp!=digitalRead(bUp)) {
aUp=!aUp;
if (aUp) return bUp0; else return bUp;
} else
if (aDown!=digitalRead(bDown)) {
aDown=!aDown;
if (aDown) return bDown0; else return bDown;
} else
if (aEnter!=digitalRead(bEnter)) {
aEnter=!aEnter;
if (aEnter) return bEnter0; else return bEnter;
} else
return 0;
}
void Set_state( char index) {
state = index;
switch (state) {
case 1:
lcd.setCursor(8,0);
lcd.print("SENAI");
lcd.setCursor(4,1);
lcd.print("ROBERTO MANGE");
lcd.setCursor(5,2);
lcd.print("ELEVA FACIL");
lcd.setCursor(8,3);
lcd.print("5 MN");
break;
case 2: //==================== state 2
lcd.setCursor(8,0);
lcd.print("CARGA");
lcd.setCursor(7,1);
lcd.print("BATERIA");
lcd.setCursor(7,3);
lcd.print("XXX");
break;
case 3: //==================== state 3
lcd.setCursor(8,0);
lcd.print("MODO");
lcd.setCursor(7,1);
lcd.print("MANUAL");
lcd.setCursor(7,3);
lcd.print(sonar.ping()/US_ROUNDTRIP_CM);
break;
case 4:
lcd.setCursor(4,0);
lcd.print("AUTOMATICO 01");
lcd.setCursor(0,1);
lcd.print("AUTURA = XXX");
lcd.setCursor(7,2);
lcd.print("BATERIA");
lcd.setCursor(7,3);
lcd.print("BATERIA");
break;
case 5: //==================== state 5
lcd.setCursor(4,0);
lcd.print("AUTOMATICO 02");
lcd.setCursor(0,1);
lcd.print("AUTURA = XXX");
lcd.setCursor(7,2);
lcd.print("BATERIA");
lcd.setCursor(7,3);
lcd.print("BATERIA");
break;
case 6: //==================== state 6
lcd.setCursor(4,0);
lcd.print("AUTOMATICO 03");
lcd.setCursor(0,1);
lcd.print("AUTURA = XXX");
lcd.setCursor(7,2);
lcd.print("BATERIA");
lcd.setCursor(7,3);
lcd.print("BATERIA");
break;
case 7: //==================== state 7
lcd.setCursor(4,0);
lcd.print("AUTOMATICO 04");
lcd.setCursor(0,1);
lcd.print("AUTURA = XXX");
lcd.setCursor(7,2);
lcd.print("BATERIA");
lcd.setCursor(7,3);
lcd.print("BATERIA");
break;
case 8: //==================== state 8
lcd.setCursor(4,0);
lcd.print("AUTOMATICO 05");
lcd.setCursor(0,1);
lcd.print("AUTURA = XXX");
lcd.setCursor(7,2);
lcd.print("BATERIA");
lcd.setCursor(7,3);
lcd.print("BATERIA");
break;
default: ;
}
}
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por