*/
byte pin[3] = {11, 10, 9}; // 2v a 20ma: che resistenza dovro usare?
-byte color[3] = {255, 255, 255};
+byte color[3] = {0, 255, 255};
byte bluePin ;
public:
- // Public properties
- byte redValue ;
- byte greenValue ;
- byte blueValue ;
-
// Constructor: come viene instanziato un oggetto facente parte della classe
RGBLed(byte pinR, byte pinG, byte pinB)
{
greenPin = pinG ;
bluePin = pinB ;
- // Equvalente del Setup() per inizializzare i PIN
+ // Equivalente del Setup() per inizializzare i PIN
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(greenPin, OUTPUT);
delay(1000);
led.SetColor(255, 0, 255) ; // Mettiamo il LED in Green
delay(1000);
-
}
/* Domande
red
};
-states_available FSM1 ; // Semaforo principale
-states_available FSM2 ; // Semaforo secondario
+states_available FSM1 = turn_green; // Semaforo principale
+states_available FSM2 = turn_red; // Semaforo secondario
+RGBLed led_main(11, 10, 9);
+RGBLed led_secondary(8, 7, 6);
+
void setup() {
pinMode(input, INPUT_PULLUP);
Serial.begin(9600);
Serial.flush();
+ led_secondary.Red();
}
-RGBLed led_main(11, 10, 9);
-RGBLed led_secondary(8, 7, 6);
void loop() {
switch (FSM1) {
const byte input = 2; // PIN del bottone
int pausa = 3000;
long timer ;
+boolean wait = 0; // Memoria bottone
+
enum states_available { // Stati della FMS
turn_green, // Dinamico, transizione
green, // Statico
- wait_button, // Evento - Stimolo
- turn_yellow, // Dinamico, transizione
yellow, // Statico
turn_red, // Dinamico, transizione
turn_sec_yellow,// Yellow per semaforo secondario
red // Statico
};
-states_available state ;
+states_available state ;
void setup() {
break;
case green:
- if (millis() - timer => pausa * 2/3) {
- state = wait_button ;
- timer += pausa * 2/3 ;
- }
- break;
+ led.Green();
+ if (wait && (millis() - timer >= pausa * 2/3)) {
+ state = yellow;
+ timer = millis();
+ }
- case wait_button:
- if (digitalRead(input) == LOW) {
- delay(20); // Debouncing, si potrebbe fare con millis()
- state = turn_yellow ; // Il passaggio di stato avviene alla pressione di un bottone
- timer = millis();
- };
-
- break;
-
- case turn_yellow :
- led.Yellow();
- state = yellow ;
- break;
+ if (digitalRead(input) == LOW) {
+ wait = 1;
+ }
+ break;
case yellow :
+ led.Yellow();
if (millis() - timer >= pausa / 3) {
state = turn_red ;
+ wait = 0;
timer += pausa / 3;
}
break;
break;
case yellow :
- if (millis() - timer >= pausa * 2/3) {
+ if (millis() - timer >= pausa * 1/3) {
FSM1 = turn_red ;
- timer += pausa * 2/3 ;
+ timer += pausa * 1/3 ;
}
break;
break;
case turn_yellow :
- led2.Yellow();
+ led2.Blue();
FSM2 = yellow ;
break;
case yellow :
if (millis() - timer >= pausa / 3) {
FSM2 = turn_red ;
- timer += pausa * 2/3;
+ //timer += pausa * 2/3;
}
break;
case turn_red :
FSM2 = red ;
FSM1 = turn_green;
+ timer = millis();
break;
case red :