Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Elektronisch pianotoetsenbord met vooraf ingestelde nummers

Componenten en benodigdheden

Arduino UNO
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
× 1
SparkFun Drukknopschakelaar 12 mm
× 8
Weerstand 220 ohm
× 4
Weerstand 560 ohm
× 1
Weerstand 1k ohm
× 1
Weerstand 4,7K ohm
× 1
Weerstand 10k ohm
× 3
Weerstand 1M ohm
× 1
Zoemer
× 1
LED (generiek)
× 1
Single Turn Potentiometer - 10k ohm
× 1
Jumperdraden (algemeen)
× 1
Broodplank (algemeen)
× 1

Over dit project

Inleiding

Om te beginnen moet ik je vertellen dat ik helemaal nieuw ben in de wereld van elektronica. Ik heb een behoorlijke achtergrond in coderen, wat helpt, maar ik sta altijd open voor nieuwe ideeën en suggesties voor elk van de projecten die ik heb gemaakt.

Onlangs heb ik meer geleerd over de piëzo-zoemer en de bijbehorende codering, en dit is mijn creatie op basis van wat ik tot nu toe heb geleerd. Er is genoeg ruimte voor uitbreiding met nieuwe functies of schakelaars, wat ik later van plan ben te doen, maar voor nu is het op naar de volgende uitdaging!

Hieronder is een video te zien van hoe het apparaat werkt, inclusief het menu met vooraf ingestelde nummers. Ik geef toe, technisch gezien zijn nummer 4 en 5 hetzelfde, maar wat kan ik zeggen, ik heb de drang om grotere en betere dingen te maken en het schrijven van de muziekcode voor meer nummers was daar niet een van! De basiscodering voor zowel de hoofdloops als de afzonderlijke liedloops zijn vrij eenvoudig aan te passen aan je eigen ideeën, dus voel je vrij om te veranderen zoals je wilt.

Zie het in actie!

Hoe de hardware in te stellen

De pianotoetsen...

De pianotoetsschakelaars waren verbonden met behulp van een weerstandsladder. De weerstanden worden in sequentiële volgorde geplaatst en verbinden elke schakelaar met de voeding. Voor mijn project heb ik ervoor gekozen om (in ohm) 1M, 10k, 4.7K, 1K, 560 en 220 te gebruiken.  De eerste pianoschakelaar (aan de linkerkant) is aangesloten op de voeding, en ook op de volgende schakelaar in het circuit. De tweede schakelaar is verbonden met de kleinste weerstand en elke schakelaar daarna is verbonden met de volgende grootste weerstand in de serie. De laatste schakelaar aardt de verbinding via een weerstand van 10k ohm en verbindt ook alle 7 schakelaars met de "analoge in" pin A0 op de Arduino. De hoofdschets definieert welke muzieknootfrequenties bij elke pianotoets horen. Voor dit project heb ik C4, D4, E4, F4, G4, A4 en B4 gebruikt, waarbij C4 de meest linkse schakelaar is. Wijzig de frequentiewaarden of voeg extra schakelaars toe om uw eigen project volledig aan te passen!

Het LCD-scherm...

Sluit de LCD-pinnen aan volgens onderstaand schakelschema. Sluit LCD-pin 3 aan op de potentiometer voor contrastregeling van het scherm. De buitenste pinnen van de potentiometer zijn verbonden met stroom en aarde om dit circuit te voltooien. LCD pin 15 is via een 220 ohm weerstand op de voeding aangesloten. Als een van deze pinnen in uw eigen project verandert, moet u de code dienovereenkomstig bijwerken.

De menuschakelaar...

Sluit de menuschakelaar aan op de voeding en aard deze via een weerstand van 10K ohm. Deze schakelaar moet ook worden aangesloten op pin 7 op de Arduino, zodat je hem via codering kunt bedienen.

De LED...

De LED wordt gebruikt om aan te geven wanneer u zich in de "menumodus" bevindt en de pianotoetsen zijn uitgeschakeld. Het LED-lampje gaat branden zodra de menuschakelaar wordt ingedrukt. Sluit de anode (positief) van de LED aan op pin 6 van de Arduino en aard de LED via een weerstand van 220 ohm.

