/********* Pleasedontcode.com **********
Pleasedontcode thanks you for automatic code generation! Enjoy your code!
- Terms and Conditions:
You have a non-exclusive, revocable, worldwide, royalty-free license
for personal and commercial use. Attribution is optional; modifications
are allowed, but you're responsible for code maintenance. We're not
liable for any loss or damage. For full terms,
please visit pleasedontcode.com/termsandconditions.
- Project: Control Panel
- Source Code NOT compiled for: Arduino Uno
- Source Code created on: 2025-10-27 11:44:44
********* Pleasedontcode.com **********/
/****** SYSTEM REQUIREMENTS *****/
/****** SYSTEM REQUIREMENT 1 *****/
/* realizza un contatore up/down che conta sia */
/* tramite codice gray che binario, alternandoli */
/* tramite un deviatore. Ci sono 3 pulsanti, */
/* incremento, decremento e reset */
/****** END SYSTEM REQUIREMENTS *****/
/* START CODE */
#include
// Pin definitions
const int BTN_UP = 2;
const int BTN_DOWN = 3;
const int BTN_RESET = 4;
const int SWITCH_MODE = 5;
const int LED_MSB = 6;
const int LED_LSB = 7;
// Variables
int counter = 0;
bool grayMode = false;
bool ledsActive = false;
unsigned long lastPress = 0;
const unsigned long debounceDelay = 200;
// Function prototypes
void updateLEDs();
int binaryToGray(int num);
void setup() {
// Set input pins with internal pull-up
pinMode(BTN_DOWN, INPUT_PULLUP);
pinMode(BTN_UP, INPUT_PULLUP);
pinMode(BTN_RESET, INPUT_PULLUP);
pinMode(SWITCH_MODE, INPUT_PULLUP);
// Set output pins for LEDs
pinMode(LED_MSB, OUTPUT);
pinMode(LED_LSB, OUTPUT);
// Initialize LEDs
digitalWrite(LED_MSB, LOW);
digitalWrite(LED_LSB, LOW);
}
void loop() {
// Read mode switch
grayMode = (digitalRead(SWITCH_MODE) == LOW);
// Increment button
if (digitalRead(BTN_UP) == LOW && millis() - lastPress > debounceDelay) {
counter++;
if (counter > 3) counter = 0; // Counter modulo 4
ledsActive = true;
lastPress = millis();
updateLEDs();
}
// Decrement button
if (digitalRead(BTN_DOWN) == LOW && millis() - lastPress > debounceDelay) {
counter--;
if (counter < 0) counter = 3;
ledsActive = true;
lastPress = millis();
updateLEDs();
}
// Reset button
if (digitalRead(BTN_RESET) == LOW && millis() - lastPress > debounceDelay) {
counter = 0;
ledsActive = false;
lastPress = millis();
updateLEDs();
}
}
void updateLEDs() {
if (!ledsActive) {
digitalWrite(LED_MSB, LOW);
digitalWrite(LED_LSB, LOW);
return;
}
int value = counter;
if (grayMode) {
value = binaryToGray(counter);
}
digitalWrite(LED_MSB, (value >> 1) & 1);
digitalWrite(LED_LSB, (value >> 0) & 1);
}
int binaryToGray(int num) {
return num ^ (num >> 1);
}
/* END CODE */