12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include <Automaton.h>
- // Safe controller for a Nuclear Missile Launcher
- Atm_led countdown, ignition;
- Atm_button button1, button2;
- Atm_bit bit1, bit2;
- Atm_timer timer1, timer2;
- Atm_controller ctrl;
- const int pinButton1 = 2;
- const int pinButton2 = 3;
- const int pinCountdownLed = 8;
- const int pinIgnitionLed = 9;
- const int buttonIntervalMax = 2000;
- const int countdownCount = 10;
- const int countdownFlashOn = 100;
- const int countdownFlashOff = 900;
- void setup() {
- // Self resetting button 1
- button1.begin( pinButton1 )
- .onPress( bit1, bit1.EVT_ON );
- timer1.begin( buttonIntervalMax )
- .onTimer( bit1, bit1.EVT_OFF );
- bit1.begin( false ).led( 4 )
- .onChange( true, timer1, timer1.EVT_START );
-
- // Self resetting button 2
- button2.begin( pinButton2 )
- .onPress( bit2, bit2.EVT_ON );
- timer2.begin( buttonIntervalMax )
- .onTimer( bit2, bit2.EVT_OFF );
- bit2.begin( false ).led( 5 )
- .onChange( true, timer2, timer2.EVT_START );
-
- // Controller
- ctrl.begin( false )
- .IF( bit1 ).AND( bit2 )
- .onChange( true, countdown, countdown.EVT_BLINK );
-
- // Countdown led
- countdown.begin( pinCountdownLed )
- .blink( countdownFlashOn, countdownFlashOff, countdownCount )
- .onFinish( ignition, ignition.EVT_ON );
-
- // Ignition
- ignition.begin( pinIgnitionLed );
- }
- void loop() {
- automaton.run();
- }
|