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.

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 () {}
//pattern
String pat = "XXX XX X XX ";
 
void setup() {  
}
 
void loop() {   
    
      //get the length of the pattern
      int patlen = pat.length();
 
      //loop
      for (int p=0; p<patlen; p++) {
        //if there's a X, play
        if(pat.charAt(p) == 'X'){
           tone(13, 800, 10);
        }
        delay(150);
      }
 
}

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