Controlando o brilho da lâmpada com botões

Este experimento na verdade é uma extensão do experimento anterior. Com esse projeto você controlará o brilho da lâmpada, só que desta vez, pressionando os botões. Cada um dos botões corresponde a uma intensidade diferente.

!Informações Importantes

Um projeto grande pode sempre ser subdividido em projetos pequenos e a habilidade de unir a ideia de dois ou mais projetos pode significar o sucesso para resolver um problema. Aqui combinamos o projeto da leitura de varios botões com controle do brilho da lâmpada.

!Identificando os Componentes

Botão Interface

!Componentes de código

Todos os componentes de código utilizados neste projeto já foram explicados nos projetos anteriores.

!Executando no Arduino

Execute o código abaixo no seu Arduino.

// Pino ligado ao push-button
int buttonPin = A0;

// Variavel para fazer a checagem
int buttonState;

// Pino Mosfet
int lamp = 3;

void setup()
{
  // Define o pino do botao como entrada
  pinMode(buttonPin, INPUT);
  pinMode(lamp, OUTPUT);
}

void loop() {
  // Verifica se o estado do botao foi alterado
  buttonState = analogRead(buttonPin);

  // Limpa qualquer ruido
  buttonState = 1023;

  // Enquanto nenhum botao está sendo pressionado realiza a leitura novamente
  while (buttonState >= 897) {
    buttonState = analogRead(buttonPin);
  }

  // Se o valor  inferior a 897 significa que algum botão foi apertado
  if (buttonState < 897) {
    // Se o botão Right está sendo apertado
    if (buttonState < 69) {
      analogWrite(lamp, 0);
    }
    // Se o botão UP está sendo apertado
    if (buttonState >= 69 && buttonState <= 230) {
      analogWrite(lamp, 105);
    }
    // Se o botão DOWN está sendo apertado
    if (buttonState >= 231 && buttonState <= 407) {
      analogWrite(lamp, 155);
    }
    // Enquanto o botão LEFT está sendo apertado
    if (buttonState >= 408 && buttonState <= 630) {
      analogWrite(lamp, 205);
    }
    // Se o botão SEL está sendo apertado
    if (buttonState >= 631 && buttonState <= 896) {
      analogWrite(lamp, 255);
    }
  }
  delay(100);
}

!Exercício

Faça uma versão do código acima utilizando funções!

Resposta

int lamp = 3;
int button = A0;
int led1 = A1;

int intensity_button(int btn) {
  if (btn == 0) {
    return 0;
  } else if (btn == 1) {
    return 105;
  } else if (btn == 2) {
    return 155;
  } else if (btn == 3) {
    return 205;
  } else if (btn == 4) {
    return 255;
  }
}

int getButtonState() {
  int value = analogRead(button);
  if (value < 69) {
    return 1;
  } else if (value >= 69 && value <= 230) {
    return 2;
  } else if (value >= 231 && value <= 407) {
    return 3;
  } else if (value >= 408 && value <= 630) {
    return 4;
  } else if (value >= 631 && value <= 896) {
    return 5;
  }
  return 0;
}

int readButton()
{
  int state = getButtonState();

  int count = 1;

  while (count < 5)
  {
    delay(5);
    int newState = getButtonState();
    if (newState == state) {
      count++;
    } else {
      count = 1;
    }
    state = newState;
  }

  return state;
}

void setup()
{
  pinMode(lamp, OUTPUT);
  analogWrite(lamp, 0);
  pinMode(led1, OUTPUT);
}

void loop()
{
  // Lampada ligada enquanto botao nao esta apertado
  int btn;
  while ((btn = readButton()) != 5) {
    int light = intensity_button(btn);
    analogWrite(lamp, light);
  }

  // Desliga a lampada
  analogWrite(lamp, 0);
  digitalWrite(led1, HIGH);

  // Espera soltar o botao
  while (readButton() != 0);

  // Espera apertar o botao
  while (readButton() != 5);

  // Espera soltar o botao
  while (readButton() != 0);
  digitalWrite(led1, LOW);
}