Last active
February 8, 2019 16:28
-
-
Save gleicon/9cd06a589bfd308440230b8aa00eea78 to your computer and use it in GitHub Desktop.
arduino robot brain for gabi
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
// Reference: This list was adapted from the table located here: | |
// http://www.phy.mtu.edu/~suits/notefreqs.html | |
const float note_C0 = 16.35; //C0 | |
const float note_Db0 = 17.32; //C#0/Db0 | |
const float note_D0 = 18.35; //D0 | |
const float note_Eb0 = 19.45; //D#0/Eb0 | |
const float note_E0 = 20.6; //E0 | |
const float note_F0 = 21.83; //F0 | |
const float note_Gb0 = 23.12; //F#0/Gb0 | |
const float note_G0 = 24.5; //G0 | |
const float note_Ab0 = 25.96; //G#0/Ab0 | |
const float note_A0 = 27.5; //A0 | |
const float note_Bb0 = 29.14; //A#0/Bb0 | |
const float note_B0 = 30.87; //B0 | |
const float note_C1 = 32.7; //C1 | |
const float note_Db1 = 34.65; //C#1/Db1 | |
const float note_D1 = 36.71; //D1 | |
const float note_Eb1 = 38.89; //D#1/Eb1 | |
const float note_E1 = 41.2; //E1 | |
const float note_F1 = 43.65; //F1 | |
const float note_Gb1 = 46.25; //F#1/Gb1 | |
const float note_G1 = 49; //G1 | |
const float note_Ab1 = 51.91; //G#1/Ab1 | |
const float note_A1 = 55; //A1 | |
const float note_Bb1 = 58.27; //A#1/Bb1 | |
const float note_B1 = 61.74; //B1 | |
const float note_C2 = 65.41; //C2 (Middle C) | |
const float note_Db2 = 69.3; //C#2/Db2 | |
const float note_D2 = 73.42; //D2 | |
const float note_Eb2 = 77.78; //D#2/Eb2 | |
const float note_E2 = 82.41; //E2 | |
const float note_F2 = 87.31; //F2 | |
const float note_Gb2 = 92.5; //F#2/Gb2 | |
const float note_G2 = 98; //G2 | |
const float note_Ab2 = 103.83; //G#2/Ab2 | |
const float note_A2 = 110; //A2 | |
const float note_Bb2 = 116.54; //A#2/Bb2 | |
const float note_B2 = 123.47; //B2 | |
const float note_C3 = 130.81; //C3 | |
const float note_Db3 = 138.59; //C#3/Db3 | |
const float note_D3 = 146.83; //D3 | |
const float note_Eb3 = 155.56; //D#3/Eb3 | |
const float note_E3 = 164.81; //E3 | |
const float note_F3 = 174.61; //F3 | |
const float note_Gb3 = 185; //F#3/Gb3 | |
const float note_G3 = 196; //G3 | |
const float note_Ab3 = 207.65; //G#3/Ab3 | |
const float note_A3 = 220; //A3 | |
const float note_Bb3 = 233.08; //A#3/Bb3 | |
const float note_B3 = 246.94; //B3 | |
const float note_C4 = 261.63; //C4 | |
const float note_Db4 = 277.18; //C#4/Db4 | |
const float note_D4 = 293.66; //D4 | |
const float note_Eb4 = 311.13; //D#4/Eb4 | |
const float note_E4 = 329.63; //E4 | |
const float note_F4 = 349.23; //F4 | |
const float note_Gb4 = 369.99; //F#4/Gb4 | |
const float note_G4 = 392; //G4 | |
const float note_Ab4 = 415.3; //G#4/Ab4 | |
const float note_A4 = 440; //A4 | |
const float note_Bb4 = 466.16; //A#4/Bb4 | |
const float note_B4 = 493.88; //B4 | |
const float note_C5 = 523.25; //C5 | |
const float note_Db5 = 554.37; //C#5/Db5 | |
const float note_D5 = 587.33; //D5 | |
const float note_Eb5 = 622.25; //D#5/Eb5 | |
const float note_E5 = 659.26; //E5 | |
const float note_F5 = 698.46; //F5 | |
const float note_Gb5 = 739.99; //F#5/Gb5 | |
const float note_G5 = 783.99; //G5 | |
const float note_Ab5 = 830.61; //G#5/Ab5 | |
const float note_A5 = 880; //A5 | |
const float note_Bb5 = 932.33; //A#5/Bb5 | |
const float note_B5 = 987.77; //B5 | |
const float note_C6 = 1046.5; //C6 | |
const float note_Db6 = 1108.73; //C#6/Db6 | |
const float note_D6 = 1174.66; //D6 | |
const float note_Eb6 = 1244.51; //D#6/Eb6 | |
const float note_E6 = 1318.51; //E6 | |
const float note_F6 = 1396.91; //F6 | |
const float note_Gb6 = 1479.98; //F#6/Gb6 | |
const float note_G6 = 1567.98; //G6 | |
const float note_Ab6 = 1661.22; //G#6/Ab6 | |
const float note_A6 = 1760; //A6 | |
const float note_Bb6 = 1864.66; //A#6/Bb6 | |
const float note_B6 = 1975.53; //B6 | |
const float note_C7 = 2093; //C7 | |
const float note_Db7 = 2217.46; //C#7/Db7 | |
const float note_D7 = 2349.32; //D7 | |
const float note_Eb7 = 2489.02; //D#7/Eb7 | |
const float note_E7 = 2637.02; //E7 | |
const float note_F7 = 2793.83; //F7 | |
const float note_Gb7 = 2959.96; //F#7/Gb7 | |
const float note_G7 = 3135.96; //G7 | |
const float note_Ab7 = 3322.44; //G#7/Ab7 | |
const float note_A7 = 3520; //A7 | |
const float note_Bb7 = 3729.31; //A#7/Bb7 | |
const float note_B7 = 3951.07; //B7 | |
const float note_C8 = 4186.01; //C8 | |
const float note_Db8 = 4434.92; //C#8/Db8 | |
const float note_D8 = 4698.64; //D8 | |
const float note_Eb8 = 4978.03; //D#8/Eb8 | |
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
#include "musical_notes.h" | |
// GPIO | |
int PushButton = 2; | |
int soundSensor = 3; | |
int RightEye = 4; | |
int LeftEye = 5; | |
int RedLed = 8; | |
int WhiteLed = 6; | |
int YellowLed = 7; | |
int buzzer = 13; | |
typedef void (*func_type)(void); | |
func_type sound_functions[8]; //9 sound effects | |
void setup() { | |
pinMode (soundSensor, INPUT); | |
pinMode (PushButton, INPUT); | |
pinMode (RightEye, OUTPUT); | |
pinMode (LeftEye, OUTPUT); | |
pinMode (RedLed, OUTPUT); | |
pinMode (YellowLed, OUTPUT); | |
pinMode (WhiteLed, OUTPUT); | |
pinMode(buzzer, OUTPUT); // initialize digital pin 13 as an output. | |
digitalWrite(buzzer, HIGH); | |
randomSeed(analogRead(0)); | |
sound_functions[0]=squeak; | |
sound_functions[1]=catcall; | |
sound_functions[2]=ohhh; | |
sound_functions[3]=laugh; | |
sound_functions[4]=closeEncounters; | |
sound_functions[5]=laugh2; | |
sound_functions[6]=waka; | |
sound_functions[7]=r2D2; | |
sound_functions[8]=ariel; | |
} | |
void loop() { | |
int statusSensor = digitalRead (soundSensor); | |
int buttonState = digitalRead(PushButton); | |
if (buttonState == HIGH) { | |
sound_functions[random(9)](); | |
digitalWrite(RedLed, HIGH); | |
delay(100); | |
digitalWrite(RedLed, LOW); | |
delay(100); | |
digitalWrite(WhiteLed, HIGH); | |
delay(100); | |
digitalWrite(WhiteLed, LOW); | |
delay(100); | |
digitalWrite(YellowLed, HIGH); | |
delay(100); | |
digitalWrite(YellowLed, LOW); | |
} | |
if (statusSensor == 1){ | |
digitalWrite(RightEye, HIGH); | |
delay(200); | |
digitalWrite(LeftEye, HIGH); | |
} else { | |
digitalWrite(RightEye, LOW); | |
delay(200); | |
digitalWrite(LeftEye, LOW); | |
} | |
} | |
void beep (int buzzer, float noteFrequency, long noteDuration) | |
{ | |
int x; | |
// Convert the frequency to microseconds | |
float microsecondsPerWave = 1000000/noteFrequency; | |
// Calculate how many HIGH/LOW cycles there are per millisecond | |
float millisecondsPerCycle = 1000/(microsecondsPerWave * 2); | |
// Multiply noteDuration * number or cycles per millisecond | |
float loopTime = noteDuration * millisecondsPerCycle; | |
// Play the note for the calculated loopTime. | |
for (x=0;x<loopTime;x++) | |
{ | |
digitalWrite(buzzer,HIGH); | |
delayMicroseconds(microsecondsPerWave); | |
digitalWrite(buzzer,LOW); | |
delayMicroseconds(microsecondsPerWave); | |
} | |
} | |
void scale() | |
{ | |
beep(buzzer, note_C7,500); //C: play the note C for 500ms | |
beep(buzzer, note_D7,500); //D | |
beep(buzzer, note_E7,500); //E | |
beep(buzzer, note_F7,500); //F | |
beep(buzzer, note_G7,500); //G | |
beep(buzzer, note_A7,500); //A | |
beep(buzzer, note_B7,500); //B | |
beep(buzzer, note_C8,500); //C | |
} | |
void r2D2(){ | |
beep(buzzer, note_A7,100); //A | |
beep(buzzer, note_G7,100); //G | |
beep(buzzer, note_E7,100); //E | |
beep(buzzer, note_C7,100); //C | |
beep(buzzer, note_D7,100); //D | |
beep(buzzer, note_B7,100); //B | |
beep(buzzer, note_F7,100); //F | |
beep(buzzer, note_C8,100); //C | |
beep(buzzer, note_A7,100); //A | |
beep(buzzer, note_G7,100); //G | |
beep(buzzer, note_E7,100); //E | |
beep(buzzer, note_C7,100); //C | |
beep(buzzer, note_D7,100); //D | |
beep(buzzer, note_B7,100); //B | |
beep(buzzer, note_F7,100); //F | |
beep(buzzer, note_C8,100); //C | |
} | |
void closeEncounters() { | |
beep(buzzer, note_Bb5,300); //B b | |
delay(50); | |
beep(buzzer, note_C6,300); //C | |
delay(50); | |
beep(buzzer, note_Ab5,300); //A b | |
delay(50); | |
beep(buzzer, note_Ab4,300); //A b | |
delay(50); | |
beep(buzzer, note_Eb5,500); //E b | |
delay(500); | |
beep(buzzer, note_Bb4,300); //B b | |
delay(100); | |
beep(buzzer, note_C5,300); //C | |
delay(100); | |
beep(buzzer, note_Ab4,300); //A b | |
delay(100); | |
beep(buzzer, note_Ab3,300); //A b | |
delay(100); | |
beep(buzzer, note_Eb4,500); //E b | |
delay(500); | |
beep(buzzer, note_Bb3,300); //B b | |
delay(200); | |
beep(buzzer, note_C4,300); //C | |
delay(200); | |
beep(buzzer, note_Ab3,300); //A b | |
delay(500); | |
beep(buzzer, note_Ab2,300); //A b | |
delay(550); | |
beep(buzzer, note_Eb3,500); //E b | |
} | |
void ariel() { | |
beep(buzzer, note_C6,300); //C | |
delay(50); | |
beep(buzzer, note_D6,300); //D | |
delay(50); | |
beep(buzzer, note_Eb6,600); //D# | |
delay(250); | |
beep(buzzer, note_D6,300); //D | |
delay(50); | |
beep(buzzer, note_Eb6,300); //D# | |
delay(50); | |
beep(buzzer, note_F6,600); //F | |
delay(250); | |
beep(buzzer, note_C6,300); //C | |
delay(50); | |
beep(buzzer, note_D6,300); //D | |
delay(50); | |
beep(buzzer, note_Eb6,500); //D# | |
delay(50); | |
beep(buzzer, note_D6,300); //D | |
delay(50); | |
beep(buzzer, note_Eb6,300); //D# | |
delay(50); | |
beep(buzzer, note_D6,300); //D | |
delay(50); | |
beep(buzzer, note_Eb6,300); //D# | |
delay(50); | |
beep(buzzer, note_F6,600); //F | |
delay(50); | |
} | |
void laugh2() { | |
beep(buzzer, note_C6,200); //C | |
beep(buzzer, note_E6,200); //E | |
beep(buzzer, note_G6,200); //G | |
beep(buzzer, note_C7,200); //C | |
beep(buzzer, note_C6,200); //C | |
delay(50); | |
beep(buzzer, note_C6,200); //C | |
beep(buzzer, note_E6,200); //E | |
beep(buzzer, note_G6,200); //G | |
beep(buzzer, note_C7,200); //C | |
beep(buzzer, note_C6,200); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
delay(50); | |
beep(buzzer, note_C6,50); //C | |
} | |
void squeak() { | |
for (int i=100; i<5000; i=i*1.45) { | |
beep(buzzer,i,60); | |
} | |
delay(10); | |
for (int i=100; i<6000; i=i*1.5) { | |
beep(buzzer,i,20); | |
} | |
} | |
void waka() { | |
for (int i=1000; i<3000; i=i*1.05) { | |
beep(buzzer,i,10); | |
} | |
delay(100); | |
for (int i=2000; i>1000; i=i*.95) { | |
beep(buzzer,i,10); | |
} | |
for (int i=1000; i<3000; i=i*1.05) { | |
beep(buzzer,i,10); | |
} | |
delay(100); | |
for (int i=2000; i>1000; i=i*.95) { | |
beep(buzzer,i,10); | |
} | |
for (int i=1000; i<3000; i=i*1.05) { | |
beep(buzzer,i,10); | |
} | |
delay(100); | |
for (int i=2000; i>1000; i=i*.95) { | |
beep(buzzer,i,10); | |
} | |
for (int i=1000; i<3000; i=i*1.05) { | |
beep(buzzer,i,10); | |
} | |
delay(100); | |
for (int i=2000; i>1000; i=i*.95) { | |
beep(buzzer,i,10); | |
} | |
} | |
void catcall() { | |
for (int i=1000; i<5000; i=i*1.05) { | |
beep(buzzer,i,10); | |
} | |
delay(300); | |
for (int i=1000; i<3000; i=i*1.03) { | |
beep(buzzer,i,10); | |
} | |
for (int i=3000; i>1000; i=i*.97) { | |
beep(buzzer,i,10); | |
} | |
} | |
void ohhh() { | |
for (int i=1000; i<2000; i=i*1.02) { | |
beep(buzzer,i,10); | |
} | |
for (int i=2000; i>1000; i=i*.98) { | |
beep(buzzer,i,10); | |
} | |
} | |
void uhoh() { | |
for (int i=1000; i<1244; i=i*1.01) { | |
beep(buzzer,i,30); | |
} | |
delay(200); | |
for (int i=1244; i>1108; i=i*.99) { | |
beep(buzzer,i,30); | |
} | |
} | |
void laugh() { | |
for (int i=1000; i<2000; i=i*1.10) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i>500; i=i*.90) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i<2000; i=i*1.10) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i>500; i=i*.90) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i<2000; i=i*1.10) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i>500; i=i*.90) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i<2000; i=i*1.10) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
for (int i=1000; i>500; i=i*.90) { | |
beep(buzzer,i,10); | |
} | |
delay(50); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment