Shaun bullriga fåren (5 / 8 steg)
Steg 5: kod
Nästa steg är att lägga till koden till din Arduino mikro-controller.
Om du inte har programvaran Arduino eller IDE kan du hämta den på Arduino.cc
Anslut din Arduino till din dator och skapa ett nytt projekt i Arduino IDE.
Klistra in följande kod i och ladda upp den till Arduino.
Fåren dörrklocka / / maj 2011 av Todd Miller baserat på Adafruit exempelkod / / spelar upp ett ljud när sensorn utlöses, i detta fall får baaing använder 7
låter och plockar en på måfå / / delar innehålla Arduino Uno, WAV sköld, liten 8 ohms högtalare och Sharp
GP2Y0A02 avstånd sensor / / för att monteras inuti en Shaun The Sheep från Wallace & Gromet
#include < AF_Wave.h > < avr/pgmspace.h > #include #include "util.h" #include "wave.h" AF_Wave kort;
Fil f; Wavefile våg; bara en! uint8_t tracknum = 0; uint16_t samplerate;
#define sensorIn 0 int songCount = 7. int a [5]. int resultat.
int jag = 0; int maxDist = 0; int sensorRead = 0; int fr = 0; lång previousMillis = 0; långa intervall = 3000;
void setup() {Serial.begin(9600); randomSeed(analogRead(1)); Serial.println ("Wave test!"); pinMode (2, utgång); pinMode (3, OUTPUT); pinMode (4, OUTPUT); pinMode (5, OUTPUT); pinMode (sensorIn, ingång); om (! card.init_card()) {
Ställ in följetong bibliotek på 9600 bps
putstring_nl ("kort init. misslyckades!"); hemkomst.
} om (! card.open_partition()) {
putstring_nl ("ingen partition!"); hemkomst.
} om (! card.open_filesys()) {
putstring_nl ("kunde inte öppna filesys"); hemkomst.
} om (! card.open_rootdir()) {
putstring_nl ("kunde inte öppna dir"); hemkomst.
} putstring_nl ("filer som hittas:"); LS();
för (jag = 0; jag < 5; i ++) {/ / få max avstånd för jämförelse senare / / maxDist += analogRead(5);
en [i] += analogRead(sensorIn); } insertionSort(a,5); LS();
}
void loop() {readSensor(); uint8_t i, r, char c, namn [15], osignerade långa currentMillis = millis();
om (sensorRead > (maxDist + 20) & & (currentMillis - previousMillis > intervall)) {previousMillis = currentMillis; Serial.println(maxDist-25); int songNumber = random(songCount);
Serial.Print ("spela spår #"); Serial.Print(songNumber); Serial.Print(""); Serial.println(Name); Switch(songNumber)
{fall 0: playcomplete ("BAA1. WAV"); bryta; fall 1: playcomplete ("BAA2. WAV"); bryta; fall 2: playcomplete ("BAA3. WAV"); bryta; fall 3: playcomplete ("BAA4. WAV"); bryta;
fall 4: playcomplete ("BAA5. WAV");
}
}
bryta; fall 5:
playcomplete ("BAA6. WAV"); bryta;
mål 6: playcomplete ("BAA7. WAV"); bryta;
} sensorRead = 0;
} card.reset_dir();
void playcomplete(char *name) {uint16_t potval; uint32_t newsamplerate; playfile(name);
samplerate = wave.dwSamplesPerSec; samtidigt (wave.isplaying) {
Du kan göra sånt här! Delay(50);
} card.close_file(f);
void playfile(char *name) {f = card.open_file(name); om (! f) {
putstring_nl kunde inte ("öppna filen"); hemkomst.
} om (! wave.create(f)) {
putstring_nl ("inte en giltig WAV"); hemkomst.
} / / ok tid att spela! Wave.Play();
} void readSensor() {
för (int jag = 0; jag < 5; i ++) {a[i]=analogRead(sensorIn);
}
insertionSort(a,5); Serial.Print ("max dis ="); Serial.println(maxDist); Serial.Print ("---slutliga sensorn värde =");
}
Serial.Print(sensorRead); Serial.println("---");
void insertionSort (int arr [], int längd) {int jag; int j; int tmp;
för (jag = 1; jag < längd; i ++) {j = i.
medan (j > 0 & & arr [j - 1] > arr[j]) {tmp = arr [j];
}
}
Arr [j] = arr [j - 1]. Arr [j - 1] = tmp;
j--;
} / / array sorterade, nu förlorar låga och höga värden för bättre genomsnittliga [0] = 0; en [4] = 0; för (jag = 0; jag < 5; i ++) {resultat = resultat + en [i];} resultat / = 3; dividera med 3 som förlägger 1 och 5 = 0 om (fr == 0) {maxDist = resultat, fr = 1;} annat sensorRead = resultat. resultat = 0; }
void ls() {char namn [13]; int ret; card.reset_dir(); putstring_nl ("filer som hittas:"); samtidigt (1) {
ret = card.get_next_name_in_dir(name); om (! ret) {
Card.reset_dir(); hemkomst.
} Serial.println(name);
}