les pido su ayuda para resolver un problema que tengo con la programacion de arduino mega 2560 y pantalla 20 x 4, "la pantalla se reinicia"
#include <LiquidCrystal_I2C.h>
#include "LedControl.h"
LiquidCrystal_I2C lcd(0x27,20,4);
LedControl lc=LedControl(12,11,10,1);
int num=0;
int Uni=0;
int Dec=0;
int Cen=0;
int lectura=0;
float tempC=0.0;
int latch=2; //indica pin de salida en el chip
int clockpin=4; //Cuando ay que leer los bit
int data=3; //Envio datos
int duty; //Ciclo Util de PWM
byte Displays[10]={
// gfedcba
0b0111111, // 0
0b0000110, // 1
0b1011011, // 2
0b1001111, // 3
0b1100110, // 4
0b1101101, // 5
0b1111101, // 6
0b0000111, // 7
0b1111111, // 8
0b1101111 // 9
};
void setup() {
pinMode(22, INPUT);
pinMode(23, INPUT);
pinMode(24, INPUT);
pinMode(25, INPUT);
pinMode(26, INPUT);
pinMode(27, INPUT);
pinMode(28, INPUT);
pinMode(29, INPUT);
pinMode(30, INPUT);
pinMode(31, INPUT);
pinMode(32, INPUT);
pinMode(33, INPUT);
pinMode(34, INPUT);
pinMode(35, INPUT);
pinMode(36, INPUT);
pinMode(37, INPUT);
pinMode(38, INPUT);
pinMode(39, INPUT);
pinMode(40, INPUT);
pinMode(41, INPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("BIENVENIDOS");
pinMode(latch,OUTPUT);
pinMode(clockpin,OUTPUT);
pinMode(data,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
}
void loop() {
Sensor1();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Tanque Vacio ///////////////////////////////////////////////////
void Sensor1(){
if(digitalRead(22)==0){
duty=0;
num=0;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 5% /////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==0){
duty=12;
num=5;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 10% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==0){
duty=24;
num=10;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 15% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==0){
duty=36;
num=15;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 20% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==0){
duty=48;
num=20;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 25% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==0){
duty=60;
num=25;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 30% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==0){
duty=72;
num=30;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 35% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==0){
duty=84;
num=35;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 40% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==0){
duty=96;
num=40;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 45% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==0){
duty=108;
num=45;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 50% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==0){
duty=120;
num=50;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 55% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==0){
duty=132;
num=55;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 60% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==0){
duty=144;
num=60;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 65% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==0){
duty=156;
num=65;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 70% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==0){
duty=168;
num=70;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 75% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==1 && digitalRead(37)==0){
duty=180;
num=75;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 80% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==1 && digitalRead(37)==1
&& digitalRead(38)==0){
duty=192;
num=80;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 85% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==1 && digitalRead(37)==1
&& digitalRead(38)==1 && digitalRead(39)==0){
duty=204;
num=85;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 90% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==1 && digitalRead(37)==1
&& digitalRead(38)==1 && digitalRead(39)==1 && digitalRead(40)==0){
duty=216;
num=90;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 95% ////////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==1 && digitalRead(37)==1
&& digitalRead(38)==1 && digitalRead(39)==1 && digitalRead(40)==1 && digitalRead(41)==0){
duty=228;
num=95;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////// Sensor1 100% ///////////////////////////////////////////////////
if(digitalRead(22)==1 && digitalRead(23)==1 && digitalRead(24)==1 && digitalRead(25)==1
&& digitalRead(26)==1 && digitalRead(27)==1 && digitalRead(28)==1 && digitalRead(29)==1
&& digitalRead(30)==1 && digitalRead(31)==1 && digitalRead(32)==1 && digitalRead(33)==1
&& digitalRead(34)==1 && digitalRead(35)==1 && digitalRead(36)==1 && digitalRead(37)==1
&& digitalRead(38)==1 && digitalRead(39)==1 && digitalRead(40)==1 && digitalRead(41)==1){
duty=255;
num=100;
delay(200);
Muestra();
}
////////////////////////////////////////////////////////////////////////////////////////////
Sensor1();
}
////////////////////////////////////////////////////////////////////////////////////////////
void Muestra(){
if(num==0){
lcd.setCursor(0,1);
lcd.print("Tanque Vacio");
lectura = analogRead(0);
tempC = (lectura * (500.0 / 1023.0));
lcd.setCursor(0,3);
lcd.print(tempC);
lcd.print(" Grados");
Cen = num/100;
Dec = num/10;
Uni = num%10;
digitalWrite(latch, LOW);
shiftOut(data, clockpin, MSBFIRST,Displays[Uni]);
shiftOut(data, clockpin, MSBFIRST,Displays[Dec]);
shiftOut(data, clockpin, MSBFIRST,Displays[Cen]);
digitalWrite(latch, HIGH);
analogWrite( 6, duty ); // actualizar ciclo de trabajo
analogWrite( 7, duty ); // actualizar ciclo de trabajo
Sensor1();
}
lcd.setCursor(0,1);
lcd.print("Nivel");
lcd.print(" ");
lcd.print(num);
lcd.print(" ");
lectura = analogRead(0);
tempC = (lectura * (500.0 / 1023.0));
lcd.setCursor(0,3);
lcd.print(tempC);
lcd.print(" Grados");
Cen = num/100;
Dec = num/10;
Uni = num%10;
digitalWrite(latch, LOW);
shiftOut(data, clockpin, MSBFIRST,Displays[Uni]);
shiftOut(data, clockpin, MSBFIRST,Displays[Dec]);
shiftOut(data, clockpin, MSBFIRST,Displays[Cen]);
digitalWrite(latch, HIGH);
analogWrite( 6, duty ); // actualizar ciclo de trabajo
analogWrite( 7, duty ); // actualizar ciclo de trabajo
Sensor1();
}