Prata pumpa (5 / 7 steg)
Steg 5: Att sätta den tillsammans, en del 2
/* Ursprungliga koden för Ping))) exempel skapades av David A. Mellis SD-kortläsare & spelare Portion Skapad av NorseEngineering oktober 2013 #include Fil root; Ange chipSelect till "10" om använda modulen $2 SD-kort eller "4" om du använder den CONST int oldCard = SPI_HALF_SPEED; ställa in cardType till 'oldCard' om med gamla SD-kort (mer än några år gammal) eller
HC-SR04 Sensor Portion
https://www.DealExtreme.com/p/HC-sr04-Ultrasonic-sensor-Distance-Measuring-module-133696
Denna skiss läser en HC-SR04 ultraljud avståndsmätare och returnerar den
avståndet till närmaste objektet i intervallet. Det gör skickar det en puls
till sensorn att inleda en behandling, då lyssnar efter en puls
för att återgå. Längden på den återkommande pulsen är proportionell mot
distansera av objektet från sensorn.
Krets:
* VCC anslutning av sensor kopplad till + 5V
* GND anslutning av sensor kopplad till marken
* TRIG anslutning av sensor kopplad till digital stift 2
* EKO anslutning av sensor kopplad till digital stift 4
Anpassad för HC-SR04 av Tautvidas Sipavicius
GÖR inte Använd klass 10 kort på detta projekt - de är för snabb att arbeta med SPI
*/
#include
TMRpcm tmrpcm;
Filpost;
Ethernet-shield microSD-kort i stället.
CONST int chipSelect = 10;
CONST int newCard = SPI_QUARTER_SPEED;
CONST int trigPin = 2;
CONST int echoPin = 4;
CONST int ledde = 8.
Avståndet nedan som ljudet utlöser (i feet). Måste vara ett heltal
CONST int avstånd = 6;
Varaktigheten av LED på fas.
CONST int CLIP_DURATION = 10000;
Uppdateringsfrekvens för sensorn.
CONST int takt = 10;
till "newCard" om du använder ett nyligen-köp klass-4 kort.
int cardType = oldCard;
int wasPlaying = 0;
int inSwitch = 7.
int klar = 0;
int start = 0;
int pauseOn = 0;
osignerade långa timeDiff = 0;
osignerade långa timePress = 0;
void setup() {
Serial.BEGIN(9600);
pinMode ledde (, OUTPUT);
Serial.Print ("\nInitializing SD kortet...");
pinMode (chipSelect, produktionen);
IF (!. SD.begin(chipSelect,cardType)) {
Serial.println("failed!");
hemkomst.
}
Serial.println("Done.");
tmrpcm.speakerPin = 9;
pinMode(inSwitch,INPUT_PULLUP);
digitalWrite(inSwitch,HIGH);
rot = SD.open("/");
}
void loop(void) {
lång varaktighet, tum, cm, fötter.
pinMode (trigPin, produktionen);
digitalWrite (trigPin, låg);
delayMicroseconds(2);
digitalWrite (trigPin, hög);
delayMicroseconds(10);
digitalWrite (trigPin, låg);
pinMode (echoPin, ingång);
längd = pulseIn (echoPin, hög);
tum = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
fot = microsecondsToFeet(duration);
Serial.Print(feet);
Serial.Print ("ft,");
Serial.Print(inches);
Serial.Print ("in");
Serial.Print(cm);
Serial.Print("cm");
Serial.println();
Kött av koden här i detta om uttalande.
IF(feet < Distance)
{
playNext();
Delay(CLIP_DURATION);
}
Delay(Rate);
digitalWrite (ledde, låg);
}
void playNext() {
digitalWrite (ledde, högt);
Entry = root.openNextFile();
om (post) {
Entry.Close();
tmrpcm.Play(Entry.Name());
wasPlaying = 1;
Serial.Print ("wasPlaying =");
Serial.println(wasPlaying);
} annat {
om (wasPlaying == 1) {
Serial.println ("slutförd uppspelning.");
wasPlaying = 0;
färdig = 1;
start = 0;
root.rewindDirectory();
}
}
}
lång microsecondsToInches(long microseconds)
{
återvända mikrosekunder / 74 / 2;
}
lång microsecondsToCentimeters(long microseconds)
{
återvända mikrosekunder / 29 / 2;
}
lång microsecondsToFeet(long microseconds)
{
återgå microsecondsToInches(microseconds) / 12;
}
Jag lade också till en switch till den första raden i den bakbord som avbryter 9 volt leverans till bakbord, så att jag inte behövde öppna fallet att vända om på och av.
Koden är också här är en textfil.