9. Embedded programming (Obtainium Music)¶
This week I worked on reading the ATTiny44 data sheet and programmed my board (using C++) to play music when the button was touched…
Research¶
Obtainium: Material used to create, that wasn’t bought new, but obtained in other ways, such as second-hand, dumpster diving, chance findings or donations. Obtainium users create from things that others throw away, I call what I did for this project Obtainium Music.
Useful links¶
Code Example¶
// constants won't change. They're used here to // set pin numbers: const int buttonPin = 3; // the number of the pushbutton pin const int ledPin = 7; // the number of the LED pin // variables will change: int buttonState = 0; // variable for reading the pushbutton status int speakerOut = 2; // The number of the Speaker byte names[] = {'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C'}; int tones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956}; byte melody[] = "2d2a1f2c2d2a2d2c2f2d2a2c2d2a1f2c2d2a2a2g2p8p8p8p"; // count length: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 // 10 20 30 int count = 0; int count2 = 0; int count3 = 0; int MAX_COUNT = 24; int statePin = LOW; void setup() { // initialize the LED pin as an output: pinMode(ledPin, OUTPUT); // initialize the pushbutton pin as an input: pinMode(buttonPin, INPUT); } void loop() { // read the state of the pushbutton value: buttonState = digitalRead(buttonPin); // check if the pushbutton is pressed. // if it is, the buttonState is HIGH: if (buttonState == HIGH) { // turn LED on: digitalWrite(ledPin, HIGH); } else { // turn LED off: digitalWrite(ledPin, LOW); delay(250); analogWrite(speakerOut, 0); for (count = 0; count < MAX_COUNT; count++) { statePin = !statePin; digitalWrite(ledPin, statePin); for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) { for (count2=0;count2<8;count2++) { if (names[count2] == melody[count*2 + 1]) { analogWrite(speakerOut,500); delayMicroseconds(tones[count2]); analogWrite(speakerOut, 0); delayMicroseconds(tones[count2]); } if (melody[count*2 + 1] == 'p') { // make a pause of a certain size analogWrite(speakerOut, 0); delayMicroseconds(500); } } } } } }
Gallery¶
For this week assignment, I used our Hello world modified board ( with the added button and Led) and attached a buzzer (that belonged to one of my Daughters destroyed toys) to the pin 11. The pin 11 according to the ATTiny44 Datasheet corresponds to the Port A driver 2 of the Microcontroller. So, I modified the program used in the week 7 assignment to play a series of tones whenever the button was pressed.
By adding/recovering a component from a destroyed toy, that otherwise would have been discarded in the trash, we gave new life to this Obtainium Music Generator…
From Youtube¶
Playing Obtainium Music....