Tandeloze, de Roaring pluche pop (3 / 7 stap)

Stap 3: Gedrags Code Overview


In de hoofdlus, lezen we voortdurend van de lichtsensor
Als de lichtsensor input boven een bepaalde waarde gaat, dan is de MP3 begint te spelen
Als de lichtsensor input beneden een bepaalde waarde gaat, is wordt het MP3 gestopt

Terwijl de MP3 wordt afgespeeld, wordt de lichtsensor input omgezet in een decibel niveau voor de MP3, waar meer gelijken luider geluid licht
Bovendien, de lichtsensor invoerwaarden besturingselementen de LED worden binnen de hoofdlus en de MP3-lus
Als de input verhogingen van de lichtsensor, de rode LED-verhogingen en de blauwe LED vermindert

Hier is de code die wordt gebruikt:

< code >

#include < SPI.h >

#include < SdFat.h >
#include < SdFatUtil.h >

#define TRUE 1
#define valse 0

Kaart van de Sd2Card;
SdVolume volume;
SdFile wortel;
SdFile spoor;

De toewijzing van de pin van de MP3 speler Shield. Zie het schema
#define MP3_XCS 6 //Control Chip Selecteer Pin (voor toegang tot de registers van de SPI controle/Status)
#define MP3_XDCS 7 //Data Chip Select / BSYNC Pin
#define MP3_DREQ 2 //Data verzoek Pin: speler vraagt om meer gegevens
#define MP3_RESET 8 //Reset is actief laag
Vergeet niet u voor het bewerken van de Sd2PinMap.h van de sdfatlib bibliotheek om te corrigeren van de controle de SD-kaart.

VS10xx SCI Registers
#define SCI_MODE 0x00
#define SCI_STATUS 0x01
#define SCI_BASS 0x02
#define SCI_CLOCKF 0x03
#define SCI_DECODE_TIME 0x04
#define SCI_AUDATA 0x05
#define SCI_WRAM 0x06
#define SCI_WRAMADDR 0x07
#define SCI_HDAT0 0x08
#define SCI_HDAT1 0x09
#define SCI_AIADDR 0x0A
#define SCI_VOL 0x0B
#define SCI_AICTRL0 0x0C
#define SCI_AICTRL1 0x0D
#define SCI_AICTRL2 0x0E
#define SCI_AICTRL3 0x0F

Dit is de naam van het bestand op de microSD-kaart die u graag wilt spelen
Stick met normale 8.3 nomeclature. Alle kleine letters werkt goed.
Opmerking: moet u de naam van de tracks op de SD-kaart met 001, 002, 003, enz.
Bijvoorbeeld verwacht de code om te spelen 'track002.mp3', niet track2.mp3.
char Tracknaam [] = "sound.mp3";
int titelnummer = 1;
int previousTrigger = 1; Dit geeft aan dat we al hebt geactiveerd op 1

char errorMsg [100]; Dit is een algemene array gebruikt voor sprintf van foutberichten

int inputPin = A0;
int inputValue = 0;
int blueOutputValue = 0;
int blueOutputLED = 5;
int redOutputValue = 0;
int redOutputLED = 10;
int outputVolume = 0;

lange lastCheck; Deze slaat de laatste milliseconde sinds wij een trekker

int is_playing;
int time_since_play;

int checkTriggers(void) {}

#define ONTDENDERING 100

int foundTrigger = 255;

Nadat u een trigger hebt geactiveerd, willen we niet te activeren op het voortdurend
Maar na 3 seconden, reset het nummer van de vorige trigger
Als ((previousTrigger! = 255) & & (millis() - lastCheck) > 3000) {}
lastCheck = millis();
previousTrigger = 255;
Serial.println ("vorige trigger reset");
}

Als (foundTrigger! = previousTrigger) {//We've kreeg een nieuwe trigger!
previousTrigger = foundTrigger;

Serial.Print("T");
Serial.println (foundTrigger, DEC);

Return(foundTrigger);
}
anders
Return(255); Geen triggers trok lage (geactiveerd)
}

playMP3 - opgenomen functie van SparkFun voorbeeld

VOID playMP3 (char * fileName) {}

Als (! track.open (& root, fileName, O_READ)) {//Open het bestand in Leesmodus.
sprintf (errorMsg, "Failed to open %s", fileName);
Serial.println(errorMsg);
terugkeer;
}

sprintf (errorMsg, "Playing track %s", fileName);
Serial.println(errorMsg);

uint8_t mp3DataBuffer [32]; Buffer 32 bytes. VS1053 kun je 32 bytes in een keer.
int need_data = TRUE;

