#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_NeoPixel.h>
#define RING_PIN 5
#define NUM_PIXELS 16
const int NUM_BTNS = 8;
const int NUM_LEDS = 4;
// Button pins
//const int TRACK1BUTTON = 13;
//const int TRACK2BUTTON = 12;
//const int TRACK3BUTTON = 11;
//const int TRACK4BUTTON = 10;
//const int MODEBUTTON = 9;
//const int CLEARBUTTON = 8;
//const int STOPBUTTON = 7;
//const int RECORDBUTTON = 6;
const int BTN_PINS[] = {
13, 12, 11, 10, 9, 8, 7, 6
};
// LED pins
const int RED_LED_PINS[] = {22, 24, 26, 28};
const int GRN_LED_PINS[] = {23, 25, 27, 29};
bool isPlayback = false;
bool isRecord = false;
int mode = 0;
int btnState[NUM_BTNS];
int oldBtnState[NUM_BTNS];
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
Adafruit_NeoPixel ring(NUM_PIXELS, RING_PIN, NEO_GRB + NEO_KHZ800);
// function returns which button was pressed, or 0 if none
int checkButtons() {
int btnPressed = 0;
for (int i = 0; i < NUM_BTNS; i++) {
btnState[i] = digitalRead(BTN_PINS[i]); // check each button
if (btnState[i] != oldBtnState[i]) { // if it changed
oldBtnState[i] = btnState[i]; // remember state for next time
if (btnState[i] == 0) { // was just pressed
btnPressed = i + 1;
}
delay(20); // debounce
}
}
return btnPressed;
}
void setup() {
Serial.begin(115200);
Wire.begin();
ring.begin();
for (int i = 0; i < NUM_PIXELS; i++) {
ring.setPixelColor(i, ring.Color(0, 255, 0)); // Green
}
ring.show();
//oled.setRotation(2);
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED NOT FOUND!");
for (;;);
}
oled.setTextSize(1);
oled.setTextColor(SSD1306_WHITE, SSD1306_BLACK);
for (int i = 0; i < NUM_LEDS; i++) {
pinMode(RED_LED_PINS[i], OUTPUT);
pinMode(GRN_LED_PINS[i], OUTPUT);
digitalWrite(RED_LED_PINS[0], HIGH);
}
for (int i = 0; i < NUM_BTNS; i ++) {
pinMode(BTN_PINS[i], INPUT_PULLUP);
}
oled.clearDisplay();
oled.setTextSize(2);
oled.setCursor(0, 0);
oled.print("Mode: ");
oled.display();
}
void loop() {
int btnNumber = checkButtons();
if (btnNumber) {
// if a button was pressed turn all the red LEDs off, green LEDs on
for (int i = 0; i < NUM_LEDS; i++) {
digitalWrite(RED_LED_PINS[i], LOW);
digitalWrite(GRN_LED_PINS[i], LOW);
}
if (btnNumber == 1) {
digitalWrite(RED_LED_PINS[0], HIGH);
digitalWrite(GRN_LED_PINS[0], LOW);
} else if (btnNumber == 2) {
digitalWrite(RED_LED_PINS[1], HIGH);
digitalWrite(GRN_LED_PINS[1], LOW);
} else if (btnNumber == 3) {
digitalWrite(RED_LED_PINS[2], HIGH);
digitalWrite(GRN_LED_PINS[2], LOW);
} else if (btnNumber == 4) {
digitalWrite(RED_LED_PINS[3], HIGH);
digitalWrite(GRN_LED_PINS[3], LOW);
} else if (btnNumber == 5) {
mode++;
if (mode == 2) mode = 0;
for (int i = 0; i < NUM_LEDS; i++) {
digitalWrite(RED_LED_PINS[i], LOW);
digitalWrite(GRN_LED_PINS[i], LOW);
}
//}
//}
if (mode == 0) {
oled.setCursor(65, 0);
oled.print("PB ");
oled.display();
//for (int i = 0; i < NUM_LEDS; i++) {
//digitalWrite(GRN_LED_PINS[i], HIGH);
//}
for (int i = 0; i < NUM_PIXELS; i++) {
ring.setPixelColor(i, ring.Color(0, 255, 0)); // Green
}
ring.show();
}
if (mode == 1) {
oled.setCursor(65, 0);
oled.print("REC");
oled.display();
//for (int i = 0; i < NUM_LEDS; i++) {
//digitalWrite(RED_LED_PINS[i], HIGH);
//}
for (int i = 0; i < NUM_PIXELS; i++) {
ring.setPixelColor(i, ring.Color(255, 0, 0)); // Green
}
ring.show();
}
}
}
}
/*
for (int i = 0; i < NUM_LEDS; i++) {
digitalWrite(GRN_LED_PINS[i], HIGH);
}
*/
REC
STOP
CLR
MODE
TRK1
TRK2
TRK3
TRK4