Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
SHIN
SHIN
Mensagens : 40
Data de inscrição : 12/03/2022
Escola : TIRADENTES

exercicio 2.6 Empty exercicio 2.6

Qua Abr 12, 2023 10:20 am
/*
* CURSO DE ROBOTICA 2020
*
* Exercicio: 2.6
* Tema: Função millis()
* Atividade: Intermitencias usando leds e buzzer
* Descrição: Utilizar dois leds piscando em tempos diferentes e um buzzer emitindo audio com intermitência em cadencia diferente dos leds
* Hardware: Ligar os leds e o buzzer em pinos digital configurado como SAÍDA
* Comandos: pinMode, IF, millis(), digitalWrite
* Dica1:A função millis() é um contador de tempo de execução, quando acionada retorna o tempo de execução em milissegundos
* Dica2:Substituir o delay() por millis() porque o delay() pára o fluxo do programa impedidndo o arduino de rodar outros programas
* Dica3:Usar variáveis para controlar os temporizadores, usar do tipo unsigned long para essa aplicação
* Dica4:Com a função if() comparar se os tempos foram atingidos e caso sim tomar as ações
* Dica5:Usar o operador de inversão e uma variável para controlar o estado dos leds
* Dica6:Para declarar mais de uma variável do mesmo tipo e inicializar com único valor pode fazer a declaração em única linha separando-as por virgula
*/

//DEFINICOES INICIAIS
#define led1 2//define que o pino 2 vai se chamar led1
#define led2 3//define que o pino 3 vai se chamar led2
#define buzzer 4//define que o pino 4 vai se chmar buzzer

//DECLARAcAO DE VARIAVEIS GLOBAIS
boolean estadoLed1, estadoLed2, estadoBuzzer = 0;//variável tipo boolean
unsigned long tLed1, tLed2, tBuzzer = 0;//variável tipo unsigned long

//INICIALIZAÇÃO DO HARDWARE
void setup() {
pinMode(led1, OUTPUT);//define o led1 como saída
pinMode(led2, OUTPUT);//define o led2 como saída
pinMode(buzzer, OUTPUT);//define o buzzer como saída
}

//FUNÇÕES COMPLEMENTARES


//PROGRAMA PRINCIPAL
// led1 = 1segundo, led2 = 300ms, buzzer 500ms
void loop() {
if(millis() > (tLed1 + 1000)) {//se o tempo de execução for maior que tLed1 roda o bloco abaixo
tLed1 = millis();//reinicia a variável tLed1
estadoLed1 = !estadoLed1;//inverte o estado do led1
digitalWrite(led1, estadoLed1);//O valor do led1 vai ser o valor da variável de controle
}
if(millis() > (tLed2 + 300)) {//se o tempo de execução for maior que tLed2 roda o bloco abaixo
tLed2 = millis();//reinicia a variável tLed2
estadoLed2 = !estadoLed2;//inverte o estado do led2
digitalWrite(led2, estadoLed2);//o valor do led2 vai ser o valor da variável controle
}
if(millis() > (tBuzzer + 500)) {//se o tempo de execução for maior que o Buzzer roda o bloco abaixo
tBuzzer = millis();//reinicia a variável tbuzzer
estadoBuzzer = !estadoBuzzer;//inverte o estado do buzzer
if(estadoBuzzer == 1){//O Buzzer liga, seu estado vai a 1
tone(buzzer, 1500);//faz tocar o buzzer em uma frequência de 1500ms
} else {//se não for if é else
noTone(buzzer);//desliga o buzzer
}
} Surprised Surprised Surprised Smile Very Happy
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5785
Data de inscrição : 11/02/2019
Idade : 53
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

exercicio 2.6 Empty Re: exercicio 2.6

Qua Abr 12, 2023 10:19 pm
Shin, como não acabou o capítulo 1 vou ser mais rigoroso com voce.
O programa está com erro de sintaxe, deu um erro ao compilar.
Nos comentários tem alguns detalhes de interpretação:
if(millis() > (tLed1 + 1000)) {//se o tempo de execução for maior que tLed1 roda o bloco abaixo //precisa explicar a intermitencia, porque um bloco roda com tempo diferente do outro
if(estadoBuzzer == 1){//O Buzzer liga, seu estado vai a 1 //comentou que o estado vai a 1, na verdade não é aqui que afeta a variável aqui ela é comparada, certo?
Nota 5.0
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos