mirror of
https://github.com/balkian/arduino-microwave.git
synced 2024-12-22 18:38:12 +00:00
This commit is contained in:
commit
c8a5531546
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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user