Skip to content

Instantly share code, notes, and snippets.

@gleicon
Last active February 8, 2019 16:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gleicon/9cd06a589bfd308440230b8aa00eea78 to your computer and use it in GitHub Desktop.
Save gleicon/9cd06a589bfd308440230b8aa00eea78 to your computer and use it in GitHub Desktop.
arduino robot brain for gabi
// 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
#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