mirror of
				https://github.com/balkian/arduino-microwave.git
				synced 2025-11-04 09:38: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