Ce n’est pas un Instructable complet que j’ai omis de prendre les photos bon le long du chemin, mais j’espère faire encore un de ces (mieux je l’espère) et documentera mieux à ce moment-là.
Par guidomax, j’ai vu l’Instructable suivant: (Merci guidomax!!!) et avoir une collection de téléphones/parties rotatives, je voulais voir ce que je pourrais faire avec eux.
Je décide que je voudrais essayer de rendre le téléphone bat avec le signal et présentez-le comme un cadeau à ma fille pour les vacances.
Voici une courte vidéo de fonctionner. La musique est beaucoup plus forte en personne.
Mes étapes :
1. tout d’abord j’ai évoqué l’Instructable ci-dessus pour voir si je pouvais obtenir le fonctionnement de l’interface et comme le suggère l’Instructable, c’était assez facile de le faire.
2. j’ai pris un vieux corps de téléphone et apprêté et pulvériser peints en rouge. J’ai fait le combiné aussi et le cordon.
3. j’ai voulu le code de l’Arduino pour jouer le thème de Batman et de produire une chauve-souris signal quand « B », « A », « T », « M », « A », « N » a été composé sur le téléphone.
Le code prenait juste le code de guidomax et modifing il sorte au lieu d’une sortie en série de l’ordinateur, il a juste vérifié pour la chaîne appropriée d’un nombre composé. Pour exanple BATMAN est « 228626 ». Cette chaîne, voyant l’Arduino, il a commencé la chanson et allumé le signal bat.
La chanson : J’ai eu un bouclier de vague Adafruit dont je n’avait jamais utilisé et vu cela comme une occasion de le vérifier. Il a fallu une bonne journée pour moi de le construire (il est livré en kit) et puis il y a une procédure à respecter pour obtenir votre fichier wav sur le bouclier. C’est une procédure facile si vous utilisez iTunes. Juste acheter la chanson et le convertir au besoin en utilisant les menus d’iTunes et faites glisser vers le bouclier. Sans iTunes, c’est plus compliqué, mais la page Adafruit vous guide à travers elle.
Le Bat-Signal : Plusieurs autres Instructables montrer comment faire un signal et j’ai pris ce que je pouvais d’eux mais c’était plus ou moins tâtonnements avant que je suis venu avec l’idée de la fin. J’ai couper une bouteille d’eau environ de moitié et mettre un petit trou dans le bouchon à vis. J’ai inséré une LED rouge dans le petit trou. J’ai peint en noir le bouchon de la bouteille. Pour obtenir l’image s’affiche très bien, j’ai dû couper un symbole de la petite chauve-souris et fixez-le en face de la bouteille. Cela a fonctionné, mais je pense qu’il doit y avoir une manière plus ordonnée. J’ai chaud collé la bouteille à une ouverture à l’arrière du téléphone (colle chaude est merveilleuse!), j’ai fait.
Le code : mon idée de départ était d’avoir plusieurs super héros dans le code. C’est à dire si vous composé de Batman, tu as le thème de la musique et le signal, si que vous avez composé SUPERMAN, tu as une musique différente, etc.. Ainsi vous pourrez voir un code qui est là pour cela mais j’ai jamais eu que jusqu'à maintenant. Il est juste de BATMAN.
Batmanv2 #include < FatReader.h > Carte de SdReader ; Cet objet conserve les informations de la carte WaveHC vague ; C’est le seul objet (audio) de la vague, puisque nous allons jouer seulement un à la fois #define DEBOUNCE 100 / / bouton debouncer --de V1--- constantes int dialHasFinishedRotatingAfterMs = 100 ; chaînes
Cela une tentative d’avoir plusieurs wav files et joue l’injecteur approprié
basé sur la séquence des numéros composés sur le téléphone
Si 228626b alors jouer le thème de batman
#include < SdReader.h >
#include < avr/pgmspace.h >
#include « WaveUtil.h »
#include « WaveHC.h »
Vol FatVolume ; Il conserve les informations pour la partition sur la carte
FatReader racine ; Il conserve les informations pour le système de fichiers sur la carte
FatReader f ; Il conserve les informations pour le fichier que nous allons jouer
// -----------------
int needToPrint = 0 ;
int count ;
mine
int redLed = 8 ;
int in_from_dial = 7 ;
lightOn int = 6 ;
int craddleUp = 9 ;
int val = faible ; variable pour stocker la valeur lue
//
int lastState = faible ;
int trueState = faible ;
long lastStateChangeTime = 0 ;
autorisé d’int = 0 ;
int debounceDelay = 10 ;
String nouvelleChaine ;
Char [] testeur = "123" ;
Char [] Batman = "228626" ;
Char [] Spiderman = "774337626" ;
char de Superman [] = "78737626" ;
char de Batgirl [] = "2284475" ;
-fin de V!---
void setup() {}
mettre en place le port série
Serial.Begin(9600) ;
putstring_nl ("WaveHC avec sélection de chanson ») ;
putstring ("RAM libre:") ; Ce qui peut aider avec le débogage, manquer de RAM est mauvais
Serial.println(freeRam()) ; s’il s’agit moins de 150 octets Il peut épeler ennuis !
Définissez les broches de sortie pour le contrôle de la DAC. Ce broches sont définis dans la bibliothèque
pinMode (sortie 2) ;
pinMode (3, sortie) ;
pinMode (sortie 4) ;
pinMode (5, sortie) ;
de V1
pinMode (in_from_dial, entrée) ; 12
pinMode (lightOn, sortie) ; 11
pinMode(craddleUp,INPUT) ; 9
pinMode(redLed,OUTPUT) ; 9
fin v1
pin13 LED
pinMode (13, sortie) ;
Si (! card.init(true)) //play avec 4 MHz spi si 8MHz ne fonctionne pas pour vous
Si (! card.init()) {//play avec spi 8 MHz (par défaut plus rapide!)
putstring_nl ("carte init. a échoué!") ; Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
sdErrorCheck() ;
while(1) ; puis « arrêter » - ne rien faire !
}
Enable optimiser la lecture - certaines cartes peuvent timeout. Désactiver si vous rencontrez des problèmes
card.partialBlockRead(true) ;
Maintenant, on va chercher une partition FAT !
uint8_t partie ;
pour (partie = 0; partie < 5; partie ++) {/ / nous avons jusqu'à 5 emplacements de regarder dans
Si (vol.init (carte, partie))
rupture ; Nous avons trouvé un, laisse en liberté sous caution
}
Si (partie == 5) {/ / si nous avons fini ne pas trouver un:(
putstring_nl ("aucun FAT partition valide!") ;
sdErrorCheck() ; Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
while(1) ; puis « arrêter » - ne rien faire !
}
Permet d’indiquer à l’utilisateur sur ce que nous avons trouvé
putstring ("partition à l’aide") ;
Serial.Print (partie, DEC) ;
putstring (", est de type FAT") ;
Serial.println(vol.fatType(),DEC) ; FAT16 ou FAT32 ?
Essayez d’ouvrir le répertoire racine
Si (! root.openRoot(vol)) {}
putstring_nl ("Impossible d’ouvrir le répertoire racine!") ; Quelque chose a mal tourné,
while(1) ; puis « arrêter » - ne rien faire !
}
Ouf ! Nous avons passé les parties difficiles.
putstring_nl("Ready!") ;
}
ici il s’agit
le bouclage continuera jusqu'à ce que le récepteur est pickerd vers le haut
puis la séquence de numérotation est enregistrée et archivée
Si un coup est trouvé, puis allumer lumière (pour Batman) et/ou
jouer la chanson
void loop() {}
attendre que le récepteur doit être levé
une fois levée, puis la composition peut être vérifiée
allumer led pour montrer que le téléphone vit rouge
Val = digitalRead(craddleUp) ; lire l’entrée pin
Si (val == HIGH) {}
digitalWrite (redLed, HIGH) ;
lecture int = digitalRead(in_from_dial) ;
Si ((millis()-lastStateChangeTime) > dialHasFinishedRotatingAfterMs) {}
le cadran n’est pas composé, ou vient de terminer le composé.
Si {(needToPrint)
Si c’est à peine fini composé, il faut envoyer le numéro dans la série
ligne et réinitialisez le compte. Nous mod le comptage par 10 parce que « 0 » enverra 10 impulsions.
Serial.println (Nbre % 10, DEC) ;
faut maintenant ajouter le comte à la chaîne de test et puis testez-le contre la
Chaîne requise pour prendre son pied
NewString.Concat(Count) ;
Si la chaîne est égale à Batman, allumez la lumière et démarrer le fichier wav
Serial.println(NewString) ;
Delay(2000) ;
// --------------------
// -------------- Batman -----------------
Si ((newstring.equals(Batman)) || (newstring.equals(Tester))) {
digitalWrite (lightOn, HIGH) ;
playcomplete ("BATMAN. « « « WAV ») ;
digitalWrite(lightOn,LOW) ;
}
---Spiderman---
Si (newstring.equals(Spiderman)) {}
bat_signal() ;
playcomplete("1.wav") ;
}
// --------------Superman -----------------
Si (newstring.equals(Superman)) {}
bat_signal() ;
playcomplete("1.wav") ;
}
// -------------- BatGirl -----------------
Si (newstring.equals(Batgirl)) {}
bat_signal() ;
playcomplete("1.wav") ;
}
needToPrint = 0 ;
Count = 0 ;
effacée = 0 ;
}
}
Si (lecture! = lastState) {}
lastStateChangeTime = millis() ;
}
Si ((millis()-lastStateChangeTime) > debounceDelay) {}
Debounce - cela arrive une fois qu’il est stabilisé
Si (lecture! = trueState) {}
Cela signifie que le commutateur soit juste allé de fermé a -> ouvrir ou vice versa.
trueState = lecture ;
Si (trueState == HIGH) {}
incrémenter le compteur d’impulsions si il est allé en haut.
Count ++ ;
needToPrint = 1 ; Nous aurons besoin d’imprimer ce nombre (une fois le cadran rotatif)
}
}
}
lastState = lecture ;
}
d’autre
{
nouvelleChaine = "" ;
digitalWrite (lightOn, faible) ;
digitalWrite(redLed,LOW) ;
}
}
Lit un fichier complet de bout en bout avec aucune pause.
void playcomplete(char *name) {}
Appelez notre aide pour trouver et jouer ce nom
playfile(Name) ;
alors que {(wave.isplaying)
ne rien faire pendant sa lecture
}
maintenant sa fait jouer
}
void playfile(char *name) {}
voir si l’objet vague est en train de faire quelque chose
Si (wave.isplaying) {/ / déjà jouer quelque chose, alors arrêtez d’elle !
Wave.Stop() ; Arrête
}
Regardez dans le répertoire racine et ouvrir le fichier
Si (! f.open (racine, nom)) {}
putstring ("Impossible d’ouvrir le fichier") ; Serial.Print(Name) ; retour ;
}
OK, lire le fichier et le transformer en un objet vague
Si (! wave.create(f)) {}
putstring_nl ("pas un valide" WAV") ; retour ;
}
OK le temps de jouer ! Démarrer la lecture
Wave.Play() ;
}
Cette fonction pratique retournera le nombre d’octets actuellement libres en RAM, grand pour le débogage !
int freeRam(void)
{
extern int __bss_end ;
extern int * __brkval ;
int free_memory ;
Si ((int) __brkval == 0) {}
free_memory = ((int) & free_memory)-((int) & __bss_end) ;
}
else {}
free_memory = ((int) & free_memory)-((int) __brkval) ;
}
Return free_memory ;
}
Sub sdErrorCheck(void)
{
Si (! card.errorCode()) retourner ;
putstring ("\n\rSD I/O erreur:") ;
Serial.Print(Card.ErrorCode(), HEX) ;
putstring (",") ;
Serial.println(Card.ErrorData(), HEX) ;
while(1) ;
}
L’Arduino, que j’ai utilisé était un UNO
Encore une fois, j’aimerais qu'avoir plus de photos et mieux documentées. La prochaine fois.
Ma fille pensée est un pur cadeau et elle semblait heureuse, mais c’est ce que font les filles. :)