Skip to content

Instantly share code, notes, and snippets.

@billykwok
Created October 19, 2021 19:06
Show Gist options
  • Save billykwok/61dcaa9784ef4ec197cce8056bc5f4a5 to your computer and use it in GitHub Desktop.
Save billykwok/61dcaa9784ef4ec197cce8056bc5f4a5 to your computer and use it in GitHub Desktop.
#define PIN_MOTOR 9
#define PIN_PIEZO 10
#define PIN_BIT0 A0
#define PIN_BIT1 A1
#define PIN_BIT2 A2
#define PIN_BIT3 A3
#define PIN_BIT4 A4
#define PIN_BIT5 A5
const long FREQS[64] = {
65, 69, 73, 78, 82, 87, 93, 98, 104, 110, 117,
123, 131, 139, 147, 156, 165, 175, 185, 196, 208, 220,
233, 247, 262, 277, 294, 311, 330, 349, 370, 392, 415,
440, 466, 494, 523, 554, 587, 622, 659, 698, 740, 784,
831, 880, 932, 988, 1047, 1109, 1175, 1245, 1319, 1397, 1480,
1568, 1661, 1760, 1865, 1976, 2093, 2217, 2349, 2489};
bool bits[5][6] = {{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0}};
bool updated = false;
void setup() {
pinMode(PIN_BIT0, INPUT);
pinMode(PIN_BIT1, INPUT);
pinMode(PIN_BIT2, INPUT);
pinMode(PIN_BIT3, INPUT);
pinMode(PIN_BIT4, INPUT);
pinMode(PIN_BIT5, INPUT);
pinMode(PIN_MOTOR, OUTPUT);
Serial.begin(9600);
analogWrite(PIN_MOTOR, 32);
}
void loop() {
copyArray(bits[0], bits[1]);
copyArray(bits[1], bits[2]);
copyArray(bits[2], bits[3]);
copyArray(bits[3], bits[4]);
int val0 = analogRead(PIN_BIT0);
int val1 = analogRead(PIN_BIT1);
int val2 = analogRead(PIN_BIT2);
int val3 = analogRead(PIN_BIT3);
int val4 = analogRead(PIN_BIT4);
int val5 = analogRead(PIN_BIT5);
Serial.println(String(val0) + ", " + String(val1) + ", " + String(val2) +
", " + String(val3) + ", " + String(val4) + ", " +
String(val5));
bits[4][0] = val0 < 150;
bits[4][1] = val1 < 500;
bits[4][2] = val2 < 800;
bits[4][3] = val3 < 1000;
bits[4][4] = val4 < 1000;
bits[4][5] = val5 < 950;
Serial.println(String(bits[4][0]) + ", " + String(bits[4][1]) + ", " +
String(bits[4][2]) + ", " + String(bits[4][3]) + ", " +
String(bits[4][4]) + ", " + String(bits[4][5]));
for (size_t i = 0; i < 6; ++i) {
if (bits[0][i] != bits[1][i] || bits[1][i] != bits[2][i] ||
bits[2][i] != bits[3][i] || bits[3][i] != bits[4][i] ||
bits[4][i] != bits[0][i]) {
if (!updated) {
// noTone(PIN_PIEZO);
}
updated = false;
return;
}
}
if (!updated) {
int index = 0;
for (size_t i = 0; i < 6; ++i) {
if (bits[4][i]) {
index |= 1 << (5 - i);
}
}
if (index > 20) {
Serial.println("Index: " + String(index));
long freq = FREQS[index];
Serial.println("Freq: " + String(freq));
tone(PIN_PIEZO, freq, 1000);
updated = true;
}
}
}
void copyArray(bool* target, bool* source) {
for (size_t i = 0; i < 5; ++i) {
target[i] = source[i];
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment