quinta-feira, 27 de setembro de 2018

Uso de sensores analógico #2 - Buzzer

Continuando com o esquema da postagem anterior aqui será feito um acrescimo de um Buzzer para sinais de resposta. No código foi acrescentado os tons para notas do buzzer e a utilização da função tone para trabalhar a frequência e duração dos sons do Buzzer.




Seguindo o código:

//Notas para o Buzzer
const int c = 261;
const int d = 294;
const int e = 329;
const int f = 349;
const int g = 391;
const int gS = 415;
const int a = 440;
const int aS = 455;
const int b = 466;
const int cH = 523;
const int cSH = 554;
const int dH = 587;
const int dSH = 622;
const int eH = 659;
const int fH = 698;
const int fSH = 740;
const int gH = 784;
const int gSH = 830;
const int aH = 880;

//Controladores
int btn1, btn2, ldr, pot;
int var = 0;
int counter = 0;

void setup() {
  //Pins de saída
  pinMode(3, OUTPUT); //Buzzer
  pinMode(6,OUTPUT); //LED1
  pinMode(7,OUTPUT); //LED2
  pinMode(8,OUTPUT); //LED Verde
  pinMode(9,OUTPUT); //LED Amarelo
  pinMode(10,OUTPUT); //LED Vermelho

  //Pins de entrada
  pinMode(4, INPUT); //Botão 01
  pinMode(5, INPUT); //Botão 02
  
  //Pins de entrada (analógica)
  pinMode(A0, INPUT); //Potenciômetro
  pinMode(A1, INPUT); //LDR
  
  tone(3,450,100);
  digitalWrite(8, 1);
  delay(500);
  tone(3,200,100);
  digitalWrite(8,0);
  digitalWrite(9,1);
  delay(500);
  tone(3, 450,100);
  digitalWrite(9,0);
  digitalWrite(10,1);
  delay(500);
  tone(3,600,100);
  digitalWrite(10,0);
  tone(3,450,100);

}

void loop() {
  //Entrada de comando com os botões
  btn1 = digitalRead(4);
  btn2 = digitalRead(5);
  if (btn1 == 1 && btn2 == 0){
    var = 1;
    }
  if (btn1 == 0 && btn2 == 1){
    var = 2;
    }
  if (btn1 == 1 && btn2 == 1){
    var = 3;
    }
  
  if (var == 1){
    luz1();
    }
  if (var == 2){
    luz2();
    }
  if (var == 3){
    star();
    var = 0;
    }

}

void luz1(){ 
  ldr = analogRead(A1); //Lê o LDR

  //Define o LED de resposta (LED1)
  digitalWrite(7, HIGH);
  digitalWrite(6, LOW);

  //Alerta de boa iluminação
  if (ldr <= 920 && ldr >= 500){
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    }

  //Alerta de iluminação forte
  if (ldr >=921 && ldr <= 999){
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    }
  if (ldr >=999){
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    tone(3,450,100);
    delay(500);
    }

  //Alerta de iluminação fraca  
  if (ldr >=300 && ldr <= 499){
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
    }
  if (ldr <= 299){
    digitalWrite(8, HIGH);
    digitalWrite(9, HIGH);
    digitalWrite(10, HIGH);
    tone(3,450,100);
    delay(500);
    }
}

void luz2(){
  pot = analogRead(A0); //Lê o potenciômentro

  //Define o LED de resposta (LED2)
  digitalWrite(7, LOW);
  digitalWrite(6, HIGH);

  //Alerta de LED em referência ao Potenciômetro
  if (pot >= 700){
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
  }
  if (pot >= 300 && pot <= 699){
    digitalWrite(8, LOW);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);
  }
  if (pot <= 299){
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, HIGH);
  }
 
}

void star(){
  //Tocar as partes
  firstSection(); 
  secondSection();

  //Variação
  beep(f, 250);  
  beep(gS, 500);  
  beep(f, 350);  
  beep(a, 125);
  beep(cH, 500);
  beep(a, 375);  
  beep(cH, 125);
  beep(eH, 650);
 
  delay(500);
 
  secondSection();

  //Variação
  beep(f, 250);  
  beep(gS, 500);  
  beep(f, 375);  
  beep(cH, 125);
  beep(a, 500);  
  beep(f, 375);  
  beep(cH, 125);
  beep(a, 650);  
 
  delay(650);
  }

//Produz o tone
void beep(int nota, int dur)
{
  tone(3, nota, dur);
 
  //Altera o LED
  if(counter % 2 == 0)
  {
    digitalWrite(7, HIGH);
    delay(dur);
    digitalWrite(7, LOW);
  }else
  {
    digitalWrite(6, HIGH);
    delay(dur);
    digitalWrite(6, LOW);
  }
  //Silencia o Buzzer
  noTone(3);
 
  delay(50);
 
  //contador
  counter++;
}

//Primeira sessão
void firstSection()
{
  beep(a, 500);
  beep(a, 500);    
  beep(a, 500);
  beep(f, 350);
  beep(cH, 150);  
  beep(a, 500);
  beep(f, 350);
  beep(cH, 150);
  beep(a, 650);
 
  delay(500);
 
  beep(eH, 500);
  beep(eH, 500);
  beep(eH, 500);  
  beep(fH, 350);
  beep(cH, 150);
  beep(gS, 500);
  beep(f, 350);
  beep(cH, 150);
  beep(a, 650);
 
  delay(500);
}

//Segunda sessão
void secondSection()
{
  beep(aH, 500);
  beep(a, 300);
  beep(a, 150);
  beep(aH, 500);
  beep(gSH, 325);
  beep(gH, 175);
  beep(fSH, 125);
  beep(fH, 125);    
  beep(fSH, 250);
 
  delay(325);
 
  beep(aS, 250);
  beep(dSH, 500);
  beep(dH, 325);  
  beep(cSH, 175);  
  beep(cH, 125);  
  beep(b, 125);  
  beep(cH, 250);  
 
  delay(350);
}

Vídeo do projeto funcionando:

Ligando

Função para o LDR

Função do potenciômetro

Extra

0 comentários:

Postar um comentário