hola soy Jim soy nuevo en Arduino hace unas semanas comencé a programar en este lenguaje C.
tengo un pequeño problema. resulta que en multiples oportunidades cuando se ejecuta la interrupcion se resetea mi arduini estoy usando un NANO. abjunto mi progra, ojala y me ayuden....
muchas gracias.
#include <EEPROM.h>
#include "HX711.h"
#define DOUT A1
#define CLK A0
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Crear el objeto lcd dirección 0x3f y 16 columnas x 2 filas lcd(0x3f,16,2);
LiquidCrystal_I2C lcd(0x3f,16,2); //lcd(0x3f,16,2);
HX711 balanza(DOUT, CLK);
int puls[] = {2,3,4,5,6,7}; int rele[] = {8,9,10,11,12,13};
int cont_a; int cont_b; int cont_c; int tiempo;
//int cont_a = 50; int cont_b = 50; int cont_c = 50; int tiempo = 50; //habilitar solo en la primera subida del programa.
int i = 0; int peso = 0;
long T0 = 0 ; // Variable global para tiempo.
volatile int contador = 0;
void setup()
{ attachInterrupt( 0, ServicioBoton1, LOW); //attachInterrupt( 1, ServicioBoton2, LOW);
lcd.init(); // Inicializar el LCD
lcd.backlight(); //Encender la luz de fondo.
balanza.set_scale(422.55); // Establecemos la escala
balanza.tare(5); //El peso actual es considerado Tara.
for (int n=0; n<6; n++) {pinMode(puls[n], INPUT); pinMode(rele[n], OUTPUT);} //configura entradas y salidas.
cont_a = EEPROM.read(1); cont_b = EEPROM.read(2); cont_c = EEPROM.read(3); tiempo = EEPROM.read(4);
lcd.setCursor(5, 0);
lcd.print("Peso :");
lcd.setCursor(9, 1);
lcd.print("Kg");
}
void loop()
{ if (digitalRead(puls[4]) == 0) //Boton de tare
{ lcd.clear(); balanza.tare(20);
lcd.setCursor(5, 0); lcd.print("Peso :");
lcd.setCursor(9, 1); lcd.print("Kg");
}
if (digitalRead(puls[1]) == 0) {lcd.clear(); i++; } //Ingreso al Set_Point
lcd.setCursor(2, 1);
peso = (balanza.get_units(5));
lcd.print(peso);
//////////////////// C O N T R O L /////////////////////
if (peso <= cont_a) { digitalWrite(rele[0],HIGH); } //1º peso 70%
else { digitalWrite(rele[0],LOW); }
if (peso <= cont_b) { digitalWrite(rele[1],HIGH); } //2º peso 25%
else { digitalWrite(rele[1],LOW); }
if (peso <= cont_c) { digitalWrite(rele[2],HIGH); } //3º peso 05%
else { digitalWrite(rele[2],LOW); i = 7;}
//////////////////S E T _ P O I N T /////////////////////
while(i == 1) //Pone en pause el programa
{ lcd.setCursor(0, 0); lcd.print("S E T P O I N T");
lcd.setCursor(1, 1); lcd.print("C O S T E N O");
digitalWrite(rele[0],LOW); digitalWrite(rele[1],LOW); digitalWrite(rele[2],LOW);
delay (250);
if (digitalRead(puls[1])== 0) {lcd.clear(); i++; }
}
while(i == 2) //Setea 1º Peso 70%
{ lcd.setCursor(3, 0); lcd.print("SETEO 70%");
lcd.setCursor(7, 1); lcd.print(cont_a);
if (digitalRead(puls[2]) == 0) {cont_a--; }
if (digitalRead(puls[3]) == 0) {cont_a++; }
delay (250);
if (digitalRead(puls[1])== 0) {i++; }
}
while(i == 3) //Setea 2º Peso 25%
{ lcd.setCursor(3, 0); lcd.print("SETEO 25%");
lcd.setCursor(7, 1); lcd.print(cont_b);
if (digitalRead(puls[2]) == 0) {cont_b--; }
if (digitalRead(puls[3]) == 0) {cont_b++; }
delay (250);
if (digitalRead(puls[1])== 0) {i++; }
}
while(i == 4) //Setea 3º Peso 05%
{ lcd.setCursor(3, 0); lcd.print("SETEO 05%");
lcd.setCursor(7, 1); lcd.print(cont_c);
if (digitalRead(puls[2]) == 0) {cont_c--; }
if (digitalRead(puls[3]) == 0) {cont_c++; }
delay (250);
if (digitalRead(puls[1])== 0) {lcd.clear(); i++; }
}
while(i == 5) //Setea tiempo de descarga
{ lcd.setCursor(0, 0); lcd.print("SETEO T.DESCARG");
lcd.setCursor(7, 1); lcd.print(tiempo);
if (digitalRead(puls[2]) == 0) {tiempo--; }
if (digitalRead(puls[3]) == 0) {tiempo++; }
delay (250);
if (digitalRead(puls[1])== 0) {lcd.clear(); i++; }
}
///////////////////// E X T R A /////////////////////
while(i == 6) //Guarda Parametros y prepara el Screent de la LCD
{ EEPROM.write(1, cont_a); EEPROM.write(2, cont_b); EEPROM.write(3, cont_c); EEPROM.write(4, tiempo);
lcd.setCursor(4, 0); lcd.print("S A V E");
lcd.setCursor(3, 1); lcd.print("D A T O S"); //"P R O G R A M A"
delay (1000);
i = 0;
lcd.clear();
lcd.setCursor(5, 0); lcd.print("Peso :");
lcd.setCursor(9, 1); lcd.print("Kg");
}
////////////////// D E S C A R G A //////////////////
while(i == 7) //Rutina de Descarga
{ if (digitalRead(rele[4]) == 1)
{ digitalWrite(rele[3],HIGH);
delay (tiempo*100);
digitalWrite(rele[3],LOW);
i = 0;
delay (tiempo*10);
digitalWrite(rele[4],LOW);
}
}
}
//////////////////I N T E R R U P C I O N 0 1 /////////////////////
void ServicioBoton1()
{ if ( millis() > T0 + 250)
{ digitalWrite(rele[4],!digitalRead(rele[4]));
peso = (balanza.get_units(5));
T0 = millis();
}
}
BALANZA.ino (4.77 KB)