while(1) {}
while(!digitalRead(MP3_DREQ)) {}
DREQ is laag, terwijl de ontvangstbuffer vol is
Kunt u hier iets anders doen, de buffer van de MP3 is volledige en gelukkig.
Misschien het volume instellen of testen om te zien hoeveel tijd we voordat we hoorbaar glitches horen kunt uitstellen

Als het MP3-IC blij is, maar we moeten nieuwe om gegevens te lezen van de SD, nu is een geweldige tijd om dit te doen
if(need_data == True) {}
Als (! track.read (mp3DataBuffer, sizeof(mp3DataBuffer))) {//Try lezen van 32 nieuwe bytes van het lied
Oh neen! Er is geen gegevens links om te lezen!
Tijd om af te sluiten
breken;
}
need_data = FALSE;
}

Controleren om te zien als we borgtocht op dit circuit moeten
if(checkTriggers()! = 255) {}
Serial.println ("afsluiten MP3!");
track.Close(); Sluit deze track!
previousTrigger = 255; De volgende controle truc in denken hebben we niet gezien een eerdere trigger
terugkeer;
}
}

if(need_data == True) {//This is hier in het geval dat hadden we nog niet alle vrije tijd om nieuwe gegevens te laden
Als (! track.read (mp3DataBuffer, sizeof(mp3DataBuffer))) {//Go uit naar SD-kaart en probeer het lezen van 32 nieuwe bytes van het lied
Oh neen! Er is geen gegevens links om te lezen!
Tijd om af te sluiten
breken;
}
need_data = FALSE;
}

Zodra DREQ wordt vrijgegeven (hoog) feed wij nu 32 bytes aan gegevens naar de VS1053 van onze SD Lees buffer
digitalWrite (MP3_XDCS, laag); Gegevens selecteren
voor (int y = 0; y < sizeof(mp3DataBuffer); y ++)
SPI.transfer(mp3DataBuffer[y]); Stuur byte van de SPI

digitalWrite (MP3_XDCS, hoge); Hef de selectie van gegevens
need_data = TRUE; We hebben net 32 bytes gedumpt in VS1053, zodat onze SD Lees buffer leeg is. Vlag instellen, dus we gaan krijgen meer gegevens

inputValue = analogRead(inputPin);

outputVolume = kaart (inputValue, 0, 1023, 60, -20); <---dit is waar je er harder/zachter afhankelijk van hoeveel licht uw marionet input krijgt

redOutputValue = kaart (inputValue, 0, 1023, 0, 255);
blueOutputValue = kaart (inputValue, 0, 1023, 255, 0);

Mp3SetVolume (outputVolume, outputVolume);

analogWrite (redOutputLED, redOutputValue);
analogWrite (blueOutputLED, blueOutputValue);

}

while(!digitalRead(MP3_DREQ)); Wachten op DREQ naartoe hoge aangeeft overdracht is voltooid
digitalWrite (MP3_XDCS, hoge); Hef de selectie van gegevens

track.Close(); Sluiten deze track

sprintf (errorMsg, "Track %s done!", fileName);
Serial.println(errorMsg);
}

VOID Setup
{
pinMode (MP3_DREQ, INPUT);
pinMode (MP3_XCS, uitvoer);
pinMode (MP3_XDCS, uitvoer);
pinMode (MP3_RESET, uitvoer);

digitalWrite (MP3_XCS, hoge); Hef de selectie van controle
digitalWrite (MP3_XDCS, hoge); Hef de selectie van gegevens
digitalWrite (MP3_RESET, laag); VS1053 gestoken hardware reset

pinMode (inputPin, INPUT);       de LDR declareren als een INPUT
pinMode (redOutputLED, OUTPUT);  de ledPin verklaren als uitgang
pinMode (blueOutputLED, OUTPUT);

Serial.begin(57600); Seriële gebruiken voor foutopsporing
Serial.println ("MP3 Player voorbeeld met behulp van de controle");

Setup SD-kaartinterface
pinMode (10, OUTPUT);       Pin 10 moet worden ingesteld als een uitgang voor de mededeling van de SD aan werken.
Als (! card.init(SPI_FULL_SPEED)) Serial.println ("fout: kaart init"); De SD-kaart initialiseren en configureren van de I/O pinnen.
Als (! volume.init (& kaart)) Serial.println ("fout: Volume ini"); Een volume op de SD-kaart initialiseren.
Als (! root.openRoot (& volume)) Serial.println ("fout: Opening root"); Open de hoofdmap van het volume.

Wij hebben geen behoefte aan opstelling van SPI voor VS1053, omdat dit al gebeurd door de SDfatlib

Pagina 12 van gegevensblad zijn max SCI leest CLKI/7. Input klok is 12.288 MHz.
Interne klok multiplier is 1.0 x na macht.
Daarom is de max snelheid van de SPI 1,75 MHz. Wij gebruiken 1MHz veilig te zijn.
SPI.setClockDivider(SPI_CLOCK_DIV16); De snelheid van de bus van de SPI ingesteld op 1MHz (16MHz / 16 = 1 MHz)
SPI.transfer(0xFF); Een dummy byte gooien in de bus

Initialiseren VS1053 chip
delay(10);
digitalWrite (MP3_RESET, hoge); Opvoeden van VS1053

Mp3SetVolume (20, 20); Stel het volume van de eerste (20 = - 10dB) LOUD
Mp3SetVolume (40, 40); Stel het volume van de eerste (20 = - 10dB) beheersbaar
Mp3SetVolume (80, 80); Stel het volume van de eerste (20 = - 10dB) rustiger

Nu dat we de VS1053 up and running hebben, verhogen van de interne klok multiplier en onze SPI-tarief omhoog
Mp3WriteRegister (SCI_CLOCKF, 0x60, 0x00); Set vermenigvuldiger naar 3.0 x

Pagina 12 van gegevensblad zijn max SCI leest CLKI/7. Input klok is 12.288 MHz.
Interne klok multiplier is nu 3 x.
Max snelheid van de SPI daarom dat 5 MHz. 4MHz zullen veilig zijn.
SPI.setClockDivider(SPI_CLOCK_DIV4); De snelheid van de bus van de SPI ingesteld op 4MHz (16MHz / 4 = 4 MHz)

MP3 IC setup voltooid

Serial.println ("gedaan met setup");

}

