Created
October 19, 2021 19:06
-
-
Save billykwok/61dcaa9784ef4ec197cce8056bc5f4a5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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