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); }