/*
* Erik Hansen
* February 26, 2023
* Lab 3 Project
*/
// Binary Display Class
class BinaryDisplay {
// Init values
int _pin1, _pin2, _pin4, _pin8;
public:
//
void setup(int pin1, int pin2, int pin4, int pin8) {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin4, OUTPUT);
pinMode(pin8, OUTPUT);
_pin1 = pin1;
_pin2 = pin2;
_pin4 = pin4;
_pin8 = pin8;
}
//
void display(int iValue) {
digitalWrite(_pin1, (iValue & 1) ? HIGH : LOW);
digitalWrite(_pin2, (iValue & 2) ? HIGH : LOW);
digitalWrite(_pin4, (iValue & 4) ? HIGH : LOW);
digitalWrite(_pin8, (iValue & 8) ? HIGH : LOW);
}
};
// Declaring Globals
BinaryDisplay bd; // Binary Display
#define BUTTON_PIN 9 // Pause button
const int rgbs[] = {6,7,8}; // RGB LED pins
int Counter01 = 0; // 1 Value Counter
int Counter16 = 0; // 16 Value Counter
bool paused = false; // Button state (pause/unpaused)
void setup() {
bd.setup(5,4,3,2); // Green = 1, Yellow = 2, Blue = 4, Red = 8
pinMode(rgbs[0], OUTPUT); // Red value
pinMode(rgbs[1], OUTPUT); // Green value
pinMode(rgbs[2], OUTPUT); // Blue value
pinMode(BUTTON_PIN, INPUT_PULLUP); // Pause button
}
void loop() {
// Check pause state
if (digitalRead(BUTTON_PIN) == LOW) {
paused = !paused;
delay(250); // Debounce
}
if (!paused) {
// Increment Counter01 each increment
Counter01++;
// Check if Counter01 value is greater than 16
if (Counter01 > 16) {
// If greater, reset Counter01 and increment Counter16
Counter01 = 0;
Counter16++;
// Check if Counter16 is greater than 3
if (Counter16 > 3) {
// If greater, reset Counter16
Counter16 = 0;
}
}
// Run display to display current count in binary
bd.display(Counter01);
// Switch case to check the current value of Counter16
switch (Counter16) {
case 1: // Value of 16
analogWrite(rgbs[0], 255);
analogWrite(rgbs[1], 0);
analogWrite(rgbs[2], 0);
break;
case 2: // Value of 32
analogWrite(rgbs[0], 0);
analogWrite(rgbs[1], 255);
analogWrite(rgbs[2], 0);
break;
case 3: // Value of 48
analogWrite(rgbs[0], 0);
analogWrite(rgbs[1], 0);
analogWrite(rgbs[2], 255);
break;
default: // Default value (>16 and <64)
analogWrite(rgbs[0], 0);
analogWrite(rgbs[1], 0);
analogWrite(rgbs[2], 0);
}
}
delay(500);
}