Arduino experiment (Supersize Instructable) (4 / 14 steg)
Steg 4: Skicklighet nivå: grundläggande. (2)
- PIEZO SUMMERN (spelar toner & låtar)
- Enkel inställning av kretsen se bilder, här du kommer att spela en ton melodi och låt/melodi av ändring av frekvensen och graden av elektriska summern gå till exempel på din IDE titt på digital och välj tonen/melodi och försök den ute.
- KOD FÖR CAN-CAN TUNE UNDER DENNA LINJE ___
int noteFreqArr [] = {
49,4, 52.3, 55,4, 58.7, 62,2, 65.9, 69,9, 74, 78,4, 83,1, 88, 93,2, 98,8, 105, 111, 117, 124, 132, 140, 148, 157, 166, 176, 186, 198, 209, 222, 235, 249, 264, 279, 296, 314, 332, 352, 373, 395, 419, 444, 470, 498, 527, 559, 592, 627, 665, 704, 746, 790, 837, 887, 940, 996, 1050, 1110, 1180, 1250, 1320, 1400, 1490, 1580 1670, 1770, 1870, 1990, 2100};
långa läge = 0;
void setup() {pinMode (4, OUTPUT); / / ange en PIN-kod för Summer utgång}
void playNote (långa noteInt, lång längd, lång läge, långa andetag = 25) {längd = längd - andedräkt, lång noteInt2 = noteInt + 12. //1 oktav upp långa noteInt3 = noteInt + 24. //2 oktaver upp långa noteInt4 = noteInt + 36. //3 oktaver upp långa playLoop = längd / 100; //divide längd av 4, för användning i uppspelningssekvensen if(mode == 0) {//mode 0 sekvens för (länge jag = 0; jag < playLoop; i ++) {buzz (4 noteFreqArr [noteInt], 20); Delay(5); Buzz (4, noteFreqArr [noteInt2], 20); Delay(5); Buzz (4, noteFreqArr [noteInt3], 20); Delay(5); Buzz (4, noteFreqArr [noteInt4], 20); Delay(5); {}} annat if(mode == 1) {//mode 1 sekvens för (länge jag = 0; jag < playLoop; i ++) {buzz (4, noteFreqArr [noteInt3], 20), delay(5), buzz (4, noteFreqArr [noteInt4], 20); delay(5); buzz (4, noteFreqArr [noteInt3], 20); delay(5); buzz (4, noteFreqArr [noteInt4], 20), delay(5);}} annat if(mode == 2) {//mode 2 sekvens för (länge jag = 0; jag < playLoop; i ++) {buzz (4, noteFreqArr [noteInt3] 20); Delay(5); Buzz (4, noteFreqArr [noteInt3], 20); Delay(5); Buzz (4, noteFreqArr [noteInt3], 20); Delay(5); Buzz (4, noteFreqArr [noteInt2], 20); Delay(5); {}} annat if(mode == 3) {//mode 3 sekvens för (länge jag = 0; jag < playLoop; i ++) {buzz (4, noteFreqArr [noteInt4], 40), delay(5), buzz (4, noteFreqArr [noteInt2], 40), delay(5);}} if(breath > 0) {//take en kort paus eller "andas" om anges delay(breath);}}
void loop() {//main kurs playNote (12, 500, läge); playNote (5, 1000, läge); playNote (7, 250, läge), playNote (10, 250, läge); playNote (9, 250, läge); playNote (7, 250, läge); playNote (12, 500, läge); playNote (12, 500, läge); playNote (12, 250, läge); playNote (14, 250, läge); playNote (9, 250, läge); playNote (10, 250, läge); playNote (7, 500, läge); playNote (7, 500, läge); playNote (7 250, läge); playNote (10, 250, läge); playNote (9, 250, läge); playNote (7, 250, läge); playNote (5, 250, läge); playNote (17, 250, läge); playNote (16, 250, läge); playNote (14, 250, läge); playNote (12, 250, läge); playNote (10, 250, läge); playNote (9, 250, läge); playNote (7, 250, läge); playNote (5, 1000, läge); playNote (7, 250, läge); playNote (10, 250, läge); playNote (9, 250, läge); playNote (7, 250, läge); playNote (12, 500, läge); playNote (12, 500, läge); playNote (12, 250, läge); playNote (14, 250, läge); playNote (9, 250, läge); playNote (10, 250, läge); playNote (7, 500, läge); playNote (7, 500, läge); playNote (7, 250, läge); playNote (10, 250, läge); playNote (9, 250, läge); playNote (7, 250, läge); playNote (5, 250, läge); playNote (12, 250, läge); playNote (7, 250, läge); playNote (9, 250, läge); playNote (5, 250, läge); Delay(250); IF(mode == 0) {läge = 1;} annat if(mode == 1) {läge = 2;} annat if(mode == 2) {läge = 3;} annat if(mode == 3) {läge = 0;}}
void buzz (int targetPin, lång frekvens, lång längd) {lång delayValue = 1000000/frekvens/2; / / beräkna dröjsmål värdet mellan övergångar / / / 1 sekund är värt mikrosekunder, dividerat med frekvensen, då kluvna sedan / / / det är två faser till varje cykla långa numCycles = frekvens * längd / 1000; / / beräkna antalet cykler för rätt tid / / / multiplicera frekvens, vilket är riktigt cykler per sekund av antalet sekunder till / / / få det totala antalet cykler att producera för (länge jag = 0; jag < numCycles; i ++) {/ / för den beräknade längden av tid... digitalWrite(targetPin,HIGH); / / Skriv summern pin hög att driva ut diaphram delayMicroseconds(delayValue); / / vänta tills beräknad försening värde digitalWrite(targetPin,LOW); / / Skriv PIN-koden Summer låg för att dra tillbaka diaphram delayMicroseconds(delayValue); / / wait againf eller beräknad försening värde}}
- (Behöver inte ladda ner alla bibliotek för detta bara kopiera och klistra in den till din IDE i en tom skiss och spara den som den kan-kan sedan ladda upp den och prova det, personligen hitta det mycket irriterande stämma när spelade säker får en uppmärksamhet emellertid)
- Knappen trycka (förmåga att kartlägga knappar för mer command & control förmåga)... Knappen trycka & mappning, för det första enda knapp som en på/av-knappen på när du trycker bort när den släpps, följt av duell knappen kartläggning ställa en som en off-knapp och andra en en på knappen, möjliggör skapandet av en spelkontrollen för robotsystem, ett exempel är en 5button pad upp/ner/vänster/höger och en händelseknapp i mitten.
- Följa bilderna och titta på video för att tråd upp banan om du har problem hänvisar till källor på nätet för knappen mappning med arduino, alltid kontrollera ditt ledningar innan du ansluter det upp och vrida på din styrelse sedan dubbelkolla som en kortslutning kan döda din utrustning i sekunder särskilt med fler högspänning program... Kodning under raden för att ställa in knappar (för enda knapp SETUP) ___ ___ / *
Knappen tänds och släcks en ljusavgivande diode(LED) ansluten till digital stift 13, när du trycker på en tryckknapp ansluten till stift 2. Kretsen: * LED fästs marken från stift 13 * tryckknapp ansluten till stift 2 från + 5V * 10K resistor kopplad till stift 2 från marken * Obs: på de flesta Arduinos finns det redan en LED i styrelsen bifogas stift 13. skapad 2005 av DojoDave uppdaterad 30 Aug 2011 av Tom Igoe här exempelkod är offentlig. http://www.Arduino.cc/en/tutorial/Button *
/ konstanter kommer inte att ändra. De används här till / / set pin-koder: const int buttonPin = 2; numrera av tryckknapp pin const int ledPin = 13. antal LED stift
variabler som ändras: int buttonState = 0; variabel för att läsa tryckknapp status
void setup() {/ / initiera LED stift som en utgång: pinMode (ledPin, produktionen); / / initiera tryckknapp stiftet som indata: pinMode (buttonPin, ingång);}
void loop() {/ / läsa statligt av tryckknapp värdet: buttonState = digitalRead(buttonPin);
Kontrollera om tryckknappen trycks. om det är buttonState är hög: om (buttonState == hög) {/ / slå LED på: digitalWrite (ledPin, hög);} annat {/ / stänga LED av: digitalWrite (ledPin, låg);}}
(För duell knapp SETUP) ___ int ledPin = 13. väljer du PIN-koden för LED int inputPin1 = 3; knappen 1 int inputPin2 = 2; knappen 2 void setup() {pinMode (ledPin, produktionen); / / förklara LED som output pinMode (inputPin1, ingång); / / göra knappen 1 en ingående pinMode (inputPin2, ingång); / / göra knappen 2 indata {void loop() {om (digitalRead(inputPin1) == låg) {digitalWrite (ledPin, låg); / / stänga LED av} else om (digitalRead(inputPin2) == låg) {
digitalWrite (ledPin, hög); slå LED {{
Kopiera bara och förbi ovan med knappar kopplad till rätt stift med pull down motstånd så att knapparna reagerar på och av, inte bara på hela tiden.
(Foto RESISTOR SETUP) Något lätt att ställa upp, ansluta din LED till rätt PIN-kod anges i den kodning som följer inom kort, den foto-motstånd måste knytas till en resistor också se bilder, och mäts genom en analog stift 0 om du inte anger det som en annan pin, PIN-koden kommer att läsa den inkommande signalen motstånd och översätta den till volt för att Lamporna effektivt bleknar det. med ändringar i ljus , jag var i ett ganska ljust rum så var tvungen att använda extrem närhet också det var en spricka i foto motståndet som nedsatt dess funktion ännu mer fortfarande emellertid arbetat tillräckligt för att visa och lära mig hur det fungerade samt kodning krävs för att kontrollera och mäta inkommande ljusintensiteten...
KODNING efter denna linje ___ //PhotoResistor Pin
int lightPin = 0; den analoga pin fotomotstånd är //connected till //the fotomotstånd inte är kalibrerad till alla enheter så //this är helt enkelt en rå sensor värde (relativa ljus) //LED Pin int ledPin = 9; pin LED är ansluten till //we styr ljusstyrkan så att //we använda en av PWM (puls bredd / / modulering stift) void setup() {pinMode (ledPin, produktionen); //sets ledde stiftet att mata} / * * loop() - denna funktion kommer att starta efter installationen * finish och sedan upprepa * / void loop() {int lightLevel = analogRead(lightPin); //Read den / / lightlevel lightLevel = karta (lightLevel, 900-0, 0, 255); //adjust värdet 0 till 900 till //span 0 till 255
lightLevel = begränsa (lightLevel, 0, 255); //make till //value är betwween //0 och 255 analogWrite (ledPin, lightLevel); Skriv värdet}
Sortera mängd kod inte till komplicerade och använder välbekanta funktioner som analoga stiften och det mini & max värden,, vanliga hastighetsminskning av stift och där lägen, nya funktioner inkluderar ljus nivå konstanter 0,900,0,255 etc som kan ses ovan.