take a look at this
const byte pinsLed [] = { 10, 11, 12, 13 };
enum { Off = HIGH, On = LOW };
enum { None, Flash, Left, Right };
int mode = None;
unsigned idx;
// -----------------------------------------------------------------------------
void
ledsOnOff (
byte state)
{
for (unsigned n=0; n < sizeof(pinsLed); n++)
digitalWrite (pinsLed [n], state);
}
// -------------------------------------
void
ledsFlash (void)
{
for (unsigned n=0; n < sizeof(pinsLed); n++)
digitalWrite (pinsLed [n], ! digitalRead (pinsLed [n]));
}
// -------------------------------------
void
ledsSeq (
int dir )
{
if (Left == dir) {
for (unsigned n = 0; n < sizeof(pinsLed); n++) {
if (n <= idx)
digitalWrite (pinsLed [n], On);
else
digitalWrite (pinsLed [n], Off);
}
if (sizeof(pinsLed) <= ++idx)
idx = 0;
}
else if (Right == dir) {
for (unsigned n = 0; n < sizeof(pinsLed); n++) {
if (n >= idx)
digitalWrite (pinsLed [n], On);
else
digitalWrite (pinsLed [n], Off);
}
if (0 == idx--)
idx = sizeof(pinsLed)-1;
}
Serial.print (sizeof(pinsLed));
Serial.print (" ");
Serial.println (idx);
}
// -----------------------------------------------------------------------------
void
loop (void)
{
if (Serial.available ()) {
char c = Serial.read ();
switch (c) {
case '0':
ledsOnOff (Off);
mode = None;
break;
case '1':
ledsOnOff (On);
mode = None;
break;
case 'f':
mode = Flash;
break;
case 'l':
mode = Left;
break;
case 'r':
mode = Right;
break;
}
}
static unsigned long msecLst;
unsigned long msec = millis ();
#define Period 250
if ( (msec - msecLst) > Period) {
msecLst = msec;
switch (mode) {
case Right:
case Left:
ledsSeq (mode);
break;
case Flash:
ledsFlash ();
break;
}
}
}
// -----------------------------------------------------------------------------
void
setup (void)
{
Serial.begin (9600);
for (unsigned n=0; n < sizeof(pinsLed); n++) {
digitalWrite (pinsLed [n], Off);
pinMode (pinsLed [n], OUTPUT);
}
}