The only other thing is, I know you said about the states, but still not sure on "down fading".
Also, the "startup sequence" stage is knocked out, so for the impulse mode sequence, would i want to put that where the note says //what next?
or after the break;
I'm thinking it would be where "whats next?" is. but just want to get that confirmed.
Also, progress report with code!
// The Enterprise
// Author: Nick Gammon
// Date: 27 December 2012
#include <LedFader.h>
#include <LedFlasher.h>
// pin assignments
const byte StrobesPin = 13;
const byte NavigationPin = 12;
const byte DeflectorbluePin = 11; // PWM
const byte DeflectororangePin = 10; // PWM
const byte NacellsbluePin = 9; // PWM
const byte ShuttlebayPin = 8;
const byte DoorsPin = 7;
const byte NacellsvioletPin = 6; // PWM
const byte ImpulseorangePin = 5; // PWM
const byte TorpedoPin = 4;
const byte ImpulseredPin = 3; // PWM
const byte RCSPin = 2;
const byte CabinPin = 1;
// Faders
// pin min max millis on? stop?
LedFader impulseredFader (ImpulseredPin, 0, 40, 3000, false, true);
LedFader impulseorangeFader (ImpulseorangePin, 0, 40, 3000, false, true);
LedFader deflectororangeFader (DeflectororangePin, 0, 40, 3000, false, true);
LedFader deflectorblueFader (DeflectorbluePin, 0, 40, 3000, false, true);
LedFader nacellsvioletFader (NacellsvioletPin, 0, 40, 3000, false, true);
LedFader nacellsblueFader (NacellsbluePin, 0, 40, 3000, false, true);
// Flashers
// pin off-time on-time on?
LedFlasher strobes (StrobesPin, 8000, 100, false);
LedFlasher navigation (NavigationPin, 2000, 500, false);
// states for the state machine
typedef enum
{
initialState,
wantCabin,
wantRCS,
wantDeflectororangeon, // impulse mode
wantDeflectorblueon, // warp mode
wantDeflectororangeoff, // warp mode
wantDeflectorblueoff, // impulse mode
wantNacellsvioleton, // impulse mode
wantNacellsblueon, // warp mode
wantNacellsvioletoff, // warp mode
wantNacellsblueoff, // impulse mode
wantImpulseredon, // impulse mode
wantImpulseorangeon, // warp mode
wantImpulseredoff, // warp mode
wantImpulseorangeoff, // impulse mode
wantShuttleBayopen // open in impulse
wantShuttleBayclosed // closed in warp
wantNavigation, // ALWAYS ON
wantStrobes, // ALWAYS ON
wantTorpedoon, // impulse mode
wantTorpedooff // warp mode
// more states here
} states;
// state machine variables
states state = initialState;
unsigned long lastStateChange = 0;
unsigned long timeInThisState = 1000;
void setup ()
{
pinMode (CabinPin, OUTPUT);
pinMode (RCSPin, OUTPUT);
pinMode (ShuttlebayPin, OUTPUT);
pinMode (NavigationPin, OUTPUT);
pinMode (StrobesPin, OUTPUT);
pinMode (TorpedoPin, OUTPUT);
pinMode (NavigationPin, OUTPUT);
// set up faders, flashers
impulseredFader.begin ();
impulseredFader.begin ();
deflectororangeFader.begin ();
deflectorblueFader.begin ();
nacellsvioletFader.begin ();
nacellsblueFader.begin ();
strobes.begin ();
navigation.begin ();
} // end of setup
void doStateChange ()
{
lastStateChange = millis (); // when we last changed states
timeInThisState = 1000; // default one second between states
switch (state)
{
case initialState:
state = wantCabin;
break;
case wantCabin:
digitalWrite (CabinPin, HIGH);
state = wantRCS;
break;
case wantRCS:
digitalWrite (RCSPin, HIGH);
state = wantDeflectororangeon;
break;
case wantDeflectororangeon:
deflectororangeFader.on ();
state = wantDeflectorblueon;
break;
case wantDeflectorblueon:
deflectorblueFader.off();
state = wantNacellsvioleton;
break;
case wantNacellsvioleton:
nacellsvioletFader.on();
state = wantImpulseorangeon;
break;
case wantImpulseorangeon:
impulseorangeFader.on();
state = wantShuttleBay;
break;
case wantShuttleBay:
digitalWrite (ShuttlebayPin, HIGH);
state = wantStrobes;
break;
case wantStrobes:
strobes.on();
state = wantNavigation;
break;
case wantNavigation:
navigation.on();
state = wantTorpedo;
break;
case wantTorpedo:
digitalWrite (TorpedoPin, HIGH);
timeInThisState = 5000; // no rush
// what next?
break;
} // end of switch on state
} // end of doStateChange
void loop ()
{
if (millis () - lastStateChange >= timeInThisState)
doStateChange ();
// update faders, flashers
impulseorangeFader.update ();
impulseredFader.update ();
deflectororangeFader.update ();
deflectorblueFader.update ();
nacellsvioletFader.update ();
nacellsblueFader.update ();
navigation.update ();
strobes.update ();
// other stuff here like testing switches
} // end of loop
The notes in the want list are there to help me keep organised, so pay them little mind.