Stap 5: Putting it together, deel 2
/* #include Bestand wortel; chipSelect tot en met '10' instellen als gebruikend het $2 SD kaart module of '4' als de
HC-SR04 Sensor gedeelte
https://www.DealExtreme.com/p/HC-sr04-ultrasonic-sensor-Distance-measuring-module-133696
Deze sketch leest een HC-SR04 ultrasone afstandsmeter en geeft als resultaat de
afstand tot het dichtstbijzijnde object in bereik. Om dit te doen, stuurt het een puls
aan de sensor te leiden van een lezing, luistert dan voor een pulse
om terug te keren. De lengte van de terugkerende puls is evenredig met
de afstand van het object van de sensor.
Het circuit:
* VCC aansluiting van de sensor in bijlage aan + 5V
* GND aansluiting van de sensor in bijlage op grond
* TRIG verbinding van de sensor gekoppeld aan digitale pin 2
* ECHO verbinding van de sensor gekoppeld aan digitale pin 4
Oorspronkelijke code voor Ping))) in het volgende voorbeeld is gemaakt door David A. Mellis
Aangepast voor HC-SR04 door Tautvidas Sipavicius
SD Card reader & speler gedeelte
NIET niet gebruik klasse-10 kaarten op dit project - ze zijn ook snel te bedienen met SPI
Gemaakt door NorseEngineering oktober 2013
*/
#include
TMRpcm tmrpcm;
Bestandsvermelding;
Ethernet-shield microSD kaart in plaats daarvan.
Const int chipSelect = 10;
Const int oldCard = SPI_HALF_SPEED;
Const int newCard = SPI_QUARTER_SPEED;
Const int trigPin = 2;
Const int echoPin = 4;
Const int geleid = 8;
De afstand hieronder die het geluid triggers (in voet). Moet een geheel getal
Const int afstand = 6;
Duur van de LED op fase.
Const int CLIP_DURATION = 10000;
De vernieuwingsfrequentie voor de sensor.
Const int tarief = 10;
instellen van cardType naar 'oldCard' als met behulp van een oude SD-kaart (meer dan een paar jaar oud) of
naar 'newCard' als een nieuwe aankoop klasse-4-kaart gebruikt.
int cardType = oldCard;
int wasPlaying = 0;
int inSwitch = 7;
int klaar = 0;
int begin = 0;
int pauseOn = 0;
unsigned long timeDiff = 0;
unsigned long timePress = 0;
VOID Setup {}
Serial.begin(9600);
pinMode led (, uitvoer);
Serial.Print ("\nInitializing SD card...");
pinMode (chipSelect, OUTPUT);
if (!. SD.begin(chipSelect,cardType)) {}
Serial.println("Failed!");
terugkeer;
}
Serial.println("done.");
tmrpcm.speakerPin = 9;
pinMode(inSwitch,INPUT_PULLUP);
digitalWrite(inSwitch,HIGH);
root = SD.open("/");
}
ongeldig loop(void) {}
lange duur, inch, cm, voeten;
pinMode (trigPin, OUTPUT);
digitalWrite (trigPin, laag);
delayMicroseconds(2);
digitalWrite (trigPin, hoge);
delayMicroseconds(10);
digitalWrite (trigPin, laag);
pinMode (echoPin, INPUT);
duur = pulseIn (echoPin, hoge);
duim = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
voeten = microsecondsToFeet(duration);
Serial.Print(feet);
Serial.Print ("ft,");
Serial.Print(inches);
Serial.Print ("in");
Serial.Print(cm);
Serial.Print("cm");
Serial.println();
Vlees van de code hier in deze instelling als verklaring.
if(feet < distance)
{
playNext();
delay(CLIP_DURATION);
}
delay(rate);
digitalWrite (led, laag);
}
ongeldig playNext() {}
digitalWrite (led, hoog);
entry = root.openNextFile();
Als (entry) {}
entry.Close();
tmrpcm.Play(entry.name());
wasPlaying = 1;
Serial.Print ("wasPlaying =");
Serial.println(wasPlaying);
} else {}
Als (wasPlaying == 1) {}
Serial.println ("voltooid afspelen.");
wasPlaying = 0;
klaar = 1;
start = 0;
root.rewindDirectory();
}
}
}
lange microsecondsToInches(long microseconds)
{
retourneren van microseconden / 74 / 2;
}
lange microsecondsToCentimeters(long microseconds)
{
retourneren van microseconden / 29 / 2;
}
lange microsecondsToFeet(long microseconds)
{
keren microsecondsToInches(microseconds) / 12;
}
Ik voegde ook een switch om de eerste rij van het breadboard dat de 9 volt voeding van het breadboard onderbreekt, zodat ik niet hoefde te openen het geval om te schakelen als in- en uitschakelen.
De code is ook dat hier is een tekstbestand.