Aquí el código:
Este ocupa 1010 bytes. Queda sitio para otro modo, si es un modo sencillo.//CÓDIGO PARA 4 MODOS. UNO DE ELLOS PROGRAMABLE Y OTRO FLASH LENTO
//PARA IR EN BICI POR CIUDAD
#include
#define ledpin 1
byte mode; //el modo en el que funciona la linterna (alto = 1,
//medio = 2, ...) valor mínimo es 1, máximo es maxmodereal
byte programar = 0;
#define maxmodereal 4 //decimos que hay 4 modos.
byte guardamode; //modo a guardar en la memoria EEPEOM
boolean primer1 = false; //necesario para memoria modo
boolean primer2 = false; //necesario para memoria modo
unsigned long int time; //tiempo en milisegundos cuando se
//conecta la linterna
unsigned long int time2; //tiempo en milisegundos actual
boolean done_low = false;
byte nivel_low;
#define tiempo_memoria 3000
void setup() {
pinMode(1, OUTPUT); //led como salida digital en pin 1
time = millis(); //hora a la que se enciende linterna
//ahora leemos si está activado el modo oculto
mode = EEPROM.read(1); //lee modo desde memoria
if (mode == 0) {mode = 1;} //solo primer uso
nivel_low = EEPROM.read(4); //lee nivel de low o tercer modo
if (nivel_low maxmodereal) {guardamode = 1;}
//No existe modo con número superior al maxmodereal. pasamos al mode = 1
EEPROM.write(1, guardamode);
primer1 = true;} //para que se se guarde solo una vez
//siguen los modos
if (mode == 1) {analogWrite(ledpin, 255);} //modo alto
if (mode == 2) {analogWrite(ledpin, 100);} //modo nedio
if (mode == 3) { //modo programable
analogWrite(ledpin, nivel_low);
if (done_low == false) {
delay(3000);
done_low = true;
EEPROM.write(1, 3); //guarda el modo
analogWrite(ledpin, 0); delay(200); analogWrite(ledpin, nivel_low);
EEPROM.write(3, 1);//guarda hay que programar
delay(1500);
EEPROM.write(3, 0);//guarda no hay que programar
}
}
if (mode == 4){//bicicleta
analogWrite(ledpin, 35); delay(250); digitalWrite(ledpin, LOW); delay(120);
}
if (primer2 == false) {
time2 = millis(); //hora actual en milisegundos
//si han pasado más de 3 segundos se guarda el modo actual, no el
//siguiente,
if ((time2 - time) > tiempo_memoria)
{{EEPROM.write(1, mode);} //guarda modo actual
primer2 = true;}
}
}// no programar
}// fin loop