Os osciladores / contadores / temporizadores rodam independente do
estado dos botões?
Ou rodam apenas quando os botões estão pressionados?
Associado a esta dúvida, a frequência ou rebatimento dos botões.
Ao soltar o botão o LED se apaga imediatamente ou termina o tempo de aceso?
Há algum sincronismo dos estados dos temporizadores, ou LEDs,
associado aos botões?
[]s
Entao continua o código ae, Dalton!
Fizemos essa “prova de conceito” hoje no grupo de estudos. Não tem o lógica do botão porque não tínhamos botoes para montar o protótipo. =D
Acredito que seria uma questão de adicionar um “if botao no estado que eu quero” cercando a lógica que faz “toggle” no pino e, claro, mudar a assinatura da task_func_ptr para receber mais alguns parametros, indicando o pino onde o botão está ligado e o estado desejado do botão.
Como tinha comentado antes, a implementação segue a mesma ideia que o Oda já tinha mencionado, usando “millis()” como referência de tempo. Está aí mais código pra ser apedrejado! rsrsr
typedef void (*task_func_ptr)(int);
typedef struct task_t{
int freq;
task_func_ptr run;
int pin;
int last_run;
}task_t;
void pin_toggle(int pin){
if (digitalRead(pin) == HIGH){
digitalWrite(pin, LOW);
}
else {
digitalWrite(pin, HIGH);
}
}
task_t tasks[2];
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
tasks[0].freq = 500;
tasks[0].run = pin_toggle;
tasks[0].pin = 2;
tasks[0].last_run = 0;
tasks[1].freq = 200;
tasks[1].run = pin_toggle;
tasks[1].pin = 3;
tasks[1].last_run = 0;
}
void loop() {
int now;
while (true){
now = millis();
for (int t=0; t < 2; t++){
if ((now - tasks[t].last_run) >= tasks[t].freq){
tasks[t].run(tasks[t].pin);
tasks[t].last_run = now;
}
}
}
}
Quem continua e adiciona a lógica dos botões? =D
Valeu!
Desculpe, mas depois de passar alguns minutos tentando entender o código (talvez eu ainda esteja com sono), achei que estruturas e ponteiros devem ser usados apenas quando são realmente necessários e simplificam o código. Sempre gosto de códigos que economizem bytes de memória tanto nos códigos objetos como nos fontes (é claro que os bytes gastos nos comentários não se incluem nessa conta).