I have a code that lights up an led on the neotrellis. I press one button to move the led right and another to move it left. My if, else if, else statements are not seeming to work correctly. When I press on of the buttons it seems to activate both one of the if statements and the else statement. here is my code
#include "Adafruit_NeoTrellis.h" //librairies
#include <BlockNot.h>
BlockNot timer(1000);
Adafruit_NeoTrellis trellis;
//define a callback for key presses
TrellisCallback blink(keyEvent evt) {
// Check is the pad pressed?
if (evt.bit.EDGE == SEESAW_KEYPAD_EDGE_RISING) {
Serial.println("BUTTON PRESS");
if (evt.bit.NUM == 12) {
if (trellis.pixels.getPixelColor(12) == 6553700) {
trellis.pixels.setPixelColor(12, 0);
trellis.pixels.setPixelColor(15, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else if (trellis.pixels.getPixelColor(13) == 6553700) {
trellis.pixels.setPixelColor(13, 0);
trellis.pixels.setPixelColor(12, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else if (trellis.pixels.getPixelColor(14) == 6553700) {
trellis.pixels.setPixelColor(14, 0);
trellis.pixels.setPixelColor(13, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else if (trellis.pixels.getPixelColor(15) == 6553700) {
trellis.pixels.setPixelColor(15, 0);
trellis.pixels.setPixelColor(14, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else {
Serial.println("MOVE ERROR");
while (1) {
delay(1000);
}
}
} else if (evt.bit.NUM == 15) {
if (trellis.pixels.getPixelColor(12) == 6553700) {
trellis.pixels.setPixelColor(12, 0);
trellis.pixels.setPixelColor(13, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else if (trellis.pixels.getPixelColor(13) == 6553700) {
trellis.pixels.setPixelColor(13, 0);
trellis.pixels.setPixelColor(14, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else if (trellis.pixels.getPixelColor(14) == 6553700) {
trellis.pixels.setPixelColor(14, 0);
trellis.pixels.setPixelColor(15, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else if (trellis.pixels.getPixelColor(15) == 6553700) {
trellis.pixels.setPixelColor(15, 0);
trellis.pixels.setPixelColor(12, 6553700);
trellis.pixels.show();
Serial.println("MOVE");
} else {
Serial.println("MOVE ERROR");
while (1) {
delay(1000);
}
}
}
} else if (evt.bit.EDGE == SEESAW_KEYPAD_EDGE_FALLING) {
// or is the pad released?
return 0;
}
}
int speedCount = 0;
void setup() {
Serial.begin(9600);
if (!trellis.begin()) {
Serial.println("Could not start trellis, check wiring?");
while (1) delay(1);
} else {
Serial.println("NeoPixel Trellis started");
}
//activate all keys and set callbacks
for (int i = 0; i < NEO_TRELLIS_NUM_KEYS; i++) {
trellis.activateKey(i, SEESAW_KEYPAD_EDGE_RISING);
trellis.activateKey(i, SEESAW_KEYPAD_EDGE_FALLING);
trellis.registerCallback(i, blink);
}
//do a little animation to show we're on
for (uint16_t i = 0; i < trellis.pixels.numPixels(); i++) {
trellis.pixels.setPixelColor(i, Wheel(map(i, 0, trellis.pixels.numPixels(), 0, 255)));
trellis.pixels.show();
delay(50);
}
for (uint16_t i = 0; i < trellis.pixels.numPixels(); i++) {
trellis.pixels.setPixelColor(i, 0x000000);
trellis.pixels.show();
delay(50);
}
trellis.pixels.setPixelColor(12, 100, 0, 100);
trellis.pixels.show();
timer.start(WITH_RESET);
}
void loop() {
// put your main code here, to run repeatedly:
trellis.read();
}
uint32_t Wheel(byte WheelPos) {
if (WheelPos < 85) {
return trellis.pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return trellis.pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return trellis.pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
return 0;
}
here is my serial output
BUTTON PRESS
MOVE
MOVE ERROR
the serial output shows messages from both the if statement and the else. shouldn't it only do one?