De piëzo-zoemer...

Om de piëzo-zoemer te integreren, sluit u eenvoudig het ene uiteinde aan op de Arduino-pin 8 en de andere kant op aarde via een weerstand van 220 ohm. De "toon"-functie in de code zoekt naar deze pin om de aangeroepen noot te spelen.

Hoe de code werkt

De opzet...

  • De schets begint met het importeren van de bibliotheken "LiquidCrystal.h" en "pitches.h", zodat we later in de code naar verschillende items kunnen verwijzen
  • Vervolgens wordt de code ingesteld door een naam voor de menuschakelaar te definiëren, te bepalen welke pinnen ingangen en uitgangen zijn, en de frequentiewaarden in te stellen voor elk van de 7 pianotoetsen
  • Er is een nieuw tabblad gemaakt voor elk afzonderlijk nummer in een poging om mijn code enigszins georganiseerd en gemakkelijker te begrijpen te houden, en om later uit te breiden. Als je meer nummers wilt verwijderen of toevoegen, zorg er dan voor dat je ook de code in de hoofdschets van het "Elektronische toetsenbord" wijzigt.

De hoofdlus...

  • Het toetsenbord begint met de LED uit en alle pianotoetsen actief
  • Zodra de lus detecteert dat de menuknop is ingedrukt, worden de pianotoetsen uitgeschakeld en gaat de LED branden om aan te geven dat u zich in de "menumodus" bevindt

Toegang tot het menu...

  • Druk op de menuknop om door de huidige nummers te bladeren en druk op een van de pianotoetsen om het nummer op het LCD-scherm af te spelen
  • Het LCD-scherm laat zien welk nummer momenteel wordt afgespeeld en keert vervolgens terug naar hetzelfde punt in het menu zodra het nummer is afgespeeld. Van daaruit kun je opnieuw afspelen of doorgaan in de lijst met beschikbare nummers.
  • Dubbelklikken op de menuknop start het menu opnieuw vanaf het begin
  • Om terug te keren naar het gebruik van de pianotoetsen, bladert u door de rest van de nummers in het menu. Zodra het LCD-scherm leeg is en de LED uit is, werken de pianotoetsen weer.

Code

  • Elektronisch toetsenbord
  • Lied1
  • Lied2
  • Lied3
  • Lied4
  • Lied5
  • pitches.h
