Bara Veggin med en Arduino Beetbox (7 / 8 steg)
Steg 7: Full Arduino Beetbox kod
#include < CapacitiveSensor.h >#include < WaveHC.h >
#include < WaveUtil.h >
/*
* Använder ett högt värde motstånd t.ex. 10M mellan skicka pin och ta emot pin
* Motstånd effekter känslighet, experiment med värden, 50K - 50M. Större motstånd värden ge större sensor värden.
* Ta emot pin är givarstaven.
*/
SdReader kort; Detta objekt innehåller information för kortet char filnamn [13].
FatVolume vol; Detta innehåller information för partitionen på kortet
FatReader rot. Detta innehåller information för volymer rotmapp
FatReader fil. Det här objektet representerar WAV-fil för en pi siffra eller period
WaveHC våg; Detta är enda våg (audio)-objektet, eftersom vi bara kommer att spela en i taget
Avkommentera nästa rad om du vill aktivera Debug Serial.print() uttalanden
#define DEBUG
#define error(msg) error_P(PSTR(msg)) CapacitiveSensor cs_9_6 = CapacitiveSensor(9,6); 10 M motstånd mellan stift 9 & 6, stift 6 är givarstaven, lägga till en tråd och eller folie om så önskas flyta calVal1 = 0,0;
CapacitiveSensor cs_9_7 = CapacitiveSensor(9,7);
CapacitiveSensor cs_9_8 = CapacitiveSensor(9,8);
flyta calVal2 = 0,0;
flyta calVal3 = 0,0;
flyta total1 = 0,0;
flyta total2 = 0,0;
flyta total3 = 0,0;
int jag = 0;
void setup()
{
Serial.BEGIN(9600);
om (! card.init()) {
fel ("kort init. misslyckades!");
}
om (! vol.init(card)) {
fel ("ingen partition!");
}
om (! root.openRoot(vol)) {
fel kunde inte ("öppna dir");
}
PgmPrintln ("filer som hittas:");
root.ls();
cs_9_6.reset_CS_AutoCal(); autocalibrate kanal 1
cs_9_7.reset_CS_AutoCal(); autocalibrate kanal 2
cs_9_8.reset_CS_AutoCal(); autocalibrate kanal 3
cs_9_6.set_CS_AutocaL_Millis(0x00001000); autocalibrate intervall på kanal 1
cs_9_7.set_CS_AutocaL_Millis(0x00001000); autocalibrate intervall på kanal 2
cs_9_8.set_CS_AutocaL_Millis(0x00001000); autocalibrate intervall på kanal 3
pinMode (14, OUTPUT);
}
void loop()
{
total1 = cs_9_6.capacitiveSensor(30);
total2 = cs_9_7.capacitiveSensor(30);
total3 = cs_9_8.capacitiveSensor(30);
om (jag < 60) {/ / kalibrera sensorn baslinje #ifdef DEBUG om (total1 > 0,8 * calVal1 & & total2 > 0,8 * calVal2) {
digitalWrite (14, hög).
calVal1 = 0.1*float(total1) + 0,9 * calVal1;
i ++;
}
annars om (jag < 120) { / / kalibrera sensorn baslinje
digitalWrite (14, låg).
calVal2 = 0.1*float(total2) + 0,9 * calVal2;
i ++;
}
annars om (jag < 180) { / / kalibrera sensorn baslinje
digitalWrite (14, hög).
calVal3 = 0.1*float(total3) + 0,9 * calVal3;
i ++;
}
annat {
digitalWrite(14,LOW);
}
Serial.Print(total1);
Serial.print("\t");
Serial.Print(total2); / / Skriv ut sensordata 2
Serial.print("\t");
Serial.println(total3); / / Skriv ut sensordata 3
Serial.Print ("CAL: \t");
Serial.Print(calVal1); / / Skriv ut sensordata 1
Serial.print("\t");
Serial.Print(calVal2); / / Skriv ut sensordata 2
Serial.print("\t");
Serial.println(calVal3); / / Skriv ut sensordata 3
#endif
strcpy_P (filnamn, PSTR ("BUFF1. WAV"));
Serial.println(filename);
playfile(filename);
}
annars om (total2 > 0,8 * calVal2 & & total3 > 0,8 * calVal3) {
strcpy_P (filnamn, PSTR ("HAT. WAV"));
Serial.println(filename);
playfile(filename);
}
annars om (total1 > 0,8 * calVal1) {
strcpy_P (filnamn, PSTR ("CLICK1. WAV"));
Serial.println(filename);
playfile(filename);
}
annars om (total2 > 0,8 * calVal2) {
strcpy_P (filnamn, PSTR ("BOOM1. WAV"));
Serial.println(filename);
playfile(filename);
}
annars om (total3 > 0,8 * calVal3) {
strcpy_P (filnamn, PSTR ("BOOMHAA1. WAV"));
Serial.println(filename);
playfile(filename);
}
Delay(10); godtyckliga dröjsmål att begränsa data till seriell port
}
/////////////////////////////////// HELPERS
/*
* skriva ut felmeddelande och stoppa
*/
void error_P (const char * str) {
PgmPrint ("fel:");
SerialPrint_P(str);
sdErrorCheck();
While(1);
}
/*
* skriva ut felmeddelande och stoppa om SD i/o-fel
*/
void sdErrorCheck(void) {
om (! card.errorCode()) återvända;
PgmPrint ("\r\nSD I/O fel:");
Serial.Print(Card.ErrorCode(), HEX);
PgmPrint (",");
Serial.println(Card.errorData(), HEX);
While(1);
}
/*
* Spela upp en fil och vänta på att slutföra
*/
void playcomplete(char *name) {
playfile(Name);
samtidigt (wave.isplaying);
om ett fel inträffat samtidigt som du spelar
sdErrorCheck();
}
/*
* Öppna och börja spela en WAV-fil
*/
void playfile(char *name) {
om (wave.isplaying) {/ / redan spelar något, så sluta det!
Wave.stop(); Sluta
}
om (! file.open (rot, namn)) {
PgmPrint kunde inte ("öppna filen");
Serial.Print(Name);
hemkomst.
}
om (! wave.create(file)) {
PgmPrintln ("inte en giltig WAV");
hemkomst.
}
OK dags att spela!
Wave.Play();
}