Sensor Ultrasonico HC-SR04 funcionando dentro de um case.

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: ;
}

}

Exibições: 307

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço