Édentée, la marionnette peluche Roaring (3 / 7 étapes)

Étape 3: Code comportemental Overview

Dans la boucle principale, on peut lire en permanence de la cellule photoélectrique
Si l’entrée de capteur de luminosité dépasse une certaine valeur, le MP3 commence alors à jouer
Si l’entrée de capteur de lumière passe au-dessous d’une certaine valeur, alors le MP3 est arrêté

Alors que le MP3 est jouée, l’entrée du capteur de lumière est transformée en un niveau de décibels pour le MP3, où plus de lumière est égal à son plus fort
En outre, le capteur de luminosité d’entrée des valeurs de contrôles la LED à l’intérieur de la boucle principale et la boucle de MP3
Comme les hausses d’entrée du capteur de lumière, les augmentations de LED rouges et la LED bleue diminue

Voici le code utilisé :

< code >

#include < SPI.h >

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

#define vrai 1
#define faux 0

Carte de Sd2Card ;
SdVolume volume ;
SdFile racine ;
Piste de SdFile ;

Cartographie de MP3 Player bouclier de broche. Voir le schéma
#define MP3_XCS 6 //Control accès sélectionnez puce (pour l’accès aux registres de SPI/statut)
#define MP3_XDCS 7 //Data Chip Select / BSYNC Pin
#define MP3_DREQ 2 //Data demander Pin : joueur réclame davantage de données
#define MP3_RESET 8 //Reset est basse active
N’oubliez pas que vous devez modifier le Sd2PinMap.h de la bibliothèque de sdfatlib pour corriger le contrôle de la carte SD.

VS10xx SCI registres
#define SCI_MODE 0 x 00
#define SCI_STATUS 0 x 01
#define SCI_BASS 0 x 02
#define SCI_CLOCKF 0 x 03
#define SCI_DECODE_TIME 0 x 04
#define SCI_AUDATA 0 x 05
#define SCI_WRAM 0 x 06
#define SCI_WRAMADDR 0 x 07
#define SCI_HDAT0 0 x 08
#define SCI_HDAT1 0 x 09
#define SCI_AIADDR 0x0A
#define SCI_VOL 0x0B
#define SCI_AICTRL0 0x0C
#define SCI_AICTRL1 0x0D
#define SCI_AICTRL2 0x0E
#define SCI_AICTRL3 0x0F

C’est le nom du fichier sur la carte microSD que vous souhaitez jouer
Stick avec nomenclature 8.3 normal. Tout en minuscule fonctionne bien.
Remarque : vous devez nommer les pistes sur la carte SD avec 001, 002, 003, etc..
Par exemple, le code s’attend à jouer « track002.mp3 », pas de track2.mp3.
char trackName [] = ".mp3" ;
le numéro de piste int = 1 ;
int previousTrigger = 1 ; Cela signifie que nous avons déjà déclenchée sur 1

errorMsg Char [100] ; Il s’agit d’un tableau générique utilisé pour sprintf des messages d’erreur

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

long lastCheck ; Cette option stocke la dernière milliseconde puisque nous avons eu un déclencheur

int is_playing ;
int time_since_play ;

int checkTriggers(void) {}

#define DEBOUNCE 100

int foundTrigger = 255 ;

Une fois qu’un déclencheur est activé, nous ne voulons pas déclencher à ce sujet perpétuellement
Mais après 3 secondes, réinitialiser le numéro précédent de la gâchette
Si ((previousTrigger! = 255) & & (millis() - lastCheck) > 3000) {}
lastCheck = millis() ;
previousTrigger = 255 ;
Serial.println ("reset de déclenchement de précédente") ;
}

Si (foundTrigger! = previousTrigger) {//We've a obtenu un nouveau déclencheur !
previousTrigger = foundTrigger ;

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

Return(foundTrigger) ;
}
d’autre
Return(255) ; Aucun déclencheur ne tiré faible (activé)
}

playMP3 - incluse fonction de SparkFun exemple

void playMP3 (char * fileName) {}

Si (! track.open (& racine, fileName, O_READ)) {//Open le fichier en mode lecture.
sprintf (errorMsg, « Impossible d’ouvrir %s », fileName) ;
Serial.println(errormsg) ;
retour ;
}

sprintf (errorMsg, « Piste de jeu %s », fileName) ;
Serial.println(errormsg) ;

uint8_t mp3DataBuffer [32] ; Tampon de 32 octets. VS1053 peuvent prendre 32 octets à un aller.
int need_data = TRUE ;

{while(1)}
{while(!digitalRead(MP3_DREQ))}
DREQ est faible alors que le tampon de réception est plein
Vous pouvez faire quelque chose ici, la mémoire tampon du MP3 est pleine et heureuse.
Peut-être régler le volume ou la tester pour voir combien nous pouvons retarder avant que nous entendons glitches audibles

Si l’EI MP3 est heureux, mais il faut lire les nouvelles données de la carte SD, est maintenant le moment idéal pour faire
if(need_data == true) {}
Si (! track.read (mp3DataBuffer, sizeof(mp3DataBuffer))) {//Try lecture 32 octets de nouveau de la chanson
Oh non ! Il n’y a aucune gauche de données à lire !
Temps de sortie
rupture ;
}
need_data = FALSE ;
}

Vérifiez pour voir si nous avons besoin de caution sur cette piste
if(checkTriggers()! = 255) {}
Serial.println ("sortie MP3!") ;
Track.Close() ; Fermer cette piste !
previousTrigger = 255 ; Tour de la prochaine vérification en pensant, nous n’avons pas vu un déclencheur précédent
retour ;
}
}

if(need_data == true) {//This est ici dans le cas où nous n’avons pas eu le temps libre pour charger les nouvelles données
Si (! track.read (mp3DataBuffer, sizeof(mp3DataBuffer))) {//Go sur carte SD et essayez de lire 32 octets de nouveau de la chanson
Oh non ! Il n’y a aucune gauche de données à lire !
Temps de sortie
rupture ;
}
need_data = FALSE ;
}

Une fois DREQ relâchée (élevé) on nourrit maintenant 32 octets de données à le VS1053 de notre SD lire tampon
digitalWrite (MP3_XDCS, basse) ; Sélectionnez les données
pour (int y = 0; y < sizeof(mp3DataBuffer); y ++)
SPI.transfer(mp3DataBuffer[y]) ; Envoyer les octets SPI

digitalWrite (MP3_XDCS, élevé) ; Décochez la case données
need_data = TRUE ; Nous avons simplement déversés 32 octets dans VS1053, donc notre SD lire la mémoire tampon est vide. Définissez l’indicateur alors que nous allons obtenir plus de données

inputValue = analogRead(inputPin) ;

outputVolume = carte (inputValue, 0, 1023, 60, -20) ; <---c’est où vous rendre plus fort/plus doux selon combien lumière d’entrée votre marionnette obtient

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

Mp3SetVolume (outputVolume, outputVolume) ;

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

}

while(!digitalRead(MP3_DREQ)) ; Attendez DREQ aller haut transfert indiquant est terminée
digitalWrite (MP3_XDCS, élevé) ; Décochez la case données

Track.Close() ; Clore cette piste

sprintf (errorMsg, « Track %s fait! », fileName) ;
Serial.println(errormsg) ;
}

void setup()
{
pinMode (entrée, MP3_DREQ) ;
pinMode (MP3_XCS, sortie) ;
pinMode (MP3_XDCS, sortie) ;
pinMode (MP3_RESET, sortie) ;

digitalWrite (MP3_XCS, élevé) ; Désactivez l’option contrôle
digitalWrite (MP3_XDCS, élevé) ; Décochez la case données
digitalWrite (MP3_RESET, basse) ; Mettez VS1053 dans réinitialisation du matériel

pinMode (inputPin, entrée) ;       déclarer le LDR comme intrant
pinMode (redOutputLED, sortie) ;  déclarer la ledPin comme une sortie
pinMode (blueOutputLED, sortie) ;

Serial.Begin(57600) ; Utiliser la série pour le débogage
Serial.println ("MP3 Player exemple à l’aide de la commande") ;

Interface de configuration SD carte
pinMode (sortie 10,) ;       Broche 10 doit être défini comme une sortie pour la communication de la SD au travail.
Si (! card.init(SPI_FULL_SPEED)) Serial.println ("erreur : carte init") ; Initialiser la carte SD et configurer les broches e/s.
Si (! volume.init (& carte)) Serial.println ("erreur : Volume ini ») ; Initialiser un volume sur la carte SD.
Si (! root.openRoot (et volume)) Serial.println ("erreur : racine d’ouverture") ; Ouvrez le répertoire racine du volume.

Nous n’avons pas besoin de configurer SPI pour VS1053, parce que cela a déjà été fait par le SDfatlib

De page 12 du datasheet, max SCI lectures sont CLKI/7. D’entrée de l’horloge est 12.288 MHz.
Multiplicateur d’horloge interne est 1,0 x après le pouvoir en place.
Par conséquent, vitesse max de SPI est 1,75 MHz. Nous allons utiliser 1MHz pour être sûr.
SPI.setClockDivider(SPI_CLOCK_DIV16) ; Réglez la vitesse du bus SPI sur 1MHz (16MHz / 16 = 1 MHz)
SPI.transfer(0xFF) ; Lancer un octet factice sur le bus

Initialiser la puce VS1053
Delay(10) ;
digitalWrite (MP3_RESET, élevé) ; Mettre en place VS1053

Mp3SetVolume (20, 20) ; Définir le volume initial (20 = - 10 dB) LOUD
Mp3SetVolume (40, 40) ; Définir le volume initial (20 = - 10 dB) Manageable
Mp3SetVolume (80, 80) ; Définir le volume initial (20 = - 10 dB) plus calme

Maintenant que nous avons le VS1053 vers le haut et le déroulement, augmenter le multiplicateur d’horloge interne et jusqu'à notre taux de SPI
Mp3WriteRegister (SCI_CLOCKF, 0 x 60, 0 x 00) ; Ensemble multiplicateur à x 3,0

De page 12 du datasheet, max SCI lectures sont CLKI/7. D’entrée de l’horloge est 12.288 MHz.
Multiplicateur d’horloge interne est maintenant 3 x.
Vitesse max de SPI est donc de que 5 MHz. 4MHz sera en sécurité.
SPI.setClockDivider(SPI_CLOCK_DIV4) ; Réglez la vitesse du bus SPI sur 4MHz (16MHz / 4 = 4 MHz)

Programme d’installation de IC mp3 complet

Serial.println ("Done with setup") ;

}

void loop()
{
inputValue = analogRead(inputPin) ;

LED les yeux bits (besoins peaufinage des valeurs lorsqu’il est placé en marionnettes final)

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

Si (inputValue > 600) //if bouche est assez ouverte
{
Si (is_playing == 0)
{
playMP3(trackName) ;
is_playing = 1 ;
}
}
Si (inputValue < 500) / / si la bouche est assez fermé
{
Track.Close() ;
is_playing = 0 ;

}

Serial.Print(inputValue) ; pour voir si votre capteur de luminosité fonctionne correctement
Serial.Print("\n") ;
analogWrite (redOutputLED, redOutputValue) ;
analogWrite (blueOutputLED, blueOutputValue) ;
}

Écrire dans le registre des VS10xx - de SparkFun exemple
SCI : Transferts de données sont toujours 16 bits. Quand arrive une nouvelle opération de SCI
DREQ va faible. Il faut ensuite attendre DREQ à repartir élevé.
XCS doit être faible pendant toute la durée de fonctionnement.
void Mp3WriteRegister (unsigned char addressbyte, hightbyte unsigned char, unsigned char octet) {}
while(!digitalRead(MP3_DREQ)) ; Attendez DREQ à aller haut indiquant QU'IC est disponible
digitalWrite (MP3_XCS, basse) ; Sélectionnez contrôle

SCI se compose d’instruction byte, octet de l’adresse et mot de 16 bits de données.
SPI.transfer(0x02) ; Écrire des instructions
SPI.transfer(addressbyte) ;
SPI.transfer(highbyte) ;
SPI.transfer(lowbyte) ;
while(!digitalRead(MP3_DREQ)) ; Attendez DREQ aller haut commande indiquant est terminée
digitalWrite (MP3_XCS, élevé) ; Désactivez l’option contrôle
}

Définissez VS10xx Registre de Volume - volume régler la fonction d’exemple de SparkFun
void Mp3SetVolume (leftchannel unsigned char, unsigned char rightchannel) {}
Mp3WriteRegister (SCI_VOL, leftchannel, rightchannel) ;
}

< /code >

Articles Liés

Comment faire pour créer un spectacle de marionnettes peluche

Comment faire pour créer un spectacle de marionnettes peluche

comment faire pour montrer au loin par la présence d'un spectacle de marionnettes awsomeÉtape 1: les choses dont vous avez besoin 2 teddysfond blanc2-3 morceaux de papiercrayondispositif de tournageet quelqu'un pour montrer àÉtape 2: écrire le script
Ultimate Beetlejuice Sand Worm Puppet Costume

Ultimate Beetlejuice Sand Worm Puppet Costume

Il n'y a pas d'os à ce sujet, je t'aime Halloween. En fait... il y avait beaucoup d'os dans le costume d'Halloween de l'an dernier. Canapé de costume de mon Simpson a été un grand succès. Ce qui pourrais j'éventuellement construire cette année qui se
Transformer un Animal en peluche en une marionnette de Vent !

Transformer un Animal en peluche en une marionnette de Vent !

Le futur Dr Owl, le sage ! ... Il va être un vérirable légèrement confus et Devin. Notez la bouche et les yeux, parce que ceux qui vont changer !Étape 1 : ... Choisir votre animal en peluche. J'ai choisi plusieurs grenouilles à un magasin d'aubaines
Comment tricoter une ours en peluche marionnette

Comment tricoter une ours en peluche marionnette

Me vous montrant les étapes sur la façon de tricoter un nounours ours marionnette pour l'appel de la boîte à chaussures !
Dark Crystal Fizzgig inspiré marionnettes

Dark Crystal Fizzgig inspiré marionnettes

Ayant longtemps été un fan de l'univers de créature de Dark Crystal, j'ai eu envie de prendre une fissure à une marionnette de style Fizzgig pendant un certain temps maintenant. Vente d'yard un ami a offert le tissu parfait pour enfin y arriver. Comm
BRICOLAGE marionnette Muppet

BRICOLAGE marionnette Muppet

Il est temps de jouer de la musiqueIl est temps d'allumer les lumièresC'est le temps de rencontrer les Muppets sur le Muppet Show ce soir !Les chances sont, si vous avez été un enfant au cours des 50 dernières années ou ainsi, vous pouvez être famili
Voyage Simple marionnette

Voyage Simple marionnette

demander à quelqu'un qui a joué la dernière version Que jeu de la société et ils vous diront probablement la même chose: "c'est le plus beau jeu que j'ai joué toute la saison / année / jamais!" Voyage est une expérience émotionnelle et interacti
Mal lapin blanc marionnettes/jouet

Mal lapin blanc marionnettes/jouet

mal White Rabbit « Marionnette »(une version déformée du lapin blanc de « Aventures d'Alice au pays des merveilles » par Lewis Carrol)TI tous venus sur parce que je créais allouer des caractères de lapin pour une société qui viennent jusqu'à Pâques e
Faire une peluche de Mrrgglton Sir Finley de Hearthstone

Faire une peluche de Mrrgglton Sir Finley de Hearthstone

Mon mari est extrêmement difficile d'acheter pour, comme il ne veut jamais rien. C'est notre petite blague famille. Mais ce Noël, il a fait une suggestion plaisante comme il jouait Hearthstone et il était épris de la nouvelle expansion de la Ligue de
Kirby Epic Yarn peluche II

Kirby Epic Yarn peluche II

Hé Instructabrarians !Aujourd'hui est le 17 octobre, une journée très excitante que j'ai été avec impatience depuis plusieurs mois maintenant depuis qu'il a été annoncé en juillet dernier, 2010.  C'est vrai, c'est aujourd'hui la date de sortie nord-a
Costume édentée facile

Costume édentée facile

Mon mari et moi avons passé waaaaay trop longtemps sur nos propres costumes dans le hoquet et Astrid de comment à Train Your Dragon 2. Il nous fallait tourner la manivelle un costume qui édentées pour mon petit garçon dans quelques heures avant le gr
Handsew une moustache peluche géante !

Handsew une moustache peluche géante !

Maintenant avec des photos de mes collègues portant la moustache sur la dernière étape ! : DJ'ai eu cette idée lorsque je me suis réveillé un matin.Ensuite, j'ai fait une recherche sur google et a été bouleversé de voir Qu'au moins deux autres person
Comment faire une marionnette de Python

Comment faire une marionnette de Python

faire votre propre python marionnette est facile. Il suffit de suivre ces étapes simples 66 et vous aurez bientôt être divertissant et ravir les spectateurs.Notre nom de marionnettes est Guido. Vous pouvez le voir en action à http://www.thehelloworld
Demandez-moi un ingénieur méprisable sbires Style marionnettes

Demandez-moi un ingénieur méprisable sbires Style marionnettes

Vous voulez plus d'ingénieurs Powerpuff ? Que diriez-vous de demander une marionnettes ingénieur Despicable Me sbires ?Un webshow préférée est Ask de Adafruit ingénieur hébergé par Limor "Ladyada" Fried et Phil Torrone. Et travailler dans les co