Você está na página 1de 3

#include "ACS712.

h"
// botões para selecionar entre monofasico e trifasico.
const int led1 = 30;
const int led2 = 31;
const int led3 = 34;
const int led4 = 45;
const int led5 = 46;
const int led6 = 47;
// const int botao1 = 2;
// const int botao2 = 3;
int statusbotao1 = 1;
int statusbotao2 = 1;
int sensorValue1 = 0;
int sensorValue2 = 0;
// sensor de corrente
ACS712 sensor1(ACS712_30A, A0);
ACS712 sensor2(ACS712_30A, A3);
// Variaveis liga e desliga p/ display 7 segmentos
const int l = 1, d = 0; // Display 7 segmentos (catodo comum)
byte displaySeteSeg[10][7] = {
{ l,l,l,l,l,l,d }, //DIGITO 0
{ d,l,l,d,d,d,d }, //DIGITO 1
{ l,l,d,l,l,d,l }, //DIGITO 2
{ l,l,l,l,d,d,l }, //DIGITO 3
{ d,l,l,d,d,l,l }, //DIGITO 4
{ l,d,l,l,d,l,l }, //DIGITO 5
{ l,d,l,l,l,l,l }, //DIGITO 6
{ l,l,l,d,d,d,d }, //DIGITO 7
{ l,l,l,l,l,l,l }, //DIGITO 8
{ l,l,l,d,d,l,l } //DIGITO 9
};
byte ajuste=11; // botão incremento.
int number = 0; // número a ser mostrado no display deve ser int
(inteiros posit. e negat.)

void setup() {

pinMode (led1, OUTPUT);


pinMode (led2, OUTPUT);
pinMode (led3, OUTPUT);
pinMode (led4, OUTPUT);
pinMode (led5, OUTPUT);
pinMode (led6, OUTPUT);
pinMode (botao1, INPUT);
pinMode (botao2, INPUT);
pinMode(ajuste, INPUT_PULLUP);
attachInterrupt (digitalPinToInterrupt (2), botao1, RISING);
attachInterrupt (digitalPinToInterrupt (3), botao2, RISING);
Serial.begin(9600);
Serial.println("Aguarde. Calibrando...");
sensor1.calibrate();
sensor2.calibrate();
Serial.println("Fim da calibração");
}
void loop() {
for (int i = 2; i < 10; i++)
{
pinMode(i, OUTPUT); //conexão pinos dos 7 segmentos + o ponto
}

if (digitalRead(ajuste) == 0 ){ // verifica se o botão ajuste foi


acionado
number += 1;
while (digitalRead(ajuste) == 0) {} // loop vazio - aguarda soltar o
botão (evita a númeração constante)
}
// reseta em caso de estouro (<0 ou >9)
if (number > 9) {number = 0;}
// mostra o número no display
for (int j = 2; j < 9; j++) {
digitalWrite(j, displaySeteSeg[number][j-2]);
}
delay(2); // evitar que o botão seja acionado em um mesmo clique

//Sensor de corrente

float I1= sensor1.getCurrentAC(60);


Serial.println(String("Corrente fase R = ") + I1 + " A");
float I2= sensor2.getCurrentAC(60);
Serial.println(String("Corrente fase S = ") + I2 + " A");
sensorValue1 = analogRead(I1); // lê o pino de entrada
sensorValue2 = analogRead(I2); // lê o pino de I2
delay (10);

if ( number > sensorValue1 || number > sensorValue2){


delay (100); // qundo eu aumento o delay para que o circuito seja
desenegizado apos esse tempo/ quando meu display não conta.
if (number > sensorValue1|| number > sensorValue2){
digitalWrite (led1 ,LOW); //led apaga quando o numero mostrado no
display e superior a I.
digitalWrite (led2 ,LOW);
digitalWrite (led3 ,LOW);
digitalWrite (led4 ,LOW);
digitalWrite (led5 ,LOW);
digitalWrite (led6 ,LOW);
}
}
}
void botao1 (){
if (digitalRead (botao1) == HIGH ){
delay (10);
if (digitalRead (botao1)==LOW) {
digitalWrite(led1, statusbotao1);
digitalWrite (led2, statusbotao1);
digitalWrite (led4, statusbotao1);
digitalWrite (led5, statusbotao1);
statusbotao1 =!statusbotao1;
}
}
}
void botao2 (){
if (digitalRead (botao2) == HIGH ){
delay (10);
if (digitalRead (botao2)==LOW) {
digitalWrite(led1, statusbotao2);
digitalWrite (led2, statusbotao2);
digitalWrite (led3, statusbotao2);
digitalWrite (led4, statusbotao2);
digitalWrite (led5, statusbotao2);
digitalWrite (led6, statusbotao2);
statusbotao2 =!statusbotao2;
}
}
}

Você também pode gostar