Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unsigned int quantidade = 20; // Armazena a quantidade de vezes que o led pisca
- const int ledPin = 8;
- const int btnStart=1; // Botão que aciona a rotina piscar
- const int btnPause=2; // Botão que pausa e continua a rotina de corte
- const int btnStop=3; // Botão que pára a rotina de corte e zera os contadores
- const int btnAlimentar=4; // Botão que gira o rolete horário para alimentar a bobina
- const int btnRetirar=5; // Botão que gira o rolete anti-horário para retirar a bobina
- const int btnNone=6;
- unsigned int btn_v = 0; // Armazena a leitura analogica dos botões
- boolean pausa = false; // Armazena o estado da pausa
- boolean piscar_running; // Armazena o estado da rotina piscar, se está em execução ou não
- char btnRead(){
- btn_v = analogRead(0); // Leitura dos botões com divisor de tensão
- if (btn_v > 1000) return btnNone;
- if (btn_v < 50) return btnStart;
- if (btn_v < 250) return btnNone; // Neste sketch o único que será utilizado é o btnStart,
- if (btn_v < 420) return btnStop; // mas preciso deixar desta forma pois no sketch principal
- if (btn_v < 620) return btnAlimentar; // os outros botões vão ter outras funções.
- if (btn_v < 950) return btnRetirar;
- else return btnNone; // Se nenhum botão é acionado retorna btnNone
- }
- void setup() {
- pinMode(ledPin, OUTPUT); // Pino onde o led está conectado
- attachInterrupt(0, pausar, FALLING); // Interrupção que chama a função pausar através do pino 2
- Serial.begin(9600);
- }
- void piscar(){ // Função piscar pra ver se a rotina de pausa vai funcionar
- Serial.println("piscar");
- {
- for(quantidade; quantidade>0; quantidade--) // Pisca a quantidade armazenada na variável quantidade
- {
- if(pausa == false) // Se pausa estiver ligado a rotina não roda
- {
- digitalWrite(ledPin, HIGH);
- delay(1500);
- digitalWrite(ledPin, LOW);
- delay(200);
- Serial.print("qde=");
- Serial.println(quantidade);
- }
- }
- }
- piscar_running = false; // Desliga o estado para identificar que a rotina piscar não está em execução
- }
- void pausar(){ // Função pausar chamada pelo pido 2 como prioridade
- if(pausa ==false) // Só chama a função se o estado de pausa não estiver ligado ainda
- {
- static unsigned long last_interrupt_time = 0; // DEBOUNCE DO PINO 2
- unsigned long interrupt_time = millis(); // " " " "
- if (interrupt_time - last_interrupt_time > 200) // DEBOUNCE DO PINO 2
- {
- if (piscar_running == true) // Só liga a pausa se a rotina piscar estiver em execução, caso contrário não é necessário ligá-la
- {
- Serial.println("interrupt 1");
- delay(1000);
- pausa = true; // Liga a pausa
- Serial.print("pausa=");
- Serial.println(pausa);
- Serial.print("qde=");
- Serial.println(quantidade);
- piscar_running = false; // Desliga o estado da rotina piscar
- Serial.print("running=");
- Serial.println(piscar_running);
- delay(1000);
- loop(); // Volta pra função loop
- }
- }
- last_interrupt_time = interrupt_time; // DEBOUNCE DO PINO 2
- }
- }
- void loop(){
- Serial.print("loop");
- int leitura = btnRead(); // Armazena a leitura da função btnRead() na variável leitura
- if(leitura == btnStart) // Se btnStart for pressionado chama a rotina piscar
- {
- pausa = false; // Desliga a pausa caso estiver ligada (no caso da rotina ter sido pausada e precisar ser reininciada)
- Serial.print("pausa=");
- Serial.println(pausa);
- delay(200);
- piscar_running = true; // Liga o estado de execução da rotina piscar
- piscar(); // Chama a função piscar
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement