mirror of
				https://github.com/balkian/arduino-microwave.git
				synced 2025-11-04 01:28:26 +00:00 
			
		
		
		
	This commit is contained in:
		
							
								
								
									
										299
									
								
								Microondas.pde
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										299
									
								
								Microondas.pde
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,299 @@
 | 
			
		||||
#include <LiquidCrystal.h>
 | 
			
		||||
#include "TimerOne.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 | 
			
		||||
String keys="123F456E789DA0BC";
 | 
			
		||||
int key;
 | 
			
		||||
int valores[] = {
 | 
			
		||||
903,
 | 
			
		||||
876,
 | 
			
		||||
819,
 | 
			
		||||
747,
 | 
			
		||||
710,
 | 
			
		||||
693,
 | 
			
		||||
656,
 | 
			
		||||
585,
 | 
			
		||||
536,
 | 
			
		||||
527,
 | 
			
		||||
506,
 | 
			
		||||
483,
 | 
			
		||||
473,
 | 
			
		||||
465,
 | 
			
		||||
448,
 | 
			
		||||
200};
 | 
			
		||||
 | 
			
		||||
enum t_estado {
 | 
			
		||||
  PARADO,
 | 
			
		||||
  FUNCIONANDO,
 | 
			
		||||
  PAUSADO   
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
t_estado estado = PARADO;
 | 
			
		||||
 | 
			
		||||
enum t_modo {
 | 
			
		||||
  MICRO,
 | 
			
		||||
  MGRILL,
 | 
			
		||||
  GRILL
 | 
			
		||||
};
 | 
			
		||||
t_modo modo = MICRO;
 | 
			
		||||
 | 
			
		||||
boolean micro = true;
 | 
			
		||||
boolean grill = false;
 | 
			
		||||
 | 
			
		||||
long contador = 0;
 | 
			
		||||
int reloj[] = { 0, 0, 0, 0 };
 | 
			
		||||
 | 
			
		||||
int potencia = 100;
 | 
			
		||||
 | 
			
		||||
int pinPuerta = 0;
 | 
			
		||||
int pinGrill = 9;
 | 
			
		||||
int pinMicro = 10;
 | 
			
		||||
int pinResto = 8;
 | 
			
		||||
 | 
			
		||||
boolean key_lockout=false;
 | 
			
		||||
 | 
			
		||||
void setup() {
 | 
			
		||||
  Serial.begin(9600);
 | 
			
		||||
  pinMode(pinPuerta, INPUT);
 | 
			
		||||
  attachInterrupt(pinPuerta, puertaAbierta, RISING);
 | 
			
		||||
  attachInterrupt(pinPuerta, puertaCerrada, FALLING);
 | 
			
		||||
 | 
			
		||||
  lcd.begin(16, 2);
 | 
			
		||||
  TCCR2B = 0x00;        //Disbale Timer2 while we set it up
 | 
			
		||||
  TCNT2  = 130;         //Reset Timer Count to 130 out of 255
 | 
			
		||||
  TIFR2  = 0x00;        //Timer2 INT Flag Reg: Clear Timer Overflow Flag
 | 
			
		||||
  TIMSK2 = 0x01;        //Timer2 INT Reg: Timer2 Overflow Interrupt Enable
 | 
			
		||||
  TCCR2A = 0x00;        //Timer2 Control Reg A: Normal port operation, Wave Gen Mode normal
 | 
			
		||||
  TCCR2B = 0x05;        //Timer2 Control Reg B: Timer Prescaler set to 128
 | 
			
		||||
  paraPrograma();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int count = 0;
 | 
			
		||||
 | 
			
		||||
ISR(TIMER2_OVF_vect) {
 | 
			
		||||
  if ( contador > 0 && estado == FUNCIONANDO ){
 | 
			
		||||
      count++;               //Increments the interrupt counter
 | 
			
		||||
    if(count > 999){
 | 
			
		||||
      contador = contador-1;
 | 
			
		||||
      Serial.println("Contador nuevo");
 | 
			
		||||
      Serial.println(contador);
 | 
			
		||||
      count = 0;           //Resets the interrupt counter
 | 
			
		||||
      if( contador == 0 ){
 | 
			
		||||
        paraPrograma();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  TCNT2 = 130;           //Reset Timer to 130 out of 255
 | 
			
		||||
  TIFR2 = 0x00;          //Timer2 INT Flag Reg: Clear Timer Overflow Flag
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop() {
 | 
			
		||||
  // set the cursor to column 0, line 1
 | 
			
		||||
  // (note: line 1 is the second row, since counting begins with 0):
 | 
			
		||||
  // print the number of seconds since reset:
 | 
			
		||||
  key=getKeypad();
 | 
			
		||||
  if(key!=-1){
 | 
			
		||||
    Serial.print("Pulsado:");
 | 
			
		||||
    Serial.println(keys[key]);
 | 
			
		||||
    Serial.print("Estado:");
 | 
			
		||||
    Serial.println(estado);
 | 
			
		||||
    char carac = keys[key];
 | 
			
		||||
    if ( estado == PARADO ){
 | 
			
		||||
      if( carac >= 48 && carac <= 57 ){
 | 
			
		||||
        int digito = carac - 48;
 | 
			
		||||
        actualizarReloj(digito);
 | 
			
		||||
      }else if( carac == 'A' ) {
 | 
			
		||||
        empiezaPrograma();
 | 
			
		||||
      }else if( carac == 'F' ){
 | 
			
		||||
        cambiaModo();
 | 
			
		||||
      }else if( carac == 'E' ){
 | 
			
		||||
        cambiaPotencia(10);
 | 
			
		||||
      }else if( carac == 'D' ){
 | 
			
		||||
        cambiaPotencia(-10);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else if ( estado == FUNCIONANDO ){
 | 
			
		||||
      if( carac == 'C' ) {
 | 
			
		||||
        paraPrograma();
 | 
			
		||||
      }
 | 
			
		||||
      else if( carac == 'A' ) {
 | 
			
		||||
        pausaPrograma();
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    else if ( estado == PAUSADO ){
 | 
			
		||||
      if( carac == 'A' ) {
 | 
			
		||||
        empiezaPrograma();
 | 
			
		||||
      }
 | 
			
		||||
      else if( carac == 'C' ) {
 | 
			
		||||
        paraPrograma();
 | 
			
		||||
      }else if( carac == 'F' ){
 | 
			
		||||
        cambiaModo();
 | 
			
		||||
      }else if( carac == 'E' ){
 | 
			
		||||
        cambiaPotencia(10);
 | 
			
		||||
      }else if( carac == 'D' ){
 | 
			
		||||
        cambiaPotencia(-10);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if( estado == FUNCIONANDO ){
 | 
			
		||||
    imprimeRelojArriba();
 | 
			
		||||
  }
 | 
			
		||||
  delay(100);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int getKeypad(){
 | 
			
		||||
  int ret=-1;
 | 
			
		||||
  boolean reset_lockout=false;
 | 
			
		||||
  int leido = analogRead(A0);
 | 
			
		||||
  if(leido==0)
 | 
			
		||||
    key_lockout=false;
 | 
			
		||||
  else if(!key_lockout){
 | 
			
		||||
    delay(20);
 | 
			
		||||
    for(int i=0; i<16; i++){
 | 
			
		||||
       if(valores[i]<leido){
 | 
			
		||||
         ret = i;
 | 
			
		||||
         break;
 | 
			
		||||
       }
 | 
			
		||||
    }
 | 
			
		||||
      key_lockout=true;
 | 
			
		||||
  }
 | 
			
		||||
  return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void actualizarReloj(int digito){
 | 
			
		||||
  for(int i=0; i<3; i++){
 | 
			
		||||
   reloj[i] = reloj[i+1];
 | 
			
		||||
  }
 | 
			
		||||
  reloj[3] = digito;
 | 
			
		||||
  imprimeRelojAbajo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void imprimeRelojArriba(){
 | 
			
		||||
  contadorAlReloj();
 | 
			
		||||
  lcd.setCursor(11, 0);
 | 
			
		||||
  char buffer[10];
 | 
			
		||||
  sprintf(buffer, "%i%i:%i%i", reloj[0], reloj[1], reloj[2], reloj[3]);
 | 
			
		||||
  Serial.print("Contador:");
 | 
			
		||||
  Serial.println(contador);
 | 
			
		||||
  lcd.print(buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void imprimeRelojAbajo(){
 | 
			
		||||
  lcd.setCursor(0, 1);
 | 
			
		||||
  char buffer[10];
 | 
			
		||||
  sprintf(buffer, "%i%i:%i%i", reloj[0], reloj[1], reloj[2], reloj[3]);
 | 
			
		||||
  lcd.print(buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void imprimeModo(){
 | 
			
		||||
  lcd.setCursor(6, 1);
 | 
			
		||||
  if( modo == GRILL ){
 | 
			
		||||
    lcd.print("GRILL");
 | 
			
		||||
  }else if ( modo == MGRILL ){
 | 
			
		||||
    lcd.print("M+GR ");
 | 
			
		||||
  }else {
 | 
			
		||||
    lcd.print("     ");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void imprimePotencia(){
 | 
			
		||||
  lcd.setCursor(13, 1);
 | 
			
		||||
  if( potencia < 100 ){
 | 
			
		||||
    lcd.print(potencia);
 | 
			
		||||
    lcd.print("%");
 | 
			
		||||
  }else {
 | 
			
		||||
    lcd.print("   ");
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void empiezaPrograma(){
 | 
			
		||||
  int total = reloj[0]+reloj[1]+reloj[2]+reloj[3];
 | 
			
		||||
  if(total > 0 & reloj[2] < 6){
 | 
			
		||||
    lcd.setCursor(0, 0);
 | 
			
		||||
    lcd.clear();
 | 
			
		||||
    lcd.print("Cocinando");
 | 
			
		||||
    estado = FUNCIONANDO;
 | 
			
		||||
    relojAlContador();
 | 
			
		||||
    imprimeRelojArriba();
 | 
			
		||||
    imprimeModo();
 | 
			
		||||
    imprimePotencia();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void pausaPrograma(){
 | 
			
		||||
  lcd.setCursor(0, 0);
 | 
			
		||||
  lcd.clear();
 | 
			
		||||
  lcd.print("Pausa");
 | 
			
		||||
  estado = PAUSADO;
 | 
			
		||||
  imprimeRelojArriba();
 | 
			
		||||
  imprimePotencia();
 | 
			
		||||
  imprimeModo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void paraPrograma(){
 | 
			
		||||
  lcd.setCursor(0, 0);
 | 
			
		||||
  lcd.clear();
 | 
			
		||||
  lcd.print("Selecciona tie");
 | 
			
		||||
  estado = PARADO;
 | 
			
		||||
  borraReloj();
 | 
			
		||||
  imprimeRelojAbajo();
 | 
			
		||||
  modo = MICRO;
 | 
			
		||||
  potencia = 100;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void borraReloj(){
 | 
			
		||||
  reloj[0] = 0;
 | 
			
		||||
  reloj[1] = 0;
 | 
			
		||||
  reloj[2] = 0;
 | 
			
		||||
  reloj[3] = 0;
 | 
			
		||||
  contador = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void relojAlContador(){
 | 
			
		||||
 contador = (reloj[0]*10+reloj[1])*60+reloj[2]*10+reloj[3];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void contadorAlReloj(){
 | 
			
		||||
  int segundos = contador % 60;
 | 
			
		||||
  int minutos = contador / 60;
 | 
			
		||||
  reloj[3] = segundos % 10;
 | 
			
		||||
  reloj[2] = segundos / 10;
 | 
			
		||||
  reloj[1] = minutos % 10;
 | 
			
		||||
  reloj[0] = minutos / 10;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cambiaModo(){
 | 
			
		||||
  if( modo == MICRO ){
 | 
			
		||||
    modo = GRILL;
 | 
			
		||||
  }else if ( modo == GRILL ){
 | 
			
		||||
    modo = MGRILL;
 | 
			
		||||
  } else if ( modo == MGRILL ){
 | 
			
		||||
    modo = MICRO;
 | 
			
		||||
  }
 | 
			
		||||
  Serial.print("Modo de cocina: ");
 | 
			
		||||
  Serial.println(modo);
 | 
			
		||||
  imprimeModo();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void cambiaPotencia(int incremento){
 | 
			
		||||
  potencia = potencia + incremento;
 | 
			
		||||
  if( potencia > 100 ){
 | 
			
		||||
    potencia = 100;
 | 
			
		||||
  }else if ( potencia < 0 ){
 | 
			
		||||
    potencia = 0; 
 | 
			
		||||
  }
 | 
			
		||||
  imprimePotencia();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public void puertaAbierta(){
 | 
			
		||||
  if( estado == FUNCIONANDO ){
 | 
			
		||||
    pausaPrograma();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public void puertaCerrada(){
 | 
			
		||||
  if( estado == FUNCIONANDO ){
 | 
			
		||||
    empiezaPrograma();
 | 
			
		||||
  } 
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user