#define Oscuro 0
#defne Tenue 1
#define Normal 2
#define Luminoso 3
int estado
int luzactual
int luzobjetivo[4] = {10,75,125,200}
bool cortinamov
int indicefoco
int tics
int main() {
DESHABILITAR
cortinamov = FALSE;
indicefoco = 0;
tics++
INSTALAR
HABILITAR
while (TRUE) {
if (!cortinamov) {
if ((estado < Oscuro)&& (in(SENSOR_INTERNO) < luzobjetivo[estado])) { // falta luz
if (!(in(TOPE_CORTINA))) { //cortina no esta en tope
out(CONTROL_CORTINAS,0x1);
cortinamov=TRUE; //abro cortina
}
else { //cortina en tope, prendo foco
indicefoco <<= 1;
indicefoco++;
out(LUCES,indicefoco);
}
else if ((estado > Luminoso)&&(in(SENSOR_INTERNO) > luzobjetivo[estado])) { //sobra luz
if (indicefoco!=0) { //hay algun foco prendido
indicefoco >>= 1;
out(LUCES,indicefoco);
}
else { //no hay focos prendidos, cierro cortina
out(CONTROL_CORTINAS,0x2);
cortinamov=TRUE;
}
}
}
}
}
void iluminar() {
estado = (in(ID_BOTON_PRESIONADO) & 0x3);
tics=0;
}
void Cortinas() {
cortinamov= FALSE;
}
void Timer() {
tics++;
if ((estado!=Oscuro)&&(tics==50*60*60*12))
estado=Tenue;
}
Me levanta sospechas porque generalmente las soluciones oficiales tienen bastante tratamiendo de estados y cosas un poco mas complicadas que lo que siempre se me ocurre hacer, hay algun problema en lo mio o simplemente es mas precario pero funciona igual?