Make switch statement more elegant

Hello, Can someone please give me a suggestion of how to make this more elegant using as little code as possible?

  switch (level) {

    case 0:
      digitalWrite(con1,  LOW);
      digitalWrite(con2,  LOW);
      digitalWrite(con3,  LOW);
      digitalWrite(con4,  LOW);
      digitalWrite(con5,  LOW);
      digitalWrite(con6,  LOW);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 1:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  LOW);
      digitalWrite(con3,  LOW);
      digitalWrite(con4,  LOW);
      digitalWrite(con5,  LOW);
      digitalWrite(con6,  LOW);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 2:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  LOW);
      digitalWrite(con4,  LOW);
      digitalWrite(con5,  LOW);
      digitalWrite(con6,  LOW);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 3:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  LOW);
      digitalWrite(con5,  LOW);
      digitalWrite(con6,  LOW);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 4:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  HIGH);
      digitalWrite(con5,  LOW);
      digitalWrite(con6,  LOW);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 5:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  HIGH);
      digitalWrite(con5,  HIGH);
      digitalWrite(con6,  LOW);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 6:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  HIGH);
      digitalWrite(con5,  HIGH);
      digitalWrite(con6,  HIGH);
      digitalWrite(con7,  LOW);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 7:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  HIGH);
      digitalWrite(con5,  HIGH);
      digitalWrite(con6,  HIGH);
      digitalWrite(con7,  HIGH);
      digitalWrite(con8,  LOW);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 8:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  HIGH);
      digitalWrite(con5,  HIGH);
      digitalWrite(con6,  HIGH);
      digitalWrite(con7,  HIGH);
      digitalWrite(con8,  HIGH);
      digitalWrite(con9,  LOW);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 9:
      digitalWrite(con1,  HIGH);
      digitalWrite(con2,  HIGH);
      digitalWrite(con3,  HIGH);
      digitalWrite(con4,  HIGH);
      digitalWrite(con5,  HIGH);
      digitalWrite(con6,  HIGH);
      digitalWrite(con7,  HIGH);
      digitalWrite(con8,  HIGH);
      digitalWrite(con9,  HIGH);
      digitalWrite(con10,  LOW);
      delay(50);
      break;
    case 10:
      digitalWrite(con1,   HIGH);
      digitalWrite(con2,   HIGH);
      digitalWrite(con3,   HIGH);
      digitalWrite(con4,   HIGH);
      digitalWrite(con5,   HIGH);
      digitalWrite(con6,   HIGH);
      digitalWrite(con7,   HIGH);
      digitalWrite(con8,   HIGH);
      digitalWrite(con9,   HIGH);
      digitalWrite(con10,  HIGH);
      delay(50);
      break;

    default:
      break;

use an array and 2 for loop ?

const byte conPins[] = {con1, con2, con3, con4, con5, con6, con7, con8, con9, con10};
for (byte i=0; i<level; i++)  digitalWrite(conPins[i],  HIGH);
for (byte i=level; i<10; i++) digitalWrite(conPins[i],  LOW);
delay(50);

consider

enum { Off = HIGH, On = LOW };

byte ledPins [] = { 10, 11, 12, 13 };
#define N_LEDS    sizeof(ledPins)

void
setLeds (
    unsigned  k )
{
    for (unsigned n = 0; n < N_LEDS; n++)
        digitalWrite (ledPins [n], n < k ? On : Off);
}

// -----------------------------------------------------------------------------
unsigned k = 0;

void loop (void) {
    setLeds (k++);
    if (N_LEDS < k)
        k = 0;
    delay (1000);
}

// -----------------------------------------------------------------------------
void setup (void) {
    Serial.begin (9600);

    for (unsigned n = 0; n < N_LEDS; n++)  {
        digitalWrite (ledPins [n], Off);
        pinMode      (ledPins [n], OUTPUT);
    }
}

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.