Étape 3: Le commutateur pour ATtiny et croquis final
J’ai utilisé l’Arduino pour programmer le ATtiny suivant les instructions ici. Cependant, je me suis assuré d’utiliser le noyau trouvé ici, car il est documenté pour prendre en charge la fonction de tonalité.
Je construis le circuit sur une maquette de faire des essais supplémentaires. Une différence importante est que la fonction de tonalité sur le ATtiny ne fonctionne pas avec une valeur de paramètre de 50. Le son démarre à une valeur d’environ 100.
(Si vous regardez attentivement les photos ci-dessous, vous pouvez à ce stade j’ai utilisé une résistance pull-down pour l’interrupteur tactile, au lieu d’une résistance pull-up sur toutes les entrées comme dans la version finale pour un build plus cohérent.)
Lors de l’essai, j’ai remarqué que l’entrée analogique peut être influencée par l’autre. Par exemple le contact tilt déclencherait le tir. abaissement de la valeur de déclenchement interrupteur touch à 333 au lieu de 500 (environ 1/3 au lieu de la moitié) qui a résolu. Je n’a pas enquêté sur plus loin dans la Croix des influences. Si quelqu'un peut expliquer les phénomènes et/ou sait comment faire pour éviter ce problème, s’il vous plaît laissez-moi savoir.
Voici le croquis final :
/*
Un Starbird minuscule (T)
Une reproduction de la classique StarBird MB
bruit du moteur change plus aigu lorsque incliné,
mettant en vedette une auto fait tilt switch et
pour « tirer » LEDs un commutateur résistif.
Pour une description complète, voir : www.instructables/
créé le 23 août 2012
par masynmachien
Ce code se trouve dans le domaine public.
*/
int EnginePitchBy3 = 300 ;
La variable d’indicateur de terrain utilisée est le fait
pas de paramètre pour la fonction de tonalité multipliée par 3.
Cela doit correspondre à hauteur de changement de vitesse et son intervalle,
(voir plus loin). Il n’y a effectivement un minimum pour le ton
fonction de travail et il semble être plus élevé pour le ATtiny
que pour l’Arduino.
le feu int [] = {820,795,770,795} ;
pas de mise à feu sonore
Boolean LED [] = {haute, basse, haute, basse} ;
Modèle d’éclairage LED
La routine d’installation s’exécute une fois que lorsque vous mettez sous tension
Remise à zéro n’est pas utilisable avec la conception de hardwre utilisée) :
void setup() {}
initialiser la communication série (pour le débogage uniquement) :
pinMode (0, sortie) ; broche de sortie O est de conduire les deux LEDs en parallèle
pinMode (1, sortie) ; la broche 1 de sortie est de conduire le haut-parleur piézo
Ces configurations ne sont probablement pas nécessaires sur ATTINY ?
Ils restent de prototypage sur Arduino et ne nuisent pas.
}
void loop() {}
Lire les deux commutateurs de tilt, mis en place comme un analogue
entrée tiré vers le haut à VCC par résistance ohms haut.
Aucune debouncing délibérée n’est appliqué comme toute irrégularité
plus de filterd par l’intervalle de temps 11 ms Lorsque
produisant le son désiré juste ajoute à l’effet sonore.
if(analogRead(a2) < 500)
{//when « up » interrupteur à bascule tire des entrées analogiques vers Gnd
Si (EnginePitchBy3 < 2400)
{/ / uniquement si une maximale choisie n’est pas encore atteint
EnginePitchBy3 = EnginePitchBy3 + 1 ;
augmenter l’indicateur de hauteur
}
}
ElseIf (analogRead(A3) < 500)
{//when « down » interrupteur à bascule tire des entrées analogiques vers Gnd
Si (EnginePitchBy3 > 300)
{/ / uniquement si la pente minimum j’ai pas encore atteint
EnginePitchBy3-= 1 ;
indicateur de hauteur de diminuer
}
}
Lire l’interrupteur tactile bouton « tir », mis en place comme un analogue
entrée tiré au GnD par résistance ohms haut.
Aucune debouncing délibérée n’est appliquée, mais de temps mis par le
son joué donne certaines baises debouncing.
if(analogRead(a1) > 333)
{/ / Lorsque l’entrée analogique du interrupteur tactile n’est pas tirée vers le haut par
toucher il avec un contact à Vcc, cela ne signifie aucun "tir",
et le bruit volant est joué :
ton (0, EnginePitchBy3/3, 10) ;
Delay(11) ;
Le délai défini un ms supérieure à la longueur de la pièce de la tonalité
Il fait de son plus comme un moteur.
}
d’autre
{
Sinon, le bruit du tir est joué.
pour (int patternCounter = 0; patternCounter < 4; patternCounter ++)
{
ton (0, feu [patternCounter], 60) ; moduler le son de tir
digitalWrite (1, LED[patternCounter]) ; modulation des LEDs
Delay(57) ; délai est défini un peu plus court pour son continu}.
}
}
}