"Grove"r (6 / 10 steg)
Steg 6: kod
Spara dessa 3 koder för lyssna, se och sjunga som arduino (.ino) filer separat:
Jag har tagit de IDE-filerna men de har olika namn.
Lyssna:
int soundSensorPin = A0;
int soundReading = 0; int soundThreshold = 500. int intensitet [3] = {0,0,0}. int LEDPins [3] = {2,4,5}. int numberOfPins = 3; int currentPin = 0; int fadeCounter = 0; int fadeDelay = 50; booleska switcher = sant;
void setup() {pinMode(soundSensorPin, INPUT); för (int jag = 0; jag
void loop() {soundReading=analogRead(soundSensorPin); if(soundReading>soundThreshold) {if(switcher) {aboveThreshold(currentPin); switcher = sant;}} annat {if(switcher) {belowThreshold(); switcher = sant;}}}
void aboveThreshold (int cPin) {switcher = false; om (intensitet [cPin] < 10) {intensitet [cPin] = 255; delay(50); currentPin = currentPin + 1;}
IF(currentPin==numberOfPins) {currentPin = 0;}}
void belowThreshold() {switcher = false; fadeCounter ++; if(fadeCounter==fadeDelay) {fadeCounter = 0; för (int jag = 0; jag
Källa: https://gist.github.com/michelleboisson/3830481
Följt av se:
/*
* Kontrollera Servo via ljussensor (e.g. fotomotstånd). ** Copyright (C) 2010 Efstathios Chatzikyriakidis (kontakta ** det här programmet är fri programvara: du kan vidaredistribuera det och/eller ändra * det enligt villkoren i GNU General Public License som offentliggörs av * Free Software Foundation, antingen version 3 av licensen, eller * (på ditt alternativ) någon senare version. ** detta program är distribuerat i hopp om att det kommer att vara bra, * men utan garantier, utan ens underförstådd garanti om * SÄLJBARHET eller lämplighet för ett visst ändamål. Se den * GNU General Public License för mer detaljer. ** Du bör ha fått en kopia av GNU General Public License * tillsammans med detta program. Om inte, se. * / / / include bibliotek för servo. #include servo myServo; servo-objekt för att styra en servo skapas. CONST int servoPin = 7. pin-kod (PWM) för servo. CONST int sensorPin = 3; pin-kod för inmatningssensorn. aktuella och tidigare värden för servo enheten. int valServo = 0; int oldValue = 0; följande värden kan ändras i enlighet ljussensorn. utför en kalibrering med ren mörk och rena ljus först. CONST int lightMin = 170; Ange lämpligt värde för ljussensorn. CONST int lightMax = 512; Ange lämpligt värde för ljussensorn. CONST int LIGHT_SENSE = 5; skillnaden nivå känslighet värde. CONST lång fördröjningstid = 15. servo rörelse fördröjningstiden i millis. Start punkt post (körs en gång). Annullera setup () {/ / ställa in sensorn som indata. pinMode (sensorPin, ingång); / / bifoga servo på en pin. myServo.attach(servoPin);} / / slinga huvudsakliga skissen. Ogiltig loop () {/ / få värdet från ljus sensor. int valServo = analogRead(sensorPin); / / karta värdet till min, max av servo. valServo = karta (valServo, lightMin, lightMax, 0, 179); / / se till att värdet är mellan min, maximal av valServo servo. = begränsa (valServo, 0, 179); / / flytta servo endast om ljuset ändras nog. om (abs (valServo - oldValue) > LIGHT_SENSE) {/ / flytta servo. myServo.write(valServo); / / hålla den senaste värde. oldValue = valServo;} / / vänta lite tid servo till move. delay(delayTime);}
Källa:
Följt av sjunga:
/*
Arduino Mario Bros låtar med Piezo summern och PWM Anslut den positiva sidan av summern till stift 3, sedan den negativa sidan till en 1 k ohms motstånd. Anslut den andra sidan av en 1 k ohm motstånd till ground(GND) stift på Arduino. av: Dipto Pratyaksa Senast uppdaterad: 31/3/13 * / / *** * offentliga konstanter *** / #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 82 #define NOTE_F2 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 NOTE_E3 165 #define NOTE_F3 175 #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 #define NOTE_E4 330 #define NOTE_F4 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 622 #define NOTE_E5 659 #define NOTE_F5 698 #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_F6 1397 #define NOTE_FS6 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 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #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 #define melodyPin 3 //Mario huvudtema melodi int melodi [] = {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}; Mario main dem tempo int tempo [] = {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,}; Underjorden melodi int underworld_melody [] = {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, NOTE_CS4, 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}; Underwolrd tempo int underworld_tempo [] = {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}; void setup(void) {pinMode (3, OUTPUT); //buzzer pinMode (13, OUTPUT); //led indikator när sjunger en anteckning} void loop() {//sing låtar sing(1); sing(1); sing(2);} int låten = 0; void sing (int s) {/ / iterera över tonerna i melodin: låten = s; om (låten == 2) {Serial.println ("" Underworld tema""); int storlek = sizeof(underworld_melody) / sizeof(int); för (int thisNote = 0; thisNote < storlek; thisNote ++) {/ / för att beräkna noterar varaktighet, ta en sekund / / dividerat med den anmärkning typ. / / e.g. fjärdedelsnot = 1000 / 4, åttondelen noterar = 1000/8, etc. int noteDuration = 1000 / underworld_tempo [thisNote]; buzz (melodyPin underworld_melody [thisNote], noteDuration); för att skilja anteckningar, ange en minsta tid mellan dem. tonens längd + 30% verkar fungera bra: int pauseBetweenNotes = noteDuration * 1,30; Delay(pauseBetweenNotes); stoppa uppspelningen tonen: buzz (melodyPin, 0, noteDuration); {}} annat {Serial.println ("' Mario Theme'"); int storlek = sizeof(melody) / sizeof(int); för (int thisNote = 0; thisNote < storlek; thisNote ++) {/ / för att beräkna noterar varaktighet, ta en sekund / / dividerat med den anmärkning typ. / / e.g. fjärdedelsnot = 1000 / 4, åttondelen noterar = 1000/8, etc. int noteDuration = 1000 / tempo [thisNote], buzz (melodyPin, melody [thisNote], noteDuration); / / för att skilja anteckningarna, som en minsta tid mellan dem. / / tonens längd + 30% verkar fungera bra : int pauseBetweenNotes = noteDuration * 1,30; Delay(pauseBetweenNotes); stoppa uppspelningen tonen: buzz (melodyPin, 0, noteDuration); }}} void buzz (int targetPin, lång frekvens, lång längd) {digitalWrite (13, hög), 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, hög); / / Skriv summern pin hög att driva ut diaphram delayMicroseconds(delayValue); / / vänta tills beräknad försening värde digitalWrite (targetPin, låg); / / Skriv PIN-koden Summer låg för att dra tillbaka diaphram delayMicroseconds(delayValue); / / vänta igen eller beräknad försening värde} digitalWrite (13 LÅG); }