Tissue Box gitarr - Light strängar (3 / 3 steg)
Steg 3: kodning
#include < NewPing.h >
#include < SoftwareServo.h >
#include < FatReader.h >
#include < SdReader.h >
#include < avr/pgmspace.h >
#include "WaveUtil.h"
#include "WaveHC.h"#define TRIGGER_PIN 7
#define ECHO_PIN 6
#define MAX_DISTANCE 500SdReader kort;
FatVolume vol;
FatReader rot.
FatReader f;WaveHC våg;
NewPing sonar (TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
SoftwareServo servo1;unsigned int pingSpeed = 50;
osignerade långa pingTimer;byte knappar [] = {A0, A1, A2, A3, A4, A5};
#define NUMBUTTONS sizeof(buttons)
int freeRam(void)
{
extern int __bss_end;
extern int * __brkval;
int free_memory;
om ((int) __brkval == 0) {
free_memory = ((int) & free_memory)-((int) & __bss_end);
}
annat {
free_memory = ((int) & free_memory)-((int) __brkval);
}
återvända free_memory;
}void sdErrorCheck(void)
{
om (! card.errorCode()) återvända;
putstring ("\n\rSD I/O fel:");
Serial.Print(Card.ErrorCode(), HEX);
putstring (",");
Serial.println(Card.errorData(), HEX);
While(1);
}void setup() {
Serial.BEGIN(115200);servo1.attach(9);
om (! card.init(true)) {
om (! card.init()) {
putstring_nl ("kort init. misslyckades!");
sdErrorCheck();
While(1);
card.partialBlockRead(true);uint8_t del;
för (del = 0; del < 5; del ++) {
om (vol.init (kort, del))
bryta;
}
om (del == 5) {
sdErrorCheck();
While(1);
}putstring ("använda partition");
Serial.Print (del, DEC);
putstring (", typ är FAT");
Serial.println(Vol.fatType(),dec);om (! root.openRoot(vol)) {
putstring_nl kan inte ("öppna rotfästa dir!");While(1);
}}
}
}
void loop() {Delay(100);
unsigned int oss = sonar.ping();
Serial.Print ("Ping:");
Serial.Print(US / US_ROUNDTRIP_CM);
Serial.println("cm");om ((uS / US_ROUNDTRIP_CM) < 50) {
servo1.write(160);
SoftwareServo::refresh();
myservo1.write(90);
}
annat {
servo1.write(0);
SoftwareServo::refresh();
myservo1.write(0);
}byte i.
statiska byte spelar = -1;
int sensor0 = analogRead (knappar [0]);
int sensor1 = analogRead (knappar [1]);
int sensor2 = analogRead (knappar [2]);
int sensor3 = analogRead (knappar [3]);
int sensor4 = analogRead (knappar [4]);
int sensor5 = analogRead (knappar [5]);
om (analogRead (knappar [0]) > 900) {
om (spela! = 0) {
spela = 0;
playfile("0.wav");
}}
Serial.Print ("LDR A1 =");
Serial.Print(sensor1);
om (analogRead (knappar [1]) > 900) {
om (spela! = 0) {
spela = 0;
playfile("1.wav");
}
}
Serial.Print ("LDR A2 =");
Serial.Print(sensor2);
om (analogRead (knappar [2]) > 900) {
om (spela! = 0) {
spela = 0;
playfile("2.wav");
}
}
Serial.Print ("LDR A3 =");
Serial.Print(sensor3);
om (analogRead (knappar [3]) > 150) {
om (spela! = 0) {
spela = 0;
playfile("3.wav");
}
}
Serial.Print ("LDR A4 =");
Serial.Print(sensor4);
om (analogRead (knappar [4]) > 150) {
om (spela! = 0) {
spela = 0;
playfile("4.wav");
}
}
Serial.Print ("LDR A5 =");
Serial.println(sensor5);
om (analogRead (knappar [5]) > 150) {
om (spela! = 0) {
spela = 0;
playfile("5.wav");
}
}
om (! wave.isplaying) {
spela = -1;
}
}
void playcomplete(char *name) {
playfile(Name);
samtidigt (wave.isplaying) {
}
}
void playfile(char *name) {
om (wave.isplaying) {
Wave.stop();
}
om (! f.open (rot, namn)) {
putstring kunde inte ("öppna filen"); Serial.Print(Name); hemkomst.
}
om (! wave.create(f)) {
putstring_nl ("inte en giltig WAV"); hemkomst.
}
Wave.Play();
}
Du måste installera Softwareservo bibliotek till din arduino eftersom waveshield och Servo använder samma timern i arduino... men när du använder Softwareservo bibliotek allt fungerar bra.
Happy byggnad