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

Ir para baixo
Kricya Silva
Kricya Silva
Mensagens : 61
Data de inscrição : 03/03/2020
Idade : 21
Escola : Colegio Estadual Professora Lindaura Ribeiro Lucas

Exercício 2.6 Empty Exercício 2.6

Sex Jul 17, 2020 9:04 pm
/*
* 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 tuyyo 2 // definido que pino 2 será chamado de tuyyo;
#define sensacion 3 // definido que pino 3 será chamado de sensacion;
#define bux 4 // defindo que pino 4 será chamado de bux;

//DECLARAcAO DE VARIAVEIS GLOBAIS
bool stdtuyyo, stdsensacion, stdbux = 0; // definido uma váriavel do tipo bool
unsigned long tmtuyyo, tmsensacion, tmbux = 0; // definido uma váriavel do tipo unsing;

//INICIALIZAÇÃO DO HARDWARE
void setup() {
pinMode (tuyyo, OUTPUT); // declarado tuyyo como saída;
pinMode (sensacion, OUTPUT); // declarado sensacion como saída;
pinMode (bux, OUTPUT); // declarado bux como saída;
}

//FUNÇÕES COMPLEMENTARES


//PROGRAMA PRINCIPAL

void loop() {
if (millis() > (tmtuyyo + 1500)) {//se o tempo de millis for maior q o tempo de tuyyo + 1500, acenderá;
tmtuyyo = millis (); //reinicia o led quando ambos os valores for igual;
stdtuyyo = !stdtuyyo; //o led tuyyo é igual a negação do mesmo;
digitalWrite (tuyyo, stdtuyyo); // fiz uma escrita digital no led;
}
if(millis() > (tmsensacion + 500 )) { //se o tempo de millis for maior q o tempo de sensacion + 500, acenderá;
tmsensacion = millis (); //reinicia o led quando ambos os valores forem iguais;
tmsensacion = !tmsensacion; //o led tuyyo é igual a negação do mesmo;
digitalWrite (sensacion, stdsensacion); // fiz uma escrita digital no led;
}
if(millis()> (tmbux + 749 )) {
tmbux = millis (); //reinicia o led quando ambos os valores forem iguais;
tmbux = !tmbux; //o led tmbux é igual a negação do mesmo;
if (stdbux == 1) { // se for verdadeiro;
tone(bux, 600); // executa o tone;
} else {// se for falso
noTone (bux); // não executa o tone.
}
}


}


Professor, pq tem q usar () depois da função millis ?
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5021
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Exercício 2.6 Empty Re: Exercício 2.6

Qui Jul 23, 2020 10:35 pm
Oi Kricya, precisa sim pois trata-se de uma função e mesmo sem passar parâmetros deve-se usar os parenteses.
Mas na IDE do arduino se não colocar ele aceita e interpreta corretamente. Só não sei se vai funcionar em todos os compiladores e em todas as versões.

Sobre o nome das variáveis existe uma convenção que reza as boas práticas. As principais são utilizar nomes que sejam associados aos dados que serão guardados, para facilitar o desenvolvimento principalmente quando trabalha em grupo. Outra é para usar nomes em ingles, já que os programas podem rodar o mundo e serem trabalhados por diversos programadores.
Fiz essas observações porque tem usado variáveis que, apesar de criativas, tornam a interpretação mais complexa, perco bastante tempo para decifrar e entender as aplicações.

Veja que voce mesma se confundiu com esses nomes que tem usado, só o primeiro led piscou porque os dois próximos blocos deveria inverter o estado do pino e acabou invertendo o tempo, veja abaixo:
if(millis() > (tmsensacion + 500 )) { //se o tempo de millis for maior q o tempo de sensacion + 500, acenderá;
tmsensacion = millis (); //reinicia o led quando ambos os valores forem iguais;
tmsensacion = !tmsensacion; //o led tuyyo é igual a negação do mesmo; /////AQUI DEVERIA INVERTER O PINO

Nota 6.0
Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos