Clapping music with Arduino

From XPUB & Lens-Based wiki

This exercise relies on the following topics in C:

  • variable types (int, char)
  • character arrays (strings)
  • loops
  • nested loops

Hello world.c

Arduino is C!

#include <stdio.h>

main ()
{
  printf("hello world\n");
}

Blink music

void setup()   {                
  pinMode(8, OUTPUT);
  for (int i=0; i<1000; i++) {
    digitalWrite(8, HIGH);
    delay(1);
    digitalWrite(8, LOW);
    delay(1);
  }
}

void loop () {}


change the argument to the delay...

for my refined control, try delayMicroseconds

void setup()   {                
  int x;
  // initialize the digital pin as an output:
  pinMode(8, OUTPUT);
  for (int i=0; i<1000; i++) {
    digitalWrite(8, HIGH);
    delayMicroseconds(250);
    digitalWrite(8, LOW);
    delayMicroseconds(250);
  }
}

tone

void setup() {
  tone(8, 500, 100);
  delay(100);
  tone(8, 600, 100);
  delay(100);
  tone(8, 700, 100);
  delay(100);
  tone(8, 800, 100);
  delay(100);
  tone(8, 900, 100);
  delay(100);
  
}

void loop() {}


Clapping music.c

Now, using a C string with the Clapping music pattern.

int speakerPin = 8;
int thedelay = 100;

// char keycode = 'x';
char pat[] = "x xx xxx xxxx xxxxx ";
int patlen = strlen(pat);
 
void setup()
{
}
 
void loop ()
{
    int i = 0;
    
    while (i<patlen) {
        if (pat[i] == 'x') tone(speakerPin, 400, 10);
        delay(thedelay);
        i = i+1;
    }

    // can be written in "shorthand" using the for statement...
    /*
    for (i=0; i<12; i+=1) {
        if (pat[i] == 'x') tone(speakerPin, 400, 10);
        delay(thedelay);
    }
    */

    delay(thedelay*10);
}
char pat[] = "xxx xx x xx ";

void setup() {
    int patlen = strlen(pat);
  
    for (int p=0; p<patlen; p++) {
        if (pat[p] == 'x') {
            tone(8, 500, 10);
        }
        delay(100);
    }
}

void loop () {}

Tone only technically supports playing one tone at a time; how might it be possible to still produce something like the 2 parts necessary for clapping music.

Laura's Clapping Music with Arduino

Laurier's Clapping Music with Arduino and button