he realizado un proyecto sobre el control de una terma eléctrica toda la codificación esta bien (creo) pero me surgió un problema el cual es que se reinicia aleatoriamente mi teoría es que la memoria esta muy llena y necesito liberar un poco pero nose como hacerlo así que solicito que me ayuden por favorrr
pstd: soy muy novato por lo que espero que me explique con manzanitas jajaja
aqui les dejo la codificación por si tuviera alguna modificación que hacer para evitar el reinicio
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);float centi()
{
int dato;
float c;
dato=analogRead(A0);
c = (500.0 * dato)/1023;
return(c);
}float kelvin(float cent)
{
float k;
k=cent+273.15;
return(k);
}float fahren(float cent)
{
float f;
f = cent*1.8 + 32;
return f;
}float rankin(float cent)
{
float r;
r=(cent+273.15)*1.8;
return r;
}#include <Keypad.h>
//
const byte filas = 4; //four rows
const byte columnas = 3; //three columns
byte pinsFilas[filas] = {13, 9, 8, 7}; //connect to the row pinouts of the keypad
byte pinsColumnas[columnas] = {6, 1, 0}; //connect to the column pinouts of the keypadchar teclas[filas][columnas] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};Keypad teclado = Keypad(makeKeymap(teclas), pinsFilas, pinsColumnas, filas, columnas);
//char tecla;
int numero;
int ciclo;
int unidad;
int decena;
int contador;
int valor;void setup() {
pinMode(10,OUTPUT);
lcd.begin(16,2);
lcd.print("C= F=");
lcd.setCursor(0,1);
lcd.print("K= R=");
}void loop() {
float Centigrados = centi();
float Farenheit = fahren(Centigrados);
float Kelvin = kelvin(Centigrados);
float Rankin = rankin(Centigrados);tecla = teclado.getKey();
if(tecla != NO_KEY) {
numero = tecla - 48;
Serial.println(tecla);
Serial.println(numero);
}
if (numero == -6) {
lcd.clear(); //Se limpia la pantalla del LCD
delay(100); //pausa para pasar a otra pantalla
lcd.setCursor(2, 0); //se ajusta el cursor del LCD
lcd.print("NUEVA");
lcd.setCursor(2, 1);
lcd.print("TEMPERATURA");
delay(1000);
ciclo = 1;
numero = -1;
contador = 0;
}
if (ciclo == 1) { //Si el "cicloA = 1", indica que se presiono la tecla A o F6if (numero >= 0 && contador == 1) { //Si se presiona una digito y contador=1 entonces
unidad = numero; //Se iguala el valor tecleado a la variable "unidadA"
contador++; //Se incrementa al valor del contador a 2
numero = -1; //la variable numero comienza en -1
delay(100);
valor = (decena * 10) + unidad;
delay(100);
lcd.clear(); //Se limpia la pantalla del LCD
delay(100);
lcd.begin(16,2);
lcd.print("C= F=");
lcd.setCursor(2,0);
lcd.print(Centigrados);
lcd.setCursor(10,0);
lcd.print(Farenheit);
lcd.setCursor(14, 1); //posicionar cursor del LCD
lcd.print(valor); //mostrar en LCD valores
lcd.setCursor(0,1); //posicionar cursor del LCD
lcd.print("TEMPERATURA A "); //mostrar en LCD valores
delay(100);
}
if (numero >= 0 && contador == 0) { //Si se presiona un boton del teclado y si el "contador = 0" entonces
decena = numero; //Se iguala el valor tecleado a la variable "decenaA"
contador++; //Se incrementa el valor del "contador" a 1
numero = -1; //la variable "numero" comienza en -1
delay(500);
}
}
else
{
lcd.setCursor(2,0);
lcd.print(Centigrados);lcd.setCursor(10,0);
lcd.print(Farenheit);lcd.setCursor(2,1);
lcd.print(Kelvin);lcd.setCursor(10,1);
lcd.print(Rankin);delay(200);
}
if (valor - 5 > centi()){
digitalWrite(10,HIGH);
}
if (valor + 5 < centi()){
digitalWrite(10,LOW);
}
if (numero == -13){
digitalWrite(10,LOW);
}
}