Étape 5: Code
L’étape suivante consiste à ajouter le code à votre microcontrôleur Arduino.
Si vous n’avez pas le logiciel Arduino ou IDE vous pouvez le télécharger sur Arduino.cc
Branchez votre Arduino sur votre ordinateur et créez un nouveau projet dans l’IDE Arduino.
Collez le code suivant dans et transférez-le sur l’Arduino.
Sonnette de mouton / / mai 2011 par Todd Miller basé sur le code d’exemple Adafruit / / émet un son lorsque le capteur est déclenché, dans ce cas mouton bêlements utilise 7
sonne et on choisit au hasard / / pièces incluent Arduino Uno, WAV bouclier, Président petit 8 ohms et Sharp
Capteur de distance GP2Y0A02 / / pour être montés à l’intérieur d’un Shaun The Sheep Wallace & Gromet
#include < AF_Wave.h > #include < avr/pgmspace.h > #include « util.h » #include « wave.h » AF_Wave carte ;
Fichier f ; Wavefile vague ; seul ! uint8_t tracknum = 0 ; uint16_t taux d’échantillonnage ;
#define sensorIn 0 int songCount = 7 ; int a [5] ; résultats int ;
int i = 0 ; int maxDist = 0 ; int sensorRead = 0 ; int fr = 0 ; long previousMillis = 0 ; intervalle long = 3000 ;
void setup() {Serial.begin(9600) ; randomSeed(analogRead(1)) ; Serial.println ("vague test!") ; pinMode (sortie 2) ; pinMode (3, sortie) ; pinMode (sortie 4) ; pinMode (5, sortie) ; pinMode (sensorIn, entrée) ; Si (! card.init_card()) {}
mettre en place une bibliothèque série à 9600 bps
putstring_nl ("carte init. a échoué!") ; retour ;
} Si (! card.open_partition()) {}
putstring_nl ("aucune partition!") ; retour ;
} Si (! card.open_filesys()) {}
putstring_nl ("Impossible d’ouvrir filesys") ; retour ;
} Si (! card.open_rootdir()) {}
putstring_nl ("Impossible d’ouvrir dir") ; retour ;
} putstring_nl ("fichiers trouvés:") ; ls() ;
pour (i = 0; j’ai < 5; i ++) {/ / obtenir la distance max pour la comparaison plus tard / / maxDist += analogRead(5) ;
un [i] += analogRead(sensorIn) ; } insertionSort(a,5) ; ls() ;
}
void loop() {readSensor() ; uint8_t i, r; c char nom [15]; unsigned long currentMillis = millis() ;
Si (sensorRead > (maxDist + 20) & & (currentMillis - previousMillis > interval)) {previousMillis = currentMillis ; Serial.println(maxDist-25) ; int songNumber = random(songCount) ;
Serial.Print ("jeu track #") ; Serial.Print(songNumber) ; Serial.Print("") ; Serial.println(Name) ; Switch(songNumber)
{case 0: playcomplete ("BAA1. « « « WAV ») ; rupture ; cas 1: playcomplete ("BAA2. « « « WAV ») ; rupture ; cas 2: playcomplete ("BAA3. « « « WAV ») ; rupture ; case 3: playcomplete ("BAA4. « « « WAV ») ; rupture ;
case 4: playcomplete ("BAA5. « « « WAV ») ;
}
}
rupture ; cas no 5 :
playcomplete ("BAA6. « « « WAV ») ; rupture ;
case 6: playcomplete ("BAA7. « « « WAV ») ; rupture ;
} sensorRead = 0 ;
} card.reset_dir() ;
void playcomplete(char *name) {uint16_t potval ; uint32_t newsamplerate ; playfile(name) ;
taux d’échantillonnage = wave.dwSamplesPerSec ; alors que {(wave.isplaying)
vous pouvez faire des choses ici ! Delay(50) ;
} card.close_file(f) ;
void playfile(char *name) {f = card.open_file(name) ; if (! f) {}
putstring_nl ("Impossible d’ouvrir le fichier") ; retour ;
} Si (! wave.create(f)) {}
putstring_nl ("pas un valide" WAV") ; retour ;
} / / ok temps de jouer ! Wave.Play() ;
} void readSensor() {}
pour (int i = 0; i < 5; i ++) {a[i]=analogRead(sensorIn) ;
}
insertionSort(a,5) ; Serial.Print ("dis max =") ; Serial.println(maxDist) ; Serial.Print ("---valeur capteur final =") ;
}
Serial.Print(sensorRead) ; Serial.println("---") ;
Sub insertionSort (int arr [], int length) {int i, int j; int tmp ;
pour (i = 1; i < longueur; i ++) {j = i ;
tandis que (j > 0 & & arr [j - 1] > arr[j]) {tmp = arr [j] ;
}
}
arr [j] = arr [j - 1] ; arr [j - 1] = tmp ;
j--;
} / / Tableau trié, maintenant perdre les valeurs basse et haute pour la meilleure moyenne a [0] = 0 ; [4] = 0 ; pour (i = 0; i < 5; i ++) {résultats = résultats + un [i];} résultats / = 3 ; diviser par 3 comme places de 1 et 5 = 0 si (fr == 0) {maxDist = résultats; fr = 1;} else sensorRead = résultats ; résultats = 0 ; }
void ls() {char nom [13]; int ret ; card.reset_dir() ; putstring_nl ("fichiers trouvés:") ; tandis que (1) {}
RET = card.get_next_name_in_dir(name) ; Si (! ret) {}
Card.reset_dir() ; retour ;
} Serial.println(name) ;
}