Elektronisch toetsenbordArduino
De hoofdcode
// LCD-scherm, schakelaar &LED-instelling#include #include "pitches.h"LiquidCrystal lcd (12, 11, 5, 4, 3, 2);const int LCDswitchPin =7; // definieer menu/LCD-schakelaarnaamint LCDswitchState =0; // zet menu/LCD-schakelstatus op uit/lowint prevLCDswitchState =0;int blueLED =6;int LCDswitchCounter =0; // teller voor het aantal keer dat op de menuknop is gedrukt // (deze code telt het aantal indrukken van de menuknop, geeft ze weer op uw computer, // en begint vanaf nul na het beëindigen van "menumodus". heeft momenteel geen ander effect // op deze schets , maar is een goed startpunt om het project uit te breiden met // later nieuwe functies // Muzieknoottoetsen - Frequentiewaarden instellen in notities [] ={262, 294, 330, 349, 392, 440, 494}; // Set noten C, D, E, F, G, A, B//////////////////////////////////// //////////void setup () {Serial.begin (9600); lcd.begin (16, 2); pinMode (LCDswitchPin, INPUT); pinMode (blueLED, OUTPUT); digitalWrite (blueLED, LOW ); // LED blijft uit zolang de pianotoetsen aan staan ​​} // end setup///////////////////////////////// /////////////void loop () {LCDswitchState =digitalRead (LCDswitchPin); int keyVal =analogRead (A0); Serial.println (keyVal); lcd.noDisplay (); digitalWrite (blueLED, LOW); // Schakel de LED weer uit elke keer dat de hoofdlus start // *************** START "LCDstart" WANNEER DE MENUKNOP WORDT INGEDRUKT ******** *** if (LCDswitchState ==HOOG) {digitalWrite(blueLED, HIGH); // Schakel de LED in om aan te geven dat de pianotoetsen zijn uitgeschakeld en het apparaat zich in de "menumodus" lcd.display(); lcd.wissen(); LCDstart(); } // ********************************************** ************************* ////// TOETSENBORD OPMERKINGEN &FREQUENTIEVERKLARINGEN //////// Gebruik de weerstandsladder die u hebt gemaakt om verander de spanning van elke pianotoetsknop// 220 ohm =C5 // 560 ohm =D5 // 1K ohm =E5 // etc... if(keyVal ==1023) { tone(8, notes[0]); // C} // end if else if (keyVal>=990 &keyVal <=1010) { tone (8, notes [1]); // D} // end else if else if (keyVal>=960 &&keyVal <=980) { tone (8, notes [2]); // E} // end else if else if (keyVal>=900 &&keyVal <=945) { tone (8, notes [3]); // F} // end else if else if (keyVal>=650 &&keyVal <=710) { tone (8, notes [4]); // G} // end else if else if (keyVal>=500 &&keyVal <=550) { tone (8, notes [5]); // A} // end else if else if (keyVal>=5 &&keyVal <=10) { tone (8, notes [6]); // B } // end else if else if (keyVal <=1) { // als er geen schakelaar wordt ingedrukt, speel dan geen tone noTone (8); } // end else if} // end frequency tone loop///////////////////////////////////// ////////////////void LCDstart () {int keyVal =analogRead (A0); LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop terwijl (LCDswitchState ==LAAG) {// ga door met de lus terwijl de menuknop niet is ingedrukt LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop elke keer dat de lus start //************* START SONG 1 TITLE LOOP **************** * if (LCDswitchState ==HOOG) { // als de menuknop wordt ingedrukt, dan... LCDswitchCounter++; // stel het aantal knoppen in op 1 Serial.print ("aantal drukken op de knop:"); Serial.println(LCDswitchCounter); vertraging (300); // min. tijd tot telt telt nog 1 Song1title(); lcd.wissen(); pauze; } //************* ELSE SHOW MENU **************** else { // als de menuknop niet is ingedrukt, dan... LCDswitchCounter=0; // stel het aantal menuknoppen in op 0 lcd.clear(); lcd.setCursor(0, 0); lcd.print("WELKE LIED ZOU ZOUDEN"); lcd.setCursor(0, 1); lcd.print("JE HOUDT VAN SPELEN"); vertraging (50); // return to main } } // end while } // end LCDstart loop // *********** SONG 1 LOOP BEGINT HIER *********** * void Song1title() {int keyVal =analogRead(A0); LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop opnieuw terwijl (LCDswitchState ==LAAG) {// ga door met de lus terwijl de menuknop niet is ingedrukt LCDswitchState =digitalRead (LCDswitchPin); // controleer nogmaals de status van de menuknop //*********** START SONG 2 TITLE LOOP ********************* als ( LCDswitchState ==HOOG) {// als de menuknop wordt ingedrukt, dan... LCDswitchCounter++; // stel het aantal knoppen in op 2 Serial.print ("aantal drukken op de knop:"); Serial.println(LCDswitchCounter); vertraging (300); // min. tijd tot telt telt nog 1 Song2title(); lcd.wissen(); pauze; } else { // als de menuknop niet is ingedrukt int keyVal =analogRead (A0); Serial.println(keyVal); if(keyVal>=2) {digitalWrite(blueLED, LOW); Nummer1(); pauze; } // eindig als lcd.clear(); lcd.setCursor(0, 0); lcd.print("SUPER MARIO BROS"); lcd.setCursor(0, 1); lcd.print("THEMA SONG"); vertraging (50); } } // end while song 1 -> 2 } // end Song1title loop// *********** SONG 2 LUS BEGINT HIER *********** * void Song2title() {int keyVal =analogRead(A0); LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop opnieuw terwijl (LCDswitchState ==LAAG) {// ga door met de lus terwijl de menuknop niet is ingedrukt LCDswitchState =digitalRead (LCDswitchPin); // controleer nogmaals de status van de menuknop //*********** START SONG 3 TITLE LOOP ********************* als ( LCDswitchState ==HOOG) {// als de menuknop wordt ingedrukt, dan... LCDswitchCounter++; // stel het aantal knoppen in op 3 Serial.print ("aantal drukken op de knop:"); Serial.println(LCDswitchCounter); vertraging (300); // min. tijd tot telt telt nog 1 Song3title(); lcd.wissen(); pauze; } else { // als de menuknop niet is ingedrukt int keyVal =analogRead (A0); Serial.println(keyVal); if(keyVal>=2) {digitalWrite(blueLED, LOW); Nummer2(); pauze; } // eindig als lcd.clear(); lcd.setCursor(0, 0); lcd.print("SUPER MARIO BROS"); lcd.setCursor(0, 1); lcd.print("ONDERWERELD"); vertraging (50); } } // end while song 2 -> 3 } // end Song2title loop// *********** SONG 3 LOOP BEGINT HIER *********** * void Song3title() {int keyVal =analogRead(A0); LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop opnieuw terwijl (LCDswitchState ==LAAG) {// ga door met de lus terwijl de menuknop niet is ingedrukt LCDswitchState =digitalRead (LCDswitchPin); // controleer nogmaals de status van de menuknop //*********** START SONG 4 TITLE LOOP ********************* als ( LCDswitchState ==HOOG) {// als de menuknop wordt ingedrukt, dan... LCDswitchCounter++; // stel het aantal knoppen in op 4 Serial.print ("aantal drukken op de knop:"); Serial.println(LCDswitchCounter); vertraging (300); // min. tijd tot telt telt nog 1 Song4title(); lcd.wissen(); pauze; } else { // als de menuknop niet is ingedrukt int keyVal =analogRead (A0); Serial.println(keyVal); if(keyVal>=2) {digitalWrite(blueLED, LOW); Nummer3(); pauze; } // eindig als lcd.clear(); lcd.setCursor(0, 0); lcd.print("JEOPARDY"); lcd.setCursor(0, 1); lcd.print("THEMA SONG"); vertraging (50); } } // end while song 3 -> 4 } // end Song3title loop// *********** SONG 4 LOOP BEGINT HIER *********** * void Song4title() {int keyVal =analogRead(A0); LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop opnieuw terwijl (LCDswitchState ==LAAG) {// ga door met de lus terwijl de menuknop niet is ingedrukt LCDswitchState =digitalRead (LCDswitchPin); // controleer nogmaals de status van de menuknop //*********** START SONG 5 TITLE LOOP ********************* als ( LCDswitchState ==HOOG) {// als de menuknop wordt ingedrukt, dan... LCDswitchCounter++; // stel het aantal knoppen in op 5 Serial.print ("aantal drukken op de knop:"); Serial.println(LCDswitchCounter); vertraging (300); // min. tijd tot telt telt nog 1 Song5title(); lcd.wissen(); pauze; } else { // als de menuknop niet is ingedrukt int keyVal =analogRead (A0); Serial.println(keyVal); if(keyVal>=2) {digitalWrite(blueLED, LOW); Nummer4(); pauze; } // eindig als lcd.clear(); lcd.setCursor(0, 0); lcd.print ("SONG 4"); lcd.setCursor(0, 1); lcd.print ("TITEL HIER"); vertraging (50); } } // end while song 4 -> 5 } // end Song4title loop// *********** SONG 5 LOOP BEGINT HIER *********** * void Song5title() {int keyVal =analogRead(A0); LCDswitchState =digitalRead (LCDswitchPin); // controleer de status van de menuknop opnieuw terwijl (LCDswitchState ==LAAG) {// ga door met de lus terwijl de menuknop niet is ingedrukt LCDswitchState =digitalRead (LCDswitchPin); // controleer nogmaals de status van de menuknop //*********** START SONG 4 TITLE LOOP ********************* als ( LCDswitchState ==HOOG) {// als de menuknop wordt ingedrukt, dan... LCDswitchCounter=0; // stel het aantal knoppen in op 0 Serial.print ("aantal drukken op de knop:"); Serial.println(LCDswitchCounter); vertraging (300); // min. tijd tot tellingen voegt nog 1 lcd.clear(); } else { // als de menuknop niet is ingedrukt int keyVal =analogRead (A0); Serial.println(keyVal); if(keyVal>=2) {digitalWrite(blueLED, LOW); Nummer5(); pauze; } // eindig als lcd.clear(); lcd.setCursor(0, 0); lcd.print ("SONG 5"); lcd.setCursor(0, 1); lcd.print ("TITEL HIER"); vertraging (50); } } // end while song 4 -> 5 } // end Song5title loop
Song1Arduino
Code voor het eerste nummer. Momenteel is de Mario Bros-themasong geladen.
//******************** SONG 1 OPMERKINGEN HIER *************** ***********/////////////////////////////////////// ////////////////////////////////////////////////// /////////////////////// DE VOLLEDIGE TUTORIAL OVER HOE DE MARIO SONGS TE MAKEN KAN HIER VINDEN WORDEN:///////////// ///////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -piëzo-zoemer/ ///////////////////////////////////////////// ////////////////////////////////////////////////// ////////void Song1() { lcd.clear();// noten in de melodie:int melodie [] ={ NOTE_E7, NOTE_E7, 0, NOTE_E7, 0, NOTE_C7, NOTE_E7, 0, NOTE_G7, 0, 0, 0, NOTE_G6, 0, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7, NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0, NOTE_C7, 0, 0, NOTE_G6, 0, 0, NOTE_E6, 0, 0, NOTE_A6, 0, NOTE_B6, 0, NOTE_AS6, NOTE_A6, 0, NOTE_G6, NOTE_E7, NOTE_G7 , NOTE_A7, 0, NOTE_F7, NOTE_G7, 0, NOTE_E7, 0, NOTE_C7, NOTE_D7, NOTE_B6, 0, 0};// nootduur:4 =kwartnoot, 8 =achtste noot, enz.:int noteDurations[] ={ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 9, 9, 9, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,}; lcd.setCursor(1, 0); lcd.print("Nu aan het spelen..."); lcd.setCursor(0, 1); lcd.print("MARIO THEME SONG"); int size =sizeof(melodie) / sizeof(int); for (int thisNote =0; thisNote  
Song2Arduino
Code voor het 2e nummer. Momenteel is het Mario Bros Underworld-nummer geladen.
//******************** SONG 2 OPMERKINGEN HIER *************** ***********/////////////////////////////////////// ////////////////////////////////////////////////// /////////////////////// DE VOLLEDIGE TUTORIAL OVER HOE DE MARIO SONGS TE MAKEN KAN HIER VINDEN WORDEN:///////////// ///////////////////// http://www.linuxcircle.com/2013/03/31/playing-mario-bros-tune-with-arduino-and -piëzo-zoemer/ ///////////////////////////////////////////// ////////////////////////////////////////////////// ////////void Song2() { lcd.clear();// noten in de melodie:int melodie [] ={ NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_C4, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_AS3, NOTE_AS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, 0, NOTE_F3, NOTE_F4, NOTE_D3, NOTE_D4, NOTE_DS3, NOTE_DS4, 0, 0, NOTE_DS4, 0, 0, NOTE_DS4, 0, 0, NOTE_D4, NOTE_CS4, NOTE_DS4, NOTE_DS4, NOTE_GS3, NOTE_G3, NOTE_CS4, NOTE_C4, NOTE_FS4, NOTE_F4, NOTE_E3, NOTE_AS4, NOTE_A4, NOTE_GS4, NOTE_DS4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_GS3, 0, 0, 0};// nootduur:4 =kwartnoot, 8 =achtste noot, enz.:int noteDurations[] ={ 12, 12, 12, 12, 12 , 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12, 6, 3, 12, 12, 12, 12, 12, 12 , 6, 6, 18, 18, 18, 6, 6, 6, 6, 6, 6, 18, 18, 18, 18, 18, 18, 10, 10, 10, 10, 10, 10, 3, 3 , 3}; lcd.setCursor(1, 0); lcd.print("Nu aan het spelen..."); lcd.setCursor(0, 1); lcd.print("MARIO UNDERWORLD"); int size =sizeof(melodie) / sizeof(int); for (int thisNote =0; thisNote  
Song3Arduino
Code voor het 3e nummer. Momenteel is de Jeopardy Theme Song geladen.
//******************** SONG 3 OPMERKINGEN HIER **************** **********void Song3() { lcd.clear();// noten in de melodie:int melodie [] ={ NOTE_C2, NOTE_F3, NOTE_C3, NOTE_A2, NOTE_A2, NOTE_C3, NOTE_F3, NOTE_C3, NOTE_C3, NOTE_F3, NOTE_C3, NOTE_F3, NOTE_AS3, NOTE_G3, NOTE_F3, NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C2, NOTE_F3, NOTE_C3, NOTE_A2, NOTE_A2, // herhaal regel 1 en 2 NOTE_C3, NOTE_F3, NOTE_C3, NOTE_AS , NOTE_E3, NOTE_D3, NOTE_CS3, NOTE_C3};// nootduur:4 =kwartnoot, 8 =achtste noot, enz.:int noteDurations[] ={ 4, 4, 4, 8, 8, 4, 4, 2, 4, 4, 4, 4, 3, 8, 8, 8, 8, 8, 4, 4, 4, 8, 8, // herhaal regel 1 en 2 4, 4, 2, 4, 8, 8, 4 , 4, 4, 4, 4, 4, 0}; lcd.setCursor(1, 0); lcd.print("Nu aan het spelen..."); lcd.setCursor(0, 1); lcd.print("JEOPARDY"); for (int thisNote =0; noteDurations[thisNote] !=0; thisNote++) { // om de nootduur te berekenen, neem één seconde // gedeeld door het noottype. // bijv. kwartnoot =1000 / 4, achtste noot =1000/8, enz. int noteDuration =2000/noteDurations[thisNote]; toon (8, melodie [deze noot], nootduur * 0,9); // om de noten te onderscheiden, stel een minimum tijd tussen hen in. // de duur van de notitie + 30% lijkt goed te werken://int pauseBetweenNotes =noteDuration * 1.30; //vertraging (pauze tussen notities); vertraging (opmerkingDuur); }Song3title(); } // einde Song3-lus
Song4Arduino
Code voor het 4e nummer. Heeft momenteel een korte, generieke melodie geladen.
//******************** LIED 4 OPMERKINGEN HIER *************** ***********void Song4() { lcd.clear();// noten in de melodie:int melodie [] ={ NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 };// nootduur:4 =kwartnoot, 8 =achtste noot, enz.:int noteDurations[] ={ 4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor(1, 0); lcd.print("Nu aan het spelen..."); lcd.setCursor(0, 1); lcd.print ("SONG 4 TITLE"); int dezeOpmerking =0; // om de nootduur te berekenen, neem een ​​seconde // gedeeld door het noottype. // bijv. kwartnoot =1000/4, achtste noot =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote++) { // om de nootduur te berekenen, neem één seconde // gedeeld door het noottype. // bijv. kwartnoot =1000 / 4, achtste noot =1000/8, enz. int noteDuration =1000 / noteDurations[thisNote]; toon(8, melodie[thisNote], noteDuration); // om de noten te onderscheiden, stel een minimum tijd tussen hen in. // de duur van de notitie + 30% lijkt goed te werken:int pauseBetweenNotes =noteDuration * 1.30; vertraging (pauzeTussenNotes); geen toon(8); // stop het afspelen van de toon:} // end forSong4title(); } // einde Song4-lus
Song5Arduino
Code voor het 5e nummer. Heeft momenteel een korte, generieke melodie geladen.
//******************** LIED 5 OPMERKINGEN HIER *************** ***********void Song5() { lcd.clear();// noten in de melodie:int melodie [] ={ NOTE_C4, NOTE_G3, NOTE_G3, NOTE_A3, NOTE_G3, 0, NOTE_B3, NOTE_C4 };// nootduur:4 =kwartnoot, 8 =achtste noot, enz.:int noteDurations[] ={ 4, 8, 8, 4, 4, 4, 4, 4}; lcd.setCursor(1, 0); lcd.print("Nu aan het spelen..."); lcd.setCursor(0, 1); lcd.print ("SONG 5 TITEL"); int dezeOpmerking =0; // om de nootduur te berekenen, neem een ​​seconde // gedeeld door het noottype. // bijv. kwartnoot =1000/4, achtste noot =1000/8, etc. for (int thisNote =0; thisNote <8; thisNote++) { // om de nootduur te berekenen, neem één seconde // gedeeld door het noottype. // bijv. kwartnoot =1000 / 4, achtste noot =1000/8, enz. int noteDuration =1000 / noteDurations[thisNote]; toon(8, melodie[thisNote], noteDuration); // om de noten te onderscheiden, stel een minimum tijd tussen hen in. // de duur van de notitie + 30% lijkt goed te werken:int pauseBetweenNotes =noteDuration * 1.30; vertraging (pauzeTussenNotes); geen toon(8); // stop het afspelen van de toon:} // end forSong5title(); } // einde Song5-lus
pitches.hArduino
Bibliotheek met muzieknoten voor liedjes. Sla op in dezelfde map als je andere toetsenbord-/songschetsen.
//******************************** ****************//** DEFINIEER MUZIEKNOTEN//************************* *************************#define NOTE_B0 31#define NOTE_C1 33#define NOTE_CS1 35#define NOTE_D1 37#define NOTE_DS1 39#define NOTE_E1 41# define NOTE_F1 44#define NOTE_FS1 46#define NOTE_G1 49#define NOTE_GS1 52#define NOTE_A1 55#define NOTE_AS1 58#define NOTE_B1 62#define NOTE_C2 65#define NOTE_CS2 69#define NOTE_D2 73#define NOTE_DS2 78#define NOTE_E2 87#define NOTE_FS2 93#define NOTE_G2 98#define NOTE_GS2 104#define NOTE_A2 110#define NOTE_AS2 117#define NOTE_B2 123#define NOTE_C3 131#define NOTE_CS3 139#define NOTE_D3 147#define NOTE_DS3 156#define#define NOTE_E define NOTE_FS3 185#define NOTE_G3 196#define NOTE_GS3 208#define NOTE_A3 220#define NOTE_AS3 233#define NOTE_B3 247#define NOTE_C4 262#define NOTE_CS4 277#define NOTE_D4 294#define NOTE_DS4 311_F#define NOTE_E4 3304 349#define NOTE_FS4 370#define NOTE_G4 392#define NOTE_GS4 415#define NOTE_A4 440#define NOTE_AS4 466#define NOTE_B4 494#define NOTE_C5 523#define NOTE_CS5 554#define NOTE_D5 587#define NOTE_DS5 652#define NOTE_E25 659#define NOTE_E25 define NOTE_FS5 740#define NOTE_G5 784#define NOTE_GS5 831#define NOTE_A5 880#define NOTE_AS5 932#define NOTE_B5 988#define NOTE_C6 1047#define NOTE_CS6 1109#define NOTE_D6 1175#define NOTE_DS6 1245#define NOTE_E6 1319#define NOTE_E6 13196 1480#define NOTE_G6 1568#define NOTE_GS6 1661#define NOTE_A6 1760#define NOTE_AS6 1865#define NOTE_B6 1976#define NOTE_C7 2093#define NOTE_CS7 2217#define NOTE_D7 2349#define NOTE_DS7 2489#define NOTE_E7 NOTE_796#define NOTE_F define NOTE_G7 3136#define NOTE_GS7 3322#define NOTE_A7 3520#define NOTE_AS7 3729#define NOTE_B7 3951#define NOTE_C8 4186#define NOTE_CS8 4435#define NOTE_D8 4699#define NOTE_DS8 4978

Schema's


Productieproces

  1. Aan de slag met TJBot
  2. Dorstalarm plantalarm
  3. Italiaanse Word Clock
  4. Arduino + LED's + MIDI Keyboard + MuseScore =Piano Tutor
  5. Eenvoudige obstakelsensor met Arduino
  6. Sigfox kWh-meter
  7. Bluetooth-temperatuurmeter
  8. Ministereoradio met RDA5807
  9. Gebarengestuurd slot
  10. The Companion IC
  11. Meet je reactietijd