// This Arduino NANO code is developed by MARVIN QUIZZAGAN, NOV.12.2024. TESTED 100% WORKING
// THIS IS A SKETCH FOR MODULE_F FOR AUDIBLE SYSTEM
// CONTROLLING THE AUDIO WITH TWO DIFFERENT 9-AUDIBLE SOUNDS
// FOR DEFAULT D0 SET AND OPTIONAL D1 SET
// Define input pins, adding A6 for analog input
const int inputPins[] = {13, A0, A1, A2, A3, A4, A5, 2, 3, A6};
const int numInputs = 10;
// Define output pins, adding D0 and D1 for new control
const int outputPins[] = {12, 11, 10, 9, 8, 7, 6, 5, 4, 0, 1};
const int numOutputs = 11;
// Store the previous state of the inputs to detect edges
int prevState[] = {LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW, LOW};
// Track the most recent triggered input
int lastTriggered = -1;
void setup() {
// Set all input pins as inputs (no pull-up or pull-down resistors)
for (int i = 0; i < numInputs - 1; i++) { // Adjust for one less digital input
pinMode(inputPins[i], INPUT);
}
// Set all output pins as outputs and initialize them to LOW
for (int i = 0; i < numOutputs; i++) {
pinMode(outputPins[i], OUTPUT);
digitalWrite(outputPins[i], LOW); // Set all outputs to LOW initially
}
}
void loop() {
// Read analog input A6 and decide on D0 and D1 states
int a6Value = analogRead(A6); // Read the value from A6
if (a6Value < 512) { // Treat values lower than half-scale as low
digitalWrite(0, HIGH); // Set D0 high
digitalWrite(1, LOW); // Set D1 low
} else {
digitalWrite(0, LOW); // Set D0 low
digitalWrite(1, HIGH); // Set D1 high
}
// Check each digital input pin for changes
for (int i = 0; i < numInputs - 1; i++) { // Adjust loop for digital inputs
int currentState = digitalRead(inputPins[i]);
// Detect a rising edge (LOW to HIGH)
if (currentState == HIGH && prevState[i] == LOW) {
delay(10); // Short delay to debounce and confirm the state change
if (digitalRead(inputPins[i]) == HIGH) {
if (lastTriggered != -1 && lastTriggered != i) {
digitalWrite(outputPins[lastTriggered], LOW);
}
digitalWrite(outputPins[i], HIGH);
lastTriggered = i;
}
}
// Detect a falling edge (HIGH to LOW) on the last triggered input
if (i == lastTriggered && currentState == LOW) {
digitalWrite(outputPins[i], LOW);
lastTriggered = -1;
// Reactivate the most recent HIGH input, if available
for (int j = 0; j < numInputs - 1; j++) {
if (digitalRead(inputPins[j]) == HIGH) {
digitalWrite(outputPins[j], HIGH);
lastTriggered = j;
break;
}
}
}
prevState[i] = currentState;
}
}