[[examplescode|Regresa a codigos]] /* ** A state machine for a semaphore (pedestrian Traffic Light) ** using pointers to function ** Author: Leonardo Yamasaki ** Licence GPL Free to use. */ // Define pins of led #define RED1 14 #define YEL1 15 #define GRE1 16 #define RED2 17 #define YEL2 18 #define GRE2 19 // define pin sensor analog #define SENSOR 20 #define SENSORLIM 600 //define timmings #define REDDEL 1000 #define YELDEL 500 #define GREDEL 1000 #define BLINKDEL 50 #define NUMBLINK 20 // States red, yellow and green of two semaphores void redSem1(); void yelSem1(); void greSem1(); void redSem2(); void yelSem2(); void greSem2(); // State pointer and init state void (*statefunc)() = greSem1; // state fuctions void redSem1(){ digitalWrite(RED1,HIGH); digitalWrite(YEL1,LOW); digitalWrite(GRE1,LOW); digitalWrite(RED2,LOW); digitalWrite(YEL2,LOW); digitalWrite(GRE2,HIGH); statefunc = greSem2; delay(REDDEL); } void redSem2(){ digitalWrite(RED1,LOW); digitalWrite(YEL1,LOW); digitalWrite(GRE1,HIGH); digitalWrite(RED2,HIGH); digitalWrite(YEL2,LOW); digitalWrite(GRE2,LOW); statefunc = greSem1; delay(REDDEL); } void yelSem1(){ digitalWrite(RED1,LOW); digitalWrite(YEL1,HIGH); digitalWrite(GRE1,LOW); digitalWrite(RED2,HIGH); digitalWrite(YEL2,LOW); digitalWrite(GRE2,LOW); statefunc = redSem1; delay(YELDEL); } void yelSem2(){ digitalWrite(RED1,HIGH); digitalWrite(YEL1,LOW); digitalWrite(GRE1,LOW); digitalWrite(RED2,LOW); digitalWrite(YEL2,HIGH); digitalWrite(GRE2,LOW); statefunc = redSem2; delay(YELDEL); } void greSem1(){ digitalWrite(RED1,LOW); digitalWrite(YEL1,LOW); digitalWrite(GRE1,HIGH); digitalWrite(RED2,HIGH); digitalWrite(YEL2,LOW); digitalWrite(GRE2,LOW); // Adding sensor for peatonal use while(analogRead(SENSOR)>SENSORLIM){} statefunc = yelSem1; delay(GREDEL); blinkPin(GRE1); } void greSem2(){ digitalWrite(RED1,HIGH); digitalWrite(YEL1,LOW); digitalWrite(GRE1,LOW); digitalWrite(RED2,LOW); digitalWrite(YEL2,LOW); digitalWrite(GRE2,HIGH); statefunc = yelSem2; delay(GREDEL); blinkPin(GRE2); } void blinkPin(int pin){ int statepin,i; statepin = digitalRead(pin); for(i=0;i