Stap 5: Code
De volgende stap is het toevoegen van de code aan de Arduino micro-controller.
Als u niet over de Arduino software of IDE beschikt kunt u het downloaden op Arduino.cc
Je Arduino aansluit op uw computer en maak een nieuw project in de Arduino IDE.
Plak de volgende code in en uploaden naar de Arduino.
Schapen deurbel / / mei 2011 door Todd Miller op basis van Adafruit voorbeeldcode / / een geluidssignaal als sensor wordt geactiveerd, in dit geval schapen gebruikt 7 baaing
klinkt en pakt een willekeurig / / delen omvatten Arduino Uno, WAV Shield, kleine 8 ohm luidspreker en Sharp
GP2Y0A02 afstandssensor / / om te worden gemonteerd in een Shaun The Sheep uit Wallace & Gromet
#include < AF_Wave.h > #include < avr/pgmspace.h > #include "util.h" #include "wave.h" AF_Wave kaart;
Bestand f; WAVEFILE Golf; slechts één! uint8_t tracknum = 0; uint16_t samplerate;
#define sensorIn 0 int songCount = 7; int een [5]; int de resultaten;
int i = 0; int maxDist = 0; int sensorRead = 0; int fr = 0; lange previousMillis = 0; lange interval = 3000;
void setup {Serial.begin(9600); randomSeed(analogRead(1)); Serial.println ("Wave test!"); pinMode (2, OUTPUT); pinMode (3, OUTPUT); pinMode (4, OUTPUT); pinMode (5, OUTPUT); pinMode (sensorIn, INPUT); Als (! card.init_card()) {}
instellen van seriële bibliotheek 9600 bps
putstring_nl ("Card init. mislukt!"); terugkeer;
} Als (! card.open_partition()) {}
putstring_nl ("geen partitie!"); terugkeer;
} Als (! card.open_filesys()) {}
putstring_nl niet kon ("openen filesys"); terugkeer;
} Als (! card.open_rootdir()) {}
putstring_nl kon niet ("open dir"); terugkeer;
} putstring_nl ("bestanden gevonden:"); ls();
voor (ik = 0; ik < 5; i ++) {/ / max afstand krijgen voor vergelijking later / / maxDist += analogRead(5);
een [i] += analogRead(sensorIn); } insertionSort(a,5); ls();
}
void loop {readSensor(); uint8_t i, r char c, naam [15]; unsigned long currentMillis = millis();
Als (sensorRead > (maxDist + 20) & & (currentMillis - previousMillis > interval)) {previousMillis = currentMillis; Serial.println(maxDist-25); int songNumber = random(songCount);
Serial.Print ("Playing track #"); Serial.Print(songNumber); Serial.Print(""); Serial.println(name); switch(songNumber)
{geval 0: playcomplete ("BAA1. WAV"); breken; geval 1: playcomplete ("BAA2. WAV"); breken; geval 2: playcomplete ("BAA3. WAV"); breken; Case 3: playcomplete ("BAA4. WAV"); breken;
geval 4: playcomplete ("BAA5. WAV");
}
}
breken; Case 5:
playcomplete ("BAA6. WAV"); breken;
kast 6: playcomplete ("BAA7. WAV"); breken;
} sensorRead = 0;
} card.reset_dir();
ongeldig playcomplete(char *name) {uint16_t potval; uint32_t newsamplerate; playfile(name);
samplerate = wave.dwSamplesPerSec; terwijl (wave.isplaying) {}
kan je hier spullen! delay(50);
} card.close_file(f);
ongeldig playfile(char *name) {f = card.open_file(name); if (! f) {}
putstring_nl kon niet ("open bestand"); terugkeer;
} Als (! wave.create(f)) {}
putstring_nl ("niet een geldig WAV"); terugkeer;
} / / ok tijd om te spelen! Wave.Play();
} readSensor() {} ongeldig
for (int i = 0; ik < 5; i ++) {a[i]=analogRead(sensorIn);
}
insertionSort(a,5); Serial.Print ("max dis ="); Serial.println(maxDist); Serial.Print ("---laatste sensor waarde =");
}
Serial.Print(sensorRead); Serial.println("---");
VOID insertionSort (int arr [], int lengte) {int int j; int tmp;
voor (ik = 1; ik < lengte; i ++) {j = i;
terwijl (j > 0 & & arr [j - 1] > arr[j]) {tmp = arr [j];
}
}
ARR [j] = arr [j - 1]; ARR [j - 1] = tmp;
j--;
} / / matrix gesorteerd, nu verliezen lage en hoge waarden voor betere gemiddelde een [0] = 0; een [4] = 0; voor (ik = 0; ik < 5; i ++) {resultaten = resultaten + een [i];} resultaten / = 3; delen door 3 als 1 en 5 = 0 plaatsen als (fr == 0) {maxDist resultaten; = fr = 1;} anders sensorRead = resultaten; resultaten = 0; }
VOID ls() {char naam [13]; int ret; card.reset_dir(); putstring_nl ("bestanden gevonden:"); terwijl (1) {}
RET = card.get_next_name_in_dir(name); Als (! ret) {}
Card.reset_dir(); terugkeer;
} Serial.println(name);
}