void loop
{
inputValue = analogRead(inputPin);

LED ogen bits (behoeften tweaking van waarden wanneer geplaatst in definitieve marionet)

redOutputValue = kaart (inputValue, 0, 1023, 0, 255);
blueOutputValue = kaart (inputValue, 0, 1023, 255, 0);
/ * Als (inputValue > 50)
{
blueOutputValue = 0;
}
Als (inputValue < 20)
{
redOutputValue = 0;
} */

Als (inputValue > 600) //if mond open genoeg is
{
Als (is_playing == 0)
{
playMP3(trackName);
is_playing = 1;
}
}
Als (inputValue < 500) / / als genoeg is worden gesloten door de mond
{
track.Close();
is_playing = 0;

}

Serial.Print(inputValue); om te zien als je licht sensor goed werkt
Serial.Print("\n");
analogWrite (redOutputLED, redOutputValue);
analogWrite (blueOutputLED, blueOutputValue);
}

Schrijven naar VS10xx registreren - van SparkFun voorbeeld
SCI: Overdracht van gegevens zijn altijd 16 bit. Wanneer een nieuwe SCI-transactie komt in
DREQ gaat laag. Dan moeten we wachten voor DREQ hoge om weer te gaan.
XCS moet laag zijn voor de volledige duur van de operatie.
VOID Mp3WriteRegister (unsigned char addressbyte, unsigned char highbyte, unsigned char lowbyte) {}
while(!digitalRead(MP3_DREQ)); Wachten op DREQ te gaan hoog die aangeeft dat IC is beschikbaar
digitalWrite (MP3_XCS, laag); Besturingselement SELECT

SCI bestaat uit de instructie byte byte van het adres en 16-bits gegevenswoord.
SPI.transfer(0x02); Instructie schrijven
SPI.transfer(addressbyte);
SPI.transfer(highbyte);
SPI.transfer(lowbyte);
while(!digitalRead(MP3_DREQ)); Wachten op DREQ naartoe hoge geeft opdracht is voltooid
digitalWrite (MP3_XCS, hoge); Hef de selectie van controle
}

VS10xx Volume Register - volume instellen functie instellen van SparkFun voorbeeld
VOID Mp3SetVolume (unsigned char leftchannel, unsigned char rightchannel) {}
Mp3WriteRegister (SCI_VOL, leftchannel, rightchannel);
}

< / code >

Gerelateerde Artikelen

Pop te helpen kinderen begrijpen ziekte

Pop te helpen kinderen begrijpen ziekte

ik heb gemaakt een pop om te helpen mijn jonge dochter van mijn vrouw terminale kanker beter te begrijpen.Ik heb een plucheachtig pop gewijzigd door toevoeging van inwendige organen betrokken, en geven een context voor het bespreken van de aankomende
Met behulp van 3d printen maken een nauwkeurige Orca speelgoed

Met behulp van 3d printen maken een nauwkeurige Orca speelgoed

Opmerking: als u mijn werk Gelieve te tekenen aan instructables (gratis) en gelieve stemming voor mij in deze wedstrijd van de technologie zodat ik blijven werk doen kan als dit... BedanktIk woon in Orlando Florida... Ik zie vaak de mascottes en orca
Hoe maak je een Waldorf 'Knoestige' pop

Hoe maak je een Waldorf 'Knoestige' pop

Knoestige poppen zijn niet uitzonderlijk moeilijk om te maken, maar het is lastig om de juiste van de verhoudingen. Een knoestige pop maakt gebruik van een Waldorf hoofd met een 'deken' lichaam dat knopen voor handen en voeten heeft. Het bedoeld voor
Ontwerp 12 sterrenbeelden 5200mah draagbare pluche Cartoon Power Bank

Ontwerp 12 sterrenbeelden 5200mah draagbare pluche Cartoon Power Bank

1. De slimme telefoon en andere gadgets zijn nu de noodzaak in ons leven. de ononderbroken gebruik kan niet ondersteund door de kracht van de batterij van de smartphone en tablet. Dus kopen wij ook sommige powerbanks als een extra vermogen. Maar de m
Puppy pluche uit een oude badjas

Puppy pluche uit een oude badjas

deze Pluche pup is schattig, zacht en zelfgemaakte uit een oude badjas! Ik maakte het patroon uit te kijken mijn zoon de andere Knuffeldier & nemen veel metingen te maken iets dergelijks. Het was niet zo eenvoudig als ik dacht dat het zou zijn! Om ee
Fox pluche

Fox pluche

ik vossen alot. (En draken.) Na een helaas mislukte poging tot een draak plush besloten heb ik om te proberen mijn hand op een vos. Gelukkig bleek de vos in recht.Dit is meer een soft sculpture of een kunst speelgoed/knuffels/pop dan "normale" p
Hoe gebruik schroot hout met Cool tafelblad maken of pop tabel

Hoe gebruik schroot hout met Cool tafelblad maken of pop tabel

ik had sommige schroot cedar decking dus ik een tafelblad voor mijn moeder en pop tabel voor mijn jongere zus maakte. Ik heb niet niet vlek en schilderen van de tabellen. Mijn moeder en zusje deed.Stap 1: Zoeken hout We hebben een enorme branden stap
Pop-op fiets pedaal

Pop-op fiets pedaal

U bent fietsen op de weg, met een echt leuke dag, en uw fiets pedaal pauzes. Nu ben je in een echte augurk. Niet alleen heb je niet een vrije pedaal, maar je hoeft niet het gereedschap om het te installeren zelfs als u het pedaal gehad. Dat is wannee
Eenvoudige pop uit router tabel

Eenvoudige pop uit router tabel

Router klopt nadat tabel zag het belangrijkste instrument in de werkplaats. Duik router biedt tal van manieren wijzigen van hout tot de gewenste vorm. Zelfde ding ondersteboven gekoppeld aan een tabel verruimt de mogelijkheden nog meer.Volg me aangez
Pop-, licht-up, flat-pack menora kaart

Pop-, licht-up, flat-pack menora kaart

Ik heb genoeg van LED Menorahs, een aantal menora pop-up kaarten en een handvol LED menora wenskaarten, maar bij mijn weten is dit de eerste pop-, licht-up menora kaart in de wereld. Mogelijk is er een goede reden voor dit gebrek aan pop-Menorahs wer
DIY 3D Kirigami kaart maken van ideeën: Hoe maak je hart Pop-Up liefde kaart

DIY 3D Kirigami kaart maken van ideeën: Hoe maak je hart Pop-Up liefde kaart

Voor de ideeën van de Gift van de dag van de Valentijnskaart is een Hart inlegkaart ideaal! DIY geschenken overschrijding van je geest, zoekt alle Romantische liefde kaarten voor uw vriend en vriendin.Romantische kaarten voor uw geliefde zijn altijd
Een Sir Finley Mrrgglton pluche verdienen Hearthstone

Een Sir Finley Mrrgglton pluche verdienen Hearthstone

Mijn man is buitengewoon moeilijk om te kopen, als hij wil nooit iets. Het is onze kleine familie grap. Maar deze kerst, maakte hij een grapje suggestie als hij Hearthstone speelde, en werd liefdevol de nieuwe uitbreiding van de Liga van de ontdekkin
"Exploding" Bomb Cake Pops

"Exploding" Bomb Cake Pops

     There's cake. En dan is er cake pops. En nu er is de exploderende bom cake pops! Deze heerlijke taarten op een stick zijn volledig uitgerust met een candy "zekering" en een chocolade "bom" en bevatten zelfs enkele explosieve krach
Hoe maak je Cake Pops stapsgewijze

Hoe maak je Cake Pops stapsgewijze

Deze fundamentele cake pop recept is eenvoudig en makkelijk te volgen, perfect voor beginners.Stap 1: Cake Pop SuppliesIngrediënten en benodigdheden voor het maken van cake POP's:-Een vak cake mix en ingrediënten om de cake te maken-Een blikje glazuu