5 push bottons lighting up different coolors on an 40xLED matrix.

Hi community, l have made an post awile back but l cant seem to find it. l’m trying to make an toy for my kid, with 5 pushbottons and an LED matrix. lam stuck at the programing part of the toy.

l want each botton to make the LED matrix ligth up in differnt coloors. Red, blue, green, yellow and white.

here is the error l get “expected initializer before ‘switch’

Here is the code l got so far, l’m a littel stuck how to continue from here codewise.

#include <Adafruit_NeoPixel.h>

void startShow(int i);

// Declare and initialise variable for Neopixel brightness
byte neoBright = 5;

#define BUTTON_PIN1   2    

#define BUTTON_PIN2   3
 
#define BUTTON_PIN3   4

#define BUTTON_PIN4   5

#define BUTTON_PIN5   6

#define PIXEL_PIN    10    

#define PIXEL_COUNT 40



Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
int showType = 0;

void setup() {
  pinMode(BUTTON_PIN1, INPUT_PULLUP);
  pinMode(BUTTON_PIN2, INPUT_PULLUP);
  pinMode(BUTTON_PIN3, INPUT_PULLUP);
  pinMode(BUTTON_PIN4, INPUT_PULLUP);
  pinMode(BUTTON_PIN5, INPUT_PULLUP);
  strip.begin();
  strip.setBrightness(neoBright); 
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Get current button state.
  bool newState1 = digitalRead(BUTTON_PIN1);
  bool newState2 = digitalRead(BUTTON_PIN2);
  bool newState3 = digitalRead(BUTTON_PIN3);
  bool newState4 = digitalRead(BUTTON_PIN4);
  bool newState5 = digitalRead(BUTTON_PIN5);

  if (newState1 == LOW && oldState == HIGH) {
    delay(20);
    newState1 = digitalRead(BUTTON_PIN1);
  if (newState1 == LOW) {
      showType++;
      if (showType > 9)
        showType=0;
      startShow(showType);
    }
  }
     // Set the last button state to the old state.
  oldState = newState1;


  if (newState2 == LOW && oldState == HIGH) {
    delay(20);
    newState2 = digitalRead(BUTTON_PIN2);
  if (newState2 == LOW) {
      showType++;
      if (showType > 9)
        showType=0;
      startShow(showType);
    }
  }
     // Set the last button state to the old state.
  oldState = newState2;


  if (newState3 == LOW && oldState == HIGH) {
    delay(20);
    newState3 = digitalRead(BUTTON_PIN3);
  if (newState3 == LOW) {
      showType++;
      if (showType > 9)
        showType=0;
      startShow(showType);
    }
  }
    // Set the last button state to the old state.
  oldState = newState1;
   
  if (newState4 == LOW && oldState == HIGH) {
    delay(20);
    newState4 = digitalRead(BUTTON_PIN4);
  if (newState4 == LOW) {
      showType++;
      if (showType > 9)
        showType=0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState4;

  if (newState5 == LOW && oldState == HIGH) {
    delay(20);
    newState5 = digitalRead(BUTTON_PIN5);
  if (newState5 == LOW) {
      showType++;
      if (showType > 9)
        showType=0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState5;

 void startShow(int i) 
  switch(i){
    case 0: colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
            break;
    case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Red
            break;
    case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Green
            break;
    case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
            break;
    case 4: theaterChase(strip.Color(127, 127, 127), 50); // White
            break;
    case 5: theaterChase(strip.Color(127,   0,   0), 50); // Red
            break;
    case 6: theaterChase(strip.Color(  0,   0, 127), 50); // Blue
            break;
    case 7: rainbow(20);
            break;
    case 8: rainbowCycle(20);
            break;
    case 9: theaterChaseRainbow(50);
            break;
  }
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
    strip.setPixelColor(i, c);
    strip.show();
    delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
      }
      strip.show();

      delay(wait);

      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
    return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  }
  if(WheelPos < 170) {
    WheelPos -= 85;
    return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
  WheelPos -= 170;
  return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);

Your have a mismatch of { and }. Indent your code using tools -> autoformat in the IDE and you will see

  void startShow(int i)
  switch (i)

The first line above should start at the beginning of a line. If it doesn't, your missing a } that closes the previous function (loop(). Your startShow(int i) should also be followed by a {.

You also seem to be missing a } at the end of the code.

Note:
I see that PaulRB also commented on startShow(int i) while I was editing the post to add that.

void startShow(int i)

You need an { at the end of that line.

okey, you guys got an input on how l can make different bottons ligth up different coloors on the neopixel matrix?

Yeah, we just explained them.

PS. Compared to most computer languages, English is pretty forgiving.

okey now each of the 5 bottons cycle the coolors, l want the red botton to light up the leds in red, green botton to make the leds glow green and so on…

any pointers how l can change the code to make this happen?

#include <Adafruit_NeoPixel.h>

void startShow(int i);

// Declare and initialise variable for Neopixel brightness
byte neoBright = 5;

#define BUTTON_PIN1   2

#define BUTTON_PIN2   3

#define BUTTON_PIN3   4

#define BUTTON_PIN4   5

#define BUTTON_PIN5   6

#define PIXEL_PIN    10

#define PIXEL_COUNT 40



Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
int showType = 0;

void setup() {
  pinMode(BUTTON_PIN1, INPUT_PULLUP);
  pinMode(BUTTON_PIN2, INPUT_PULLUP);
  pinMode(BUTTON_PIN3, INPUT_PULLUP);
  pinMode(BUTTON_PIN4, INPUT_PULLUP);
  pinMode(BUTTON_PIN5, INPUT_PULLUP);
  strip.begin();
  strip.setBrightness(neoBright);
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {
  // Get current button state.
  bool newState1 = digitalRead(BUTTON_PIN1);
  bool newState2 = digitalRead(BUTTON_PIN2);
  bool newState3 = digitalRead(BUTTON_PIN3);
  bool newState4 = digitalRead(BUTTON_PIN4);
  bool newState5 = digitalRead(BUTTON_PIN5);

  if (newState1 == LOW && oldState == HIGH) {
    delay(20);
    newState1 = digitalRead(BUTTON_PIN1);
    if (newState1 == LOW) {
      showType++;
      if (showType > 9)
        showType = 0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState1;


  if (newState2 == LOW && oldState == HIGH) {
    delay(20);
    newState2 = digitalRead(BUTTON_PIN2);
    if (newState2 == LOW) {
      showType++;
      if (showType > 9)
        showType = 0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState2;


  if (newState3 == LOW && oldState == HIGH) {
    delay(20);
    newState3 = digitalRead(BUTTON_PIN3);
    if (newState3 == LOW) {
      showType++;
      if (showType > 9)
        showType = 0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState1;

  if (newState4 == LOW && oldState == HIGH) {
    delay(20);
    newState4 = digitalRead(BUTTON_PIN4);
    if (newState4 == LOW) {
      showType++;
      if (showType > 9)
        showType = 0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState4;

  if (newState5 == LOW && oldState == HIGH) {
    delay(20);
    newState5 = digitalRead(BUTTON_PIN5);
    if (newState5 == LOW) {
      showType++;
      if (showType > 9)
        showType = 0;
      startShow(showType);
    }
  }
  // Set the last button state to the old state.
  oldState = newState5;
}
  void startShow(int i) {
    switch (i) {
      case 0: colorWipe(strip.Color(0, 0, 0), 50);    // Black/off
        break;
      case 1: colorWipe(strip.Color(255, 0, 0), 50);  // Red
        break;
      case 2: colorWipe(strip.Color(0, 255, 0), 50);  // Green
        break;
      case 3: colorWipe(strip.Color(0, 0, 255), 50);  // Blue
        break;
      case 4: theaterChase(strip.Color(127, 127, 127), 50); // White
        break;
      case 5: theaterChase(strip.Color(127,   0,   0), 50); // Red
        break;
      case 6: theaterChase(strip.Color(  0,   0, 127), 50); // Blue
        break;
      case 7: rainbow(20);
        break;
      case 8: rainbowCycle(20);
        break;
      case 9: theaterChaseRainbow(50);
        break;
    }
  }

  // Fill the dots one after the other with a color
  void colorWipe(uint32_t c, uint8_t wait) {
    for (uint16_t i = 0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
    }
  }

  void rainbow(uint8_t wait) {
    uint16_t i, j;

    for (j = 0; j < 256; j++) {
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel((i + j) & 255));
      }
      strip.show();
      delay(wait);
    }
  }

  // Slightly different, this makes the rainbow equally distributed throughout
  void rainbowCycle(uint8_t wait) {
    uint16_t i, j;

    for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel
      for (i = 0; i < strip.numPixels(); i++) {
        strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
      }
      strip.show();
      delay(wait);
    }
  }

  //Theatre-style crawling lights.
  void theaterChase(uint32_t c, uint8_t wait) {
    for (int j = 0; j < 10; j++) { //do 10 cycles of chasing
      for (int q = 0; q < 3; q++) {
        for (int i = 0; i < strip.numPixels(); i = i + 3) {
          strip.setPixelColor(i + q, c);  //turn every third pixel on
        }
        strip.show();

        delay(wait);

        for (int i = 0; i < strip.numPixels(); i = i + 3) {
          strip.setPixelColor(i + q, 0);      //turn every third pixel off
        }
      }
    }
  }

  //Theatre-style crawling lights with rainbow effect
  void theaterChaseRainbow(uint8_t wait) {
    for (int j = 0; j < 256; j++) {   // cycle all 256 colors in the wheel
      for (int q = 0; q < 3; q++) {
        for (int i = 0; i < strip.numPixels(); i = i + 3) {
          strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on
        }
        strip.show();

        delay(wait);

        for (int i = 0; i < strip.numPixels(); i = i + 3) {
          strip.setPixelColor(i + q, 0);      //turn every third pixel off
        }
      }
    }
  }

  // Input a value 0 to 255 to get a color value.
  // The colours are a transition r - g - b - back to r.
  uint32_t Wheel(byte WheelPos) {
    WheelPos = 255 - WheelPos;
    if (WheelPos < 85) {
      return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
    }
    if (WheelPos < 170) {
      WheelPos -= 85;
      return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
    }
    WheelPos -= 170;
    return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }