Ajuda com programação

Olá amigos, gostaria de uma ajuda com programação:

Estou desenvolvendo um sketch onde eu uso um sensor de proximidade fotoelétrico e uma tela de LCD.
Esse LCD irá possuir 3 telas (A, B, C) com informações distintas.
Cada vez que o sensor detectar algo (como a minha mão por exemplo), eu quero que o sketch mude a tela, de A para B, de B para a C, de C de volta para A etc...

A -> B -> C -> A -> B... etc...

Porém, enquanto o sensor está ativado, ou seja, enquanto ele lê algo, ele fica mudando as telas, devido a velocidade e repetição do loop..
Eu preciso que ele leia o sensor e mude a tela apenas uma vez, mesmo enquanto o sensor estiver acionado.

Segue o programa:

int tela;
bool sensor = digitalRead(53);
if ( !sensor ) { tela = tela + 1 }
switch (tela) {
** case 1:**
** A();**
** break;**
** case 2:**
** B();**
** break;**
** case 3:**
** C();**
** break;**
if ( tela > 3 ) { tela = 1; }

Muito obrigado por qualquer ajuda!

A mudança de tela deve ser feita quando o estado do sensor muda (estava inactivo e passou a estar activo) e não quando o sensor está activo.

Caro Luis, me desculpe pela demora em responde-lo.

Muito obrigado por sua ajuda, eu compreendo perfeitamente o que vc diz no sentido lógico, mas meu conhecimento ainda é pouco para poder escrever isso em programação.

Vc pode me ajudar com algum exemplo?
Ou pelo menos me dar um caminho das pedras?

Muito obrigado

Patrick

Patrick Boa noite

Rapaz eu não entendo muito de programação , mas estava desenvolvendo a mesma situação que voce , queria ter um menu que se altera-se ao precionar um micro-switch.

Vi que voce usou a mesma programação que eu, só que usando um sensor como micro-switch.

Não sei se vai te ajudar mas segue parte do codigo que vai realizar o que voce pede...

Abraços e boa sorte!

Parte nas declarações ( veja o que significa e tente alterar para o seu sensor)

// === Variaveis Tela ===
int WhichScreen =0; // Essa variável armazena o número da tela atual

// === Variaveis Botão e Debouce ===
boolean hasChanged = true;
const int buttonPin = 4; // Define o pino do Arduino que será o pino ligado ao botão micro-switch
int buttonState; // Lê a situação atual do pino de entrada do botão (buttonPin)
int lastButtonState = LOW; / Lê a ultima posição do pino de entrada do botão (buttonPin)
unsigned long lastDebounceTime = 0; // A ultima vez que o pino de saida foi alterado
unsigned long debounceDelay = 100; // TEmpo de debounce ; aumentar se a saida variar (piscar)

void setup()
{

pinMode(buttonPin,INPUT_PULLUP); // Declarando o pino do botão (microswitch) com resistor pullup interno

void loop()
{

// === Definições Menu e Telas ===

if (hasChanged == true) {

switch(WhichScreen) {
case 1:
{
Tela1();
}
break;

case 2:
{
Tela2();
}
break;

case 3:
{
Tela3();
}
break;

case 4:
{
Tela4();
}
break;
}

}

// === Inic do código de depuração do botão ===

int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
// redefinir o cronometro de depuração
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// seja qual for a leitura, ela será a mais antiga
// que o delay do debounce, considere como o estado atual do botão

// se o estado do botão mudou
if (reading != buttonState) {
buttonState = reading;

// apenas alterar o display se o estado do botão for HIGH
if (buttonState == HIGH) {
hasChanged = true;
WhichScreen++;

}
} else {
hasChanged = false;
}
}
lastButtonState = reading; // === Final do código de depuração do botão ===

// === Comandos para contagem de Menus ===
if (WhichScreen > 4){
WhichScreen = 1;
}

} // todos estes codigos estão dentro do void loop

// Codigo para criação das telas estão fora do loop

// ===== Programação Telas dos Menus ============

void firstScreen() // === TELA 1 === FUEL LEVEL
{
display.clearDisplay(); // Limpa a tela
display.fillRect (0, 0, 127, 16, WHITE); // Cria Box para Tela Temperatura Motor
display.setTextSize(2); // Configura Tamanho Fonte
display.setTextColor(BLACK); // Configura Cor da Fonte
display.setCursor(4,1); // configura Posição no Display da Fonte
display.println("FUEL LEVEL"); // Texto a ser Escrito no Diasplay
display.setTextSize(1); // Configura Tamanho Fonte
display.setTextColor(WHITE); // Configura Cor da Fonte
display.setCursor(8,50); // configura Posição no Display da Fonte
display.println("E"); // Texto a ser Escrito no Diasplay
display.setCursor(110,50); // configura Posição no Display da Fonte
display.println("F"); // Texto a ser Escrito no Diasplay
display.display(); // Carrega Tela Display Buffer
}

Com este codigo voce pade criar quantos menus quiser e aciona-los pelo seu sensor.

Espero ter lhe ajudado.

Abraços