#include <Arduino.h>
#include <ArduinoJson.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <avr/wdt.h>
#include <PID_v1_bc.h>
#include "Button.h"
#include <SevSeg.h>
#include <Timer.h>
#include <TimerInterrupt.h>
#include <avr/sleep.h>
#include "ACI_10K_an.h"
Button button2(7); // create ezButton object that attach to pin 7;
Button button5(8); // create ezButton object that attach to pin 8;
byte LedState1 = LOW;
byte LedState2 = LOW;
const float HEXA = (0xC2F7);
Button button1(A2); // Connect your button between pin A0 and GND
Button button3(A5); // Connect your button between pin A5 and GND
Button button4(A3); // Connect your button between pin A3 and GND
// parametrização
int a, e, i, o, u, A;
int autVent = 0;
int celsius;
int autVeloc = 0;
int VentLador = 0;
int ioniZando = 0;
int ioniZa = 0;
int bomBeamento = 0;
int climaTiz = 0;
long alterVeloc = !0;
int idNiv = 0;
int modoVent = 0 ;
int nivelTanque = 0;
int velVent = 0;
int autLador = 0;
int modVel = 0;
int ionIzar = 0;
int pinNiv = 2 ; // pino nivelTanque
volatile int repiQue;
volatile int brightness = !0; // how bright the LED is
volatile int fadeAmount = 5; // how many points to fade the LED by
/*volatile uint32_t count = 0; // Holds the count of interrupts
void incrementCount() {
count++;
}*/
void velocidade();
void autovelocidade();
void bombeamento(void);
void oscilador(void);
void ionizador(void);
void serial(void);
//used to time
unsigned long millisLast = -1;
const unsigned long Interval = 1000;
ISR(TIMER1_OVF_vect)//interrupção do TIMER1
{
TCNT1 = (HEXA); // Renicia TIMER
if (alterVeloc == 5) {
digitalWrite(9, digitalRead(9)); //inverte estado do led
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
if (alterVeloc == 6) {
digitalWrite(6, digitalRead(6)); //inverte estado do led
digitalWrite(5, LOW);
digitalWrite(9, LOW);
}
if (alterVeloc == 7) {
digitalWrite(5, digitalRead(5) ); //inverte estado do led
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
}
void setup(void) {
ADMUX |= (0 & 0b0000);//É definido o pino A0 como INPUT.
// Give some time to open serial monitor after programming
delay(50);
// Inicia a comunicação serial (monitor serial)
Serial.begin(9600);
pinMode(0, INPUT_PULLUP); // reserva
pinMode(1, OUTPUT); // pastilha Peltier
pinMode(2, INPUT_PULLUP); //INTERRUPÇÃO no pin2 paa Velocidade
pinMode(3, OUTPUT); // pino resistencia de aquecimento
pinMode(4, OUTPUT); // pino alarme temperatura
pinMode(5, OUTPUT); // pino led VentLador alto
pinMode(6, OUTPUT); //pino led VentLador medio
pinMode(7, INPUT_PULLUP); // pino VentLador
pinMode(8, INPUT_PULLUP); // pino modoVent auto/temp
pinMode(9, OUTPUT); //pino led VentLador baixo
pinMode(10, OUTPUT); // pino led bomBeamento
pinMode(11, OUTPUT); // pino oscilar
pinMode(12, OUTPUT); //pino ioniZando
pinMode(13, OUTPUT); // pino led nivelTanque
//Give the random a random seed from the noise from the ADC of A0
randomSeed(analogRead(A0));//parametro infinito
analogReference(DEFAULT);
detachInterrupt(digitalPinToInterrupt(0));
detachInterrupt(digitalPinToInterrupt(1));
detachInterrupt(digitalPinToInterrupt(2));// incrementCount, RISING); //CRIA A INTERRUPÇÃO no pin2 paa IRcontro
detachInterrupt(digitalPinToInterrupt(3));
detachInterrupt(digitalPinToInterrupt(4));
detachInterrupt(digitalPinToInterrupt(5));
detachInterrupt(digitalPinToInterrupt(6));
detachInterrupt(digitalPinToInterrupt(9));
detachInterrupt(digitalPinToInterrupt(10));
detachInterrupt(digitalPinToInterrupt(11));
detachInterrupt(digitalPinToInterrupt(12));
detachInterrupt(digitalPinToInterrupt(13));
/*
A0
A1 Temperatura
A2 climatizar
A3 pino oscilar
A4 Nível do tanque
A5 pino ionizar
*/
// Configuração do timer1
cli();//stop all interrupts
// turn on TCC mode
TCCR1A = 0; //confira timer para operação normal pinos OC1A e OC1B desconectados
TCCR1B = 0; //limpa registrador
TCCR1B |= (1 << CS10) | (1 << CS12);// configura prescaler para 1024: CS12 = 1 e CS10 = 1
TCNT1 = HEXA; // incia timer com valor para que estouro ocorra em 1 segundo
// 65536-(16MHz/1024/1Hz) = 49911 = 0xC2F7
TIMSK1 |= (1 << TOIE1); // habilita a interrupção do TIMER1
sei();//allow interrupts
//END TIMER SETUP
button1.begin();
button2.begin(); // set debounce time to 50 milliseconds
button3.begin();
button4.begin();
button5.begin(); // set debounce time to 50 milliseconds
/*while (!Serial) { }; // for Leos
while (Serial.available())
Serial.read();*/
}
void loop() {
velocidade();
autovelocidade();
bombeamento();
oscilador();
ionizador();
serial();
}
void autovelocidade(void) {
//Temperatura
Aci_10K an10k; //start an instance of the library
//Aci_10K an10k(3.3,12);support for 3.3 volt board and/or 12bit analog read resolution
delayMicroseconds(500);
celsius = (an10k.getTemp(analogRead(A1)));
if (button5.pressed())
(autVeloc = autVeloc + 1);
if (autVeloc == 1) {
switch (celsius) {
case (0 && 10): {
digitalWrite(3, analogRead(brightness = brightness ^ 60));
digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 11: {
digitalWrite(3, analogRead(brightness = brightness ^ 50));
digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 12: {
digitalWrite(3, analogRead(brightness = brightness ^ 40));
digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 13: {//verificar
digitalWrite(3, analogRead(brightness = brightness ^ 30)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 14: {//verificar
digitalWrite(3, analogRead(brightness = brightness ^ 20)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 15: {//verificar
digitalWrite(3, analogRead(brightness = brightness ^ 10)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 16: {//verificar
digitalWrite(3, analogRead(brightness = brightness ^ 2)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 17: {//verificar
digitalWrite(3, analogRead(brightness = brightness ^ 4)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 18: {//verificar
digitalWrite(3, analogRead(brightness = brightness ^ 6)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 19: {
digitalWrite(3, analogRead(brightness = brightness ^ 8)); digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 20: {
digitalWrite(3, analogRead(brightness = brightness ^ 10));
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(3, analogRead(brightness = brightness ^ 10));
digitalWrite(4, LOW);
delayMicroseconds(50);
break;
}
case 21: {
digitalWrite(3, analogRead(brightness = brightness ^ 12));
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(3, analogRead(brightness = brightness ^ 12));
digitalWrite(4, LOW);
delayMicroseconds(50);
break;
}
case 22: {
digitalWrite(3, analogRead(brightness = brightness ^ 14));
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(3, analogRead(brightness = brightness ^ 14));
digitalWrite(4, LOW);
delayMicroseconds(500);
break;
}
case 23: {
digitalWrite(3, analogRead(brightness = brightness ^ 16));
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(3, analogRead(brightness = brightness ^ 16));
digitalWrite(4, LOW);
delayMicroseconds(500);
break;
}
case 24: {
digitalWrite(3, analogRead(brightness = brightness ^ 18));
digitalWrite(4, HIGH);
delayMicroseconds(50000);
digitalWrite(3, analogRead(brightness = brightness ^ 18));
digitalWrite(4, LOW);
delayMicroseconds(50000);
break;
}
case 25: {
digitalWrite(3, analogRead(brightness = brightness ^ 20));
digitalWrite(4, HIGH);
delayMicroseconds(50);
break;
}
case 26: {
digitalWrite(3, LOW);
//digitalWrite(0, HIGH);
digitalWrite(4, HIGH);
delayMicroseconds(5000);
//digitalWrite(0, LOW);
digitalWrite(4, LOW);
delayMicroseconds(5000);
(HEXA / 2);
brightness = 10;
fadeAmount = 127;
break;
}
case 27: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(5000);
digitalWrite(4, LOW);
delayMicroseconds(5000);
(HEXA / 2);
brightness = 10;
fadeAmount = 127;
break;
}
case 28: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(5000);
digitalWrite(4, LOW);
delayMicroseconds(5000);
(HEXA / 2);
brightness = 10;
fadeAmount = 127;
break;
}
case 29: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(5000);
digitalWrite(4, LOW);
delayMicroseconds(5000);
(HEXA / 2);
brightness = 10;
fadeAmount = 127;
break;
}
case 30: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(4, LOW);
delayMicroseconds(500);
digitalWrite(12, HIGH);
(HEXA / 4);
brightness = 10;
fadeAmount = 200;
digitalWrite(11, HIGH);
break;
}
case 31: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(4, LOW);
delayMicroseconds(500);
digitalWrite(12, HIGH);
(HEXA / 4);
brightness = 10;
fadeAmount = 200;
digitalWrite(11, HIGH);
break;
}
case 32: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(4, LOW);
delayMicroseconds(500);
digitalWrite(12, HIGH);
(HEXA / 4);
brightness = 10;
fadeAmount = 200;
digitalWrite(11, HIGH);
break;
}
case 33: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(4, LOW);
delayMicroseconds(500);
digitalWrite(12, HIGH);
(HEXA / 4);
brightness = 10;
fadeAmount = 200;
digitalWrite(11, HIGH);
break;
}
case 34: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delayMicroseconds(500);
digitalWrite(4, LOW);
delayMicroseconds(500);
digitalWrite(12, HIGH);
(HEXA / 4);
brightness = 10;
fadeAmount = 200;
digitalWrite(11, HIGH);
break;
}
case 35: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(12, HIGH);
(HEXA / 6);
brightness = 10;
fadeAmount = 255;
break;
}
case 36: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(12, HIGH);
(HEXA / 6);
brightness = 10;
fadeAmount = 255;
break;
}
case 37: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(12, HIGH);
(HEXA / 6);
brightness = 10;
fadeAmount = 255;
break;
}
case 38: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(12, HIGH);
(HEXA / 6);
brightness = 10;
fadeAmount = 255;
break;
}
case 39: {
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(12, HIGH);
(HEXA / 6);
brightness = 10;
fadeAmount = 255;
break;
}
case 40: {
(alterVeloc = 7);
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(4, LOW);
delayMicroseconds(50);
digitalWrite(3, LOW);
break;
}
case 41: {
(alterVeloc = 7);
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(4, LOW);
delayMicroseconds(50);
digitalWrite(3, LOW);
break;
}
case 42: {
(alterVeloc = 7);
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(4, LOW);
delayMicroseconds(50);
digitalWrite(3, LOW);
break;
}
case 43: {
(alterVeloc = 7);
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(4, LOW);
delayMicroseconds(50);
digitalWrite(3, LOW);
break;
}
case 44: {
(alterVeloc = 7);
digitalWrite(4, HIGH);
delayMicroseconds(50);
digitalWrite(4, LOW);
delayMicroseconds(50);
digitalWrite(3, LOW);
break;
}
case 45: {
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(4, !digitalRead(4));
digitalWrite(11, !digitalRead(11));
//sleep_cpu();
break;
}
default: {
digitalWrite(4, !digitalRead(4));
}
}
}
if (autVeloc >= 2) {
digitalWrite(3, LOW);
(autVeloc = 0);
}
}
void fader9() {
// set the fader of pin 9:
noInterrupts();
for (a = 0; a < 255; a = a + 10) {
digitalWrite(9, random(a));
delayMicroseconds(50);
}
delay(300);
for (e = 255; e >= 0; e = e - 10) {
analogWrite(9, random(e));
delayMicroseconds(50);
}
delay(300);
interrupts();
}
void fader6() {
// set the fader of pin 6:
noInterrupts();
for (i = 0; i < 255; i = i + 10) {
digitalWrite(6, random(i));
delayMicroseconds(50);
}
delay(400);
for (o = 255; o >= 0; o = o - 10) {
analogWrite(6, random(o));
delayMicroseconds(50);
}
delay(400);
interrupts();
}
void fader5() {
// set the fader of pin 5:
noInterrupts();
for (u = 0; u < 255; u = u + 10) {
digitalWrite(5, random(u));
delayMicroseconds(50);
}
delay(500);
for (A = 255; A >= 0; A = A - 10) {
analogWrite(5, random(A));
delayMicroseconds(50);
}
delay(500);
interrupts();
}
void velocidade(void) {
// instanciando um botão só
// inicio da parametrização do VentLadordor
if (button2.pressed())
(alterVeloc = alterVeloc + 1);
if (alterVeloc == 1) {
(alterVeloc = 1);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, HIGH);
}
if (alterVeloc == 2) {
(alterVeloc = 2);
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
}
if (alterVeloc == 3) {
(alterVeloc = 3);
digitalWrite(9, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
}
if (alterVeloc == 4) {
(alterVeloc = 4);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
if (alterVeloc == 5) {
(alterVeloc = 5);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
fader9();
}
if (alterVeloc == 6) {
(alterVeloc = 6);
digitalWrite(5, LOW);
digitalWrite(9, LOW);
fader6();
}
if (alterVeloc == 7 ) {
(alterVeloc = 7);
digitalWrite(9, LOW);
digitalWrite(6, LOW);
fader5();
}
if ((alterVeloc >= 8))
{
(alterVeloc = 1);
}
}
void bombeamento(void) {
// inicio da parametrização do bombeamento
// le o estado sensornivel: ligado (LOW) ou desligado (HIGH)
nivelTanque = digitalRead(pinNiv);
noInterrupts();
switch (nivelTanque) { // escolha caso o nível
case (!0 || HIGH): { // quando nível está alto
digitalWrite(13, HIGH); // liga o LED de nível baixo
for (repiQue = 1; repiQue <= (-500); repiQue = repiQue + 1) {
delay(repiQue);
}
digitalWrite(10, LOW); // desliga a bomba
break;
}
default: { // quando o nível estiver baixo
analogWrite(13, LOW); // desliga o LED de nível baixo
if (button1.toggled()) { // inicio da parametrização do climatizador
if (button1.read() == Button::PRESSED)
digitalWrite(10, !digitalRead(10));
}
}
}
}
void oscilador(void) {
if (button4.toggled()) { // inicio da parametrização do oscilador
if (button4.read() == Button::PRESSED)
digitalWrite(11, !digitalRead(11));
}
}
void ionizador(void) {
if (button3.toggled()) {// inicio da parametrização do ionizador
if (button3.read() == Button::PRESSED)
digitalWrite(12, !digitalRead(12));
}
}
void serial(void) {
Serial.println();
Serial.print("temp: ");
Serial.println((int) celsius);
Serial.flush();
Serial.println();
Serial.print("Nível: ");
Serial.print(nivelTanque);
Serial.flush();
// Store the current time (start the clock)
unsigned long millisWithFlushStart = millis();
// Transmit the same psuedo-random text as before
Serial.println(F("How long will it take to transmit the following:"));
Serial.println(F("abcdefghijklmnopqrstuvwxyz"));
Serial.println(F("done"));
// This time, let TX buffer flush before "stopping" the clock
Serial.flush();
// Store the current time (stop the clock)
unsigned long millisWithFlushStop = millis();
// Print results for flushed calls
Serial.print(F("WITH flush, Serial.println()s return control in: "));
Serial.print( millisWithFlushStop - millisWithFlushStart);
Serial.println(F(" milliseconds."));
Serial.print("Interrupt count: ");
noInterrupts();
Serial.println(a);
Serial.println(e);
Serial.println(i);
Serial.println(o);
Serial.println(u);
Serial.println(A);
interrupts();
delay(100);
}