Étape 8: Étape 8: coudre le circuit d’étoiles
J’ai programmé les étoiles sur ma couette pour jouer les notes à Twinkle Twinkle Little Star, afin que ma fille pouvait apprendre à jouer avec ses amis. Il y a six notes dans la chanson, ainsi que six des stars de la courtepointe sont programmés. Les autres sont pour la décoration.
À l’aide de fil conducteur :
• Raccordez le côté positif de l’avertisseur sonore sur une broche numérotée sur le LilyPad. J’ai utilisé 5.
• Raccordez le côté négatif de l’avertisseur sonore à la borne négative sur le LilyPad.
• Connectez un point de chaque étoile sur une broche numérotée de la LilyPad. J’ai utilisé 6, 9, 10, A2, A3 et A5. J’ai simplement enveloppé le fil autour d’un coin de chaque étoile, je n’avais donc pas à fouiller les trous à travers la grille. (pic)
• Programme de l’Arduino.
Voici mon CODE, qui a été remixé de code écrit par Kanjun Qiu : http://hlt.media.mit.edu/?p=1558.
inscrire le nombre de touches du piano. Il est 5, 6, 7, 8 ?
const int numberOfKeys = 6 ;
répertorier les clés ici afin que vous voulez.
int touches [numberOfKeys] = {6, 9, 10, A3, A2, A5} ;
les tonalités des touches ici la liste. N’oubliez pas, le ton vous liste est lié
à la clé dans l’ordre que vous dites (key6 ici == 1046).
int fait remarquer [numberOfKeys] = {392 349.23, 293,66, 440, 329.63, 261.63} ;
enceinte int = 5 ;
int sensorValue ;
void setup() {}
pinMode (haut-parleur, sortie) ;
int i = 0 ;
tandis que (j’ai < numberOfKeys) //set le piano clés pour être entrées
{
pinMode (touches [i], entrée) ;
i = i + 1 ;
}
Serial.Begin(9600) ; initialiser la communication
}
void loop() {}
int i = 0 ;
tandis que (j’ai < numberOfKeys)
{
checkPianoKey (touches [i], notes[i]) ;
i = i + 1 ;
}
Serial.println() ;
Delay(100) ;
}
void checkPianoKey (int key, remarque int) {}
sensorValue = readCapacitivePin(key) ; lire la valeur du capteur tactile
Serial.Print(sensorValue) ; Envoyer la valeur à l’ordinateur
Serial.Print ("") ; Envoyer un char de l’espace à l’ordinateur
Si (sensorValue > 1) //if la touche est enfoncée
{
ton (haut-parleur, note, 100) ; Jouez une note de 100 ms
}
}
readCapacitivePin
D’entrée : Numéro d’identification Arduino
Sortie : Un nombre, de 0 à 17 exprimant
Combien capacitance est sur la broche
Quand vous touchez la broche, ou ce que vous avez
attaché à elle, le nombre obtiendrez plus élevé
#include « pins_arduino.h » / / Arduino pre-1. 0 a besoin de cela
uint8_t readCapacitivePin (int pinToMeasure) {}
Variables utilisées pour traduire de l’Arduino AVR broche nommage
volatils uint8_t * port ;
volatils uint8_t * ddr ;
volatils uint8_t * tige ;
Ici nous traduisons le nombre de broches d’entrée de
Arduino code PIN au PORT d’AVR, broches, DDR,
et que peu de ces registres, nous nous soucions.
masque de bits octets ;
port = portOutputRegister(digitalPinToPort(pinToMeasure)) ;
DDR = portModeRegister(digitalPinToPort(pinToMeasure)) ;
masque de bits = digitalPinToBitMask(pinToMeasure) ;
pin = portInputRegister(digitalPinToPort(pinToMeasure)) ;
Décharger la broche tout d’abord en lui affectant faible et de sortie
* port & = ~ (masque) ;
* ddr | = masque de bits ;
Delay(1) ;
Faire de la broche une entrée avec le pull-up interne sur
* ddr & = ~ (masque) ;
* port | = masque de bits ;
Voyons maintenant combien de temps la goupille pour obtenir tiré vers le haut. Ce déroulement manuel de la boucle
diminue le nombre de cycles de matériel entre chaque lecture de la broche,
augmentant ainsi la sensibilité.
uint8_t cycles = 17 ;
Si (* NIP & masque de bits) {cycles = 0;}
ElseIf (* NIP & masque de bits) {cycles = 1;}
ElseIf (* NIP & masque de bits) {cycles = 2;}
ElseIf (* NIP & masque de bits) {cycles = 3;}
ElseIf (* NIP & masque de bits) {cycles = 4;}
ElseIf (* NIP & masque de bits) {cycles = 5;}
ElseIf (* NIP & masque de bits) {cycles = 6;}
ElseIf (* NIP & masque de bits) {cycles = 7;}
ElseIf (* NIP & masque de bits) {cycles = 8;}
ElseIf (* NIP & masque de bits) {cycles = 9;}
ElseIf (* NIP & masque de bits) {cycles = 10;}
ElseIf (* NIP & masque de bits) {cycles = 11;}
ElseIf (* NIP & masque de bits) {cycles = 12;}
ElseIf (* NIP & masque de bits) {cycles = 13;}
ElseIf (* NIP & masque de bits) {cycles = 14;}
ElseIf (* NIP & masque de bits) {cycles = 15;}
ElseIf (* NIP & masque de bits) {cycles = 16;}
Décharger la goupille à nouveau en lui affectant faible et de sortie
Il est important de laisser les broches faible si vous voulez
être en mesure de toucher plus de 1 capteur à la fois - si
le capteur est laissé tiré haut, quand vous touchez
deux capteurs, votre corps va transférer la charge entre les
capteurs.
* port & = ~ (masque) ;
* ddr | = masque de bits ;
retour cycles ;
}