Home » nerdlines » exemplo arduino, 3 leds com fade, lcd, botões entrada analógica, serial
formats

exemplo arduino, 3 leds com fade, lcd, botões entrada analógica, serial

Exemplo 3, basicamente o mesmo do exemplo anterior, apenas explorei a parte de PWM do arduino, fiz um fade dos Leds, e adicionei uma buzina, agora a vida esta facilitada pois comprei uma protoboard. Fiquei sabendo que este display tem um led preciso ativa-lo agora porém é recomendado usar uma alimentação externa pois a corrente da placa do arduino é baixa, posso ligar direto se eu quiser interagir com esse led terei que fazer um circuito com transitor, vou aprender como faz e poder testar. Agradeço mais uma vez a Empresa Tato por nacionalizar essa fantástica Placa.

Código fonte:


/*
 Software: Serial, Escreve no Display e acend Leds, Le botões, Liga Buzina.
 Hardware: LCD e Serial e Botões Analógicos
 LCD: Conexão no LCD Marrom no 1 do Display;  LCD >>>> ARDUINO: (1 Vermelho > GND),(2 Marrom > 5v),(3 Amarelo > Potenciometro),
 (4 Laranja > Pino 7),(5 Azul > GND),(6 Verde > Pino 06), (11 Vermelho > Pino 05),(12 Marrom > Pino 04),(13 Amarelo > Pino 03),
 (14 Laranja > Pino 02); 
 Botões Analogica, 4 resistores de 4K7, 1 no GND, 1 no 5V, e 2 Entre os Botões.
   analogPin                 +5 V
       |                         |
       |                         \
       ----------------          /    4K7
                      |          \    
                      |          /
                      |          \
                      |____ \____|
                      |   BT1    |
                      |          \
                      |          /  
                      |          \    4K7
                      |          /
Buy Cipro  style="color: #7e7e7e;">                      |          \
                      |____ \____|
                      |   BT2    |
                      |          |
                      |          \
                      |          /  
                      |          \    4K7
                      |          /
                      |          \
                      |____ \____|
                                 |
                                 |
                                 \
                                 /    4K7
                                 \
                                 /
                                 \
                                 /
                               _____  
                                ___     GND
                                 _
 
  A referência usada é a Default 5V analogReference(DEFAULT);
 
 Autor: Rafael Gimenes Leite - 06/04/2010
 */

#include <LiquidCrystal.h>              // incluindo a biblioteca do LCD
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);   // iniciando o lcd com os numeros dos pinos que serão usados
int ledA = 11;                         // led (pino pwm)
int ledB = 9;                        // led  (pino pwm)
int ledC = 10;                      // led  (pino pwm)
int buzina = 8;                   //buzzina
int analogPin = 5;                // setando o pino analogico
int botao = -1;                  // variavel do botão
// setup
void setup() {
  lcd.begin(16, 2);               // configurando o numero de colunas e linhas do lcd
  lcd.print("iniciando hacks");  // Colocando uma mensagem no LCD
  pinMode(ledA,OUTPUT);     //setando o sinal como saida LED
  pinMode(ledB,OUTPUT);     //setando o sinal como saida LED
  pinMode(ledC,OUTPUT);    //setando o sinal como saida LED
  pinMode(buzina,OUTPUT);  //setando a buzzina como saida
  Serial.begin(9600);         // setando a serial
  delay(1000);                // dando um delay
}
// principal
void loop() {
  if (botao < 0 ){ // somente chama o a função que lê o botão se for a primeira vez.
    botao = retornaBotaoAnalogico(analogPin,1,0); // lê os botões
  }
  switch (botao) {
    case 0:
      modoInicio(); 
    break;
    case 1:
      modoSerial();
    break;
  case 2:
      modoBeta(); 
    break;
  case 3:
      modoAlpha(); 
    break;
  } 
    delay(500);
}
/*
 Ativa ou Desativa um Pino
*/
void ativarDesativarPinoDig(char estatus,int qualPino,int tempo){
  tempo = tempo * 1000;        //  mutiplicando por 1000
  digitalWrite(qualPino, estatus);   //liga o pino 
  if (tempo > 0){  // espera tempoAtivado segundos
    delay(tempo);
  }   
}
/*
 modoSerial, Lê a porta serial e plota no display.
*/
void modoSerial(){
  delay(1000);
  lcd.clear();
  lcd.setCursor(0, 0);  // setando coluna zero linha 1;
  lcd.print("   LENDO SERIAL   ");
  delay(1000) ;
  if (Serial.available() > 0) {
    delay(100);  // delay de 100 ms
    lcd.clear();    // limpa o display
    ativarDesativarPinoDig(LOW,ledA,0.1);     // apagando led pino
    ativarDesativarPinoDig(LOW,ledB,0.1);     // apagando led pino
    ativarDesativarPinoDig(HIGH,ledC,0.1);   // acendendo led pin
    lcd.clear();
    lcd.setCursor(0, 0);
     while (Serial.available() > 0) {  // ler direto o que vier
      lcd.write(Serial.read());   // joga no lcd o que recebe
     }
     fazScrollDireita();
     delay(200);
  }else { //quer dizer que não tem nada na serial
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("NADA NA SERIAL");
    delay(2000);
    botao = retornaBotaoAnalogico(analogPin,1,1);
  } 
}
void modoBeta() {
    lcd.clear();                                    //limpa lcd
    lcd.print("LEDS EFEITO FADE");    // escreve algo
    lcd.setCursor(0,1);
    lcd.print(" rafael gimenes ");
  //  fazScrollDireita();
   // modo balada 20 x
   for(int valorFade = 20 ; valorFade >= 0; valorFade -=1) {
    ledsFade(5);  
   }  
    
    botao = retornaBotaoAnalogico(analogPin,1,1); // lê os botões
}
void modoAlpha() {
    ativarDesativarPinoDig(HIGH,buzina,2);     //tocando buzina
    ativarDesativarPinoDig(HIGH,ledB,0.1);    //acendendo led pino
    lcd.clear();                                    //limpa lcd
    lcd.print("   www.RafaelGimenes.net    ");    // escreve e algo
    lcd.setCursor(0,1);
    lcd.print("        100% SOFTWARE LIVRE    ");
    fazScrollDireita();
    
    botao = retornaBotaoAnalogico(analogPin,1,1); // lê os botões
}
void modoInicio() {
    ativarDesativarPinoDig(LOW,buzina,0);     //desliga a buzina buzina
    lcd.clear();                                           //limpa lcd
    lcd.print("   EXEMPLO v3   ");
    lcd.setCursor(0, 1);
    lcd.print("by RafaelGimenes");                        // escreve algo
  
    ativarDesativarPinoDig(LOW,ledA,0.1);     //apagando led pino
    ativarDesativarPinoDig(HIGH,ledC,0.1);    //acendendo led pino
    delay(500);
    ativarDesativarPinoDig(LOW,ledC,0.1);     //apagando led pino
    ativarDesativarPinoDig(HIGH,ledA,0.1);    //acendendo led pino

    botao = retornaBotaoAnalogico(analogPin,1,0); // lê os botões
}
/*
  Faz o Scroll pra  Esquerda
*/
void fazScrollDireita(){
  for (int i = 0; i < 16; i++) {
      lcd.scrollDisplayLeft();
      delay(600);
    }
}

/*
  Leds modo Fade
*/
void ledsFade(int tempo){
 // do fraco pro forte
  for(int valorFade = 255 ; valorFade >= 0; valorFade -=1) {
    analogWrite(ledC, valorFade);
    delay(tempo);
  } 
  for(int valorFade = 255 ; valorFade >= 0; valorFade -=1) {
    analogWrite(ledB, valorFade);
    delay(tempo);
  } 
  for(int valorFade = 255 ; valorFade >= 0; valorFade -=1) {
    analogWrite(ledA, valorFade);
    delay(tempo);
  } 
  
}
/*
 Retorna o Botão Pressionado
 Lendo a saida analogica setada
 E Vendo a Variação dos resistores
*/
int retornaBotaoAnalogico (int AnaPin, int tempoEspera, int tipo){
  int ErroJanela = 50;
  int ValorLido = 0;
  tempoEspera=tempoEspera*1000;
  analogReference(DEFAULT);
  ValorLido = analogRead(AnaPin);
   if (tipo == 0){ // tipo = 0 mostra labels
      //lcd.clear();
      lcd.setCursor(0, 1);
      lcd.print("ESPERANDO BOTAO ");
    }
  if ((ValorLido > 740 ) && (ValorLido < 790)){
    if (tipo == 0){
      lcd.setCursor(0, 1);
      lcd.print("BT01 PRESSIONADO");
      delay(tempoEspera);
    }
    return 1;
  } else if((ValorLido > 640 ) && (ValorLido < 690)){
    if (tipo == 0){
      lcd.setCursor(0, 1);
      lcd.print("BT02 PRESSIONADO");
      delay(tempoEspera);
    } 
    return 2;
  } else if((ValorLido > 500 ) && (ValorLido < 560)){
   if (tipo == 0){
    lcd.setCursor(0, 1);
    lcd.print("BT03 PRESSIONADO");
    delay(tempoEspera);
   } 
    return 3;
  } else {
    return 0;
  } 
  
  // debug
  //lcd.clear();lcd.setCursor(1, 10);lcd.print(ValorLido);delay(500);
}
 

4 Responses

  1. Erick

    Pra que serve isso? rs

  2. Lidice

    nerd!

  3. Levi

    meu amigo

    preciso de sua ajuda, vc tem algum esquema
    ou sabe como se faz para conectar
    2 ou 3 Display LCD na Arduino?

    Já procurei na net, mas nada encontrei e
    sou novato

    Desde ja agradeço
    sem mais

  4. Levi

    meu amigo

    preciso de sua ajuda, vc tem algum esquema
    ou sabe como se faz para conectar
    2 ou 3 Display LCD na Arduino?

    Já procurei na net, mas nada encontrei e
    sou novato

    Desde ja agradeço
    sem mais

Deixe um Comentário

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>