#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Leitura do pino de sinal do moedeiro na entrada 12
#define moedeiro A0
//Variáveis para a contagem de milissegundos
unsigned long millisTarefa0 = millis();
unsigned long millisTarefa1 = millis();
unsigned long millisTarefa2 = millis();
unsigned long millisTarefa3 = millis();
unsigned long millisTarefa4 = millis();
unsigned long millisTarefa5 = millis();
unsigned long millisTarefa6 = millis();
unsigned long millisTarefa7 = millis();
LiquidCrystal_I2C lcd(0x27 ,16,2);
//Variáveis globais
int credito = 0;
int botao_start2=2;
int contador3=3;
int saida3=3;
int botao_start4=4;
int contador5=5;
int saida5=5;
int botao_start6=6;
int contador7=7;
int saida7=7;
int botao_start8=8;
int contador9=9;
int saida9=9;
int botao_start10=10;
int contador11=11;
int saida11=11;
int botao_start12=12;
int contador13=13;
int saida13=13;
int botao_startA2=A2;
int contadorA3=A3;
int saidaA3=A3;
int flag;
int fita_de_leds=A1;
void setup() {
lcd.init(); // Inicializando o LCD
lcd.backlight();
Serial.begin (9600);
lcd.begin(16,2);
lcd.setCursor(1,0);
lcd.print(" COQUETELEIRA");
lcd.setCursor(0,1);
lcd.print(" AUTOMATICA");
delay(6000);
lcd.clear();
delay(100);
pinMode(botao_start2, INPUT_PULLUP);
pinMode(saida3, OUTPUT);
pinMode(botao_start4, INPUT_PULLUP);
pinMode(saida5, OUTPUT);
pinMode(botao_start6, INPUT_PULLUP);
pinMode(saida7, OUTPUT);
pinMode(botao_start8, INPUT_PULLUP);
pinMode(saida9, OUTPUT);
pinMode(botao_start10, INPUT_PULLUP);
pinMode(saida11, OUTPUT);
pinMode(botao_start12, INPUT_PULLUP);
pinMode(saida13, OUTPUT);
pinMode(botao_startA2, INPUT_PULLUP);
pinMode(saidaA3, OUTPUT);
pinMode(moedeiro, INPUT_PULLUP);
pinMode(fita_de_leds, OUTPUT);
Serial.println ("Inicializado!");
}
void loop(){
// Executa tarefa 0 so lede enfeite
tarefa0();
// Executa tarefa 1
tarefa1();
// Executa tarefa 2
tarefa2();
// Executa tarefa 3
tarefa3();
// Executa tarefa 4
tarefa4();
// Executa tarefa 5
tarefa5();
// Executa tarefa 6
tarefa6();
// Executa tarefa 7
tarefa7();
}
void tarefa0(){
if((millis() - millisTarefa0) < 200){
// Acende o fita_de_leds
if(credito==0){
digitalWrite(fita_de_leds, LOW);}
}else{
// Apaga o fita_de_leds
digitalWrite(fita_de_leds, HIGH);
}
// Verifica se já passou 400 milisegundos
if((millis() - millisTarefa0) > 400){
millisTarefa0 = millis();
}
}
void tarefa1(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa1) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start2=digitalRead(2);
if(botao_start2==LOW && credito>0){
credito--;
contador3=2; //contagem de tempo
flag=1;
while(flag==1){
contagem();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa1) > 100){
millisTarefa1 = millis();
}
}
void contagem(){
//Ativa a saída
digitalWrite(saida3, HIGH);
//Inicia a contagem decrescente
contador3--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador3<10){
lcd.print("0");
}
lcd.print(contador3);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador3<= 0){
flag=0;
contador3=0;
digitalWrite(saida3, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa2(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa2) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start4=digitalRead(4);
if(botao_start4==LOW && credito>0){
credito--;
contador5=3; //contagem de tempo
flag=1;
while(flag==1){
contagem5();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa2) > 100){
millisTarefa2 = millis();
}
}
void contagem5(){
//Ativa a saída
digitalWrite(saida5, HIGH);
//Inicia a contagem decrescente
contador5--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador5<10){
lcd.print("0");
}
lcd.print(contador5);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador5<= 0){
flag=0;
contador5=0;
digitalWrite(saida5, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa3(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa4) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start6=digitalRead(6);
if(botao_start6==LOW && credito>0){
credito--;
contador7=5; //contagem de tempo
flag=1;
while(flag==1){
contagem7();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa3) > 100){
millisTarefa3 = millis();
}
}
void contagem7(){
//Ativa a saída
digitalWrite(saida7, HIGH);
//Inicia a contagem decrescente
contador7--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador7<10){
lcd.print("0");
}
lcd.print(contador7);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador7<= 0){
flag=0;
contador5=0;
digitalWrite(saida7, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa4(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa4) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start8=digitalRead(8);
if(botao_start8==LOW && credito>0){
credito--;
contador9=6; //contagem de tempo
flag=1;
while(flag==1){
contagem9();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa4) > 100){
millisTarefa4 = millis();
}
}
void contagem9(){
//Ativa a saída
digitalWrite(saida9, HIGH);
//Inicia a contagem decrescente
contador9--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador9<10){
lcd.print("0");
}
lcd.print(contador9);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador9<= 0){
flag=0;
contador5=0;
digitalWrite(saida9, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa5(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa5) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start10=digitalRead(10);
if(botao_start10==LOW && credito>0){
credito--;
contador11=7; //contagem de tempo
flag=1;
while(flag==1){
contagem11();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa5) > 100){
millisTarefa5 = millis();
}
}
void contagem11(){
//Ativa a saída
digitalWrite(saida11, HIGH);
//Inicia a contagem decrescente
contador11--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador11<10){
lcd.print("0");
}
lcd.print(contador11);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador11<= 0){
flag=0;
contador11=0;
digitalWrite(saida11, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa6(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa6) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start12=digitalRead(12);
if(botao_start12==LOW && credito>0){
credito--;
contador13=8; //contagem de tempo
flag=1;
while(flag==1){
contagem13();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa6) > 100){
millisTarefa6 = millis();
}
}
void contagem13(){
//Ativa a saída
digitalWrite(saida13, HIGH);
//Inicia a contagem decrescente
contador13--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador13<10){
lcd.print("0");
}
lcd.print(contador13);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador13<= 0){
flag=0;
contador13=0;
digitalWrite(saida13, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa7(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa7) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_startA2=digitalRead(A2);
if(botao_startA2==LOW && credito>0){
credito--;
contadorA3=9; //contagem de tempo
flag=1;
while(flag==1){
contagemA3();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa7) > 100){
millisTarefa7 = millis();
}
}
void contagemA3(){
//Ativa a saída
digitalWrite(saidaA3, HIGH);
//Inicia a contagem decrescente
contadorA3--;
lcd.setCursor(0,1);
lcd.print("DOSANDO: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contadorA3<10){
lcd.print("0");
}
lcd.print(contadorA3);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contadorA3<= 0){
flag=0;
contadorA3=0;
digitalWrite(saidaA3, LOW);
delay(1000);
lcd.clear();
}
}