This is an old revision of the document!
/*
* Semaforo como maquina de estados usando
* punteros a funcion.
* Leonardo Yamasaki
* GPL
*/
#define RED1 2
#define YEL1 3
#define GRE1 4
#define RED2 5
#define YEL2 6
#define GRE2 7
// States
void redSem1();
void yelSem1();
void greSem1();
void redSem2();
void yelSem2();
void greSem2();
// State pointer
void (*statefunc)() = greSem1;
//punteros a estados
void redSem1(){
digitalWrite(RED1,HIGH);
digitalWrite(YEL1,LOW);
digitalWrite(GRE1,LOW);
digitalWrite(RED2,LOW);
digitalWrite(YEL2,LOW);
digitalWrite(GRE2,HIGH);
statefunc = greSem2;
}
void redSem2(){
digitalWrite(RED1,LOW);
digitalWrite(YEL1,LOW);
digitalWrite(GRE1,HIGH);
digitalWrite(RED2,HIGH);
digitalWrite(YEL2,LOW);
digitalWrite(GRE2,LOW);
statefunc = greSem1;
}
void yelSem1(){
digitalWrite(RED1,LOW);
digitalWrite(YEL1,HIGH);
digitalWrite(GRE1,LOW);
digitalWrite(RED2,HIGH);
digitalWrite(YEL2,LOW);
digitalWrite(GRE2,LOW);
statefunc = redSem1;
}
void yelSem2(){
digitalWrite(RED1,HIGH);
digitalWrite(YEL1,LOW);
digitalWrite(GRE1,LOW);
digitalWrite(RED2,LOW);
digitalWrite(YEL2,HIGH);
digitalWrite(GRE2,LOW);
statefunc = redSem2;
}
void greSem1(){
digitalWrite(RED1,LOW);
digitalWrite(YEL1,LOW);
digitalWrite(GRE1,HIGH);
digitalWrite(RED2,HIGH);
digitalWrite(YEL2,LOW);
digitalWrite(GRE2,LOW);
statefunc = yelSem1;
}
void greSem2(){
digitalWrite(RED1,HIGH);
digitalWrite(YEL1,LOW);
digitalWrite(GRE1,LOW);
digitalWrite(RED2,LOW);
digitalWrite(YEL2,LOW);
digitalWrite(GRE2,HIGH);
statefunc = yelSem2;
}
void setup(){
pinMode(RED1,OUTPUT);
pinMode(YEL1,OUTPUT);
pinMode(GRE1,OUTPUT);
pinMode(RED2,OUTPUT);
pinMode(YEL2,OUTPUT);
pinMode(GRE2,OUTPUT);
}
void loop(){
(*statefunc)();
delay(500);
}