Étape 7: La fonctionnalité et le Code
FonctionnalitésLe code est assez explicite et (me semble) relativement bien commenté. Il y a aussi une commande de série println à chaque étape de la voie pour le débogage, surtout si vous devez modifier le code pour l’étalonnage du potentiomètre.
Lorsque vous allumez l’appareil, le fil EL sera « initialiser ». En d’autres termes, chacun d’eux flash une fois successivement, de broche 2 jusqu'à la broche 9.
Nous sommes maintenant dans un état d’attente jusqu'à ce que vous appuyez sur le bouton mode. Chaque pression sur le bouton mode permet de basculer dans une séquence différente et clignote le voyant du Mode (rouge), alors que l’opérateur peut confirmer un changement de mode (comme opérateur porte le chapeau).
Il y a 7 séquences qui boucle en continu entre les changements de mode. Au cours de ces modes, si l’opérateur ajuste le potentiomètre, la vitesse de la séquence change.
Modes séquentiels
Mode 1 - étape à travers tous
Mode 2 - remplir vers le haut du bas puis vide du bas
Mode 3 - vers le haut et vers le bas
Mode 4 - balayage de bas en haut, balayage de haut en bas
Le mode 5 - empiler et désempilement
Mode 6 - suppléant clignotant
Mode 7 - Criss cross
Capteur sonore Mode
Mode 8 - lorsque vous arrivez à ce mode, le Mode LED avec flash 10 fois rapidement afin que vous sachiez que vous êtes dans ce mode spécial.
Le potentiomètre devient maintenant votre réglage de la sensibilité sonore.
Toutes les séquences
Mode 9 - ceci pour quitter le Mode Sound et traverse en permanence plusieurs boucles de chacun des Modes de 1 à 7 (régulateur de vitesse au niveau du potentiomètre est maintenant actif). Lorsque vous appuyez sur le bouton Mode, nous retournons au Mode 1.
LE CODE
Tout le code de l’Arduino est à la fois ci-dessous et ci-joint.
Instructables rendent Glow 2012 HAT séquenceur
ARDUINO UNO rév. 3 + Dos EL Escudo SPARKFUN
//
=== Des pièces et CONFIG ===
EL Escudo Dos : Bouclier monté sur Arduino UNO Rev.3
EL fil : Connecté à El Escudo Dos numérique numérique 2 broches -> 9(OUTPUT)
Indicateur LED: indique le changement de mode et de la détection des sons Pin 13(OUTPUT)
Interrupteur momentané : sélecteur de Mode (normalement ouvert) connecté à la broche numérique 11(INPUT)
Potentiomètre : Speed/Sound connecté en analogique 0
DFRobot son capteur : Capteur sonore du Microphone connecté à 2 Analog
Écrit par : Dovadil
DISCAIMER : je suis un programmeur très amateur, alors s’il vous plaît ne pas juger le code sans doute inutilement compliqué.
J’ai juste eu une idée et fait arriver. J’espère que vous pouvez utiliser des morceaux de ceci pour votre propre projet.
PARTAGER!!!
constantes pour la touche entrée et 1 led sortie
const int buttonPin = 11 ; le nombre de la tige poussoir
const int ledPin = 13 ; le nombre de l’axe de la LED
const_variable pour le pot et le capteur sonore
const int analogInPin = A0 ; Broche d’entrée analogique auquel est attaché le potentiomètre
const int analogInPinSound = A2 ; Capteur sonore d’entrée analogique
int potValue = 0 ; valeur lue dans le pot
int temps = 100 ; intervalle de temps
varibales
Boolean initialiser = true ;
buttonState int = 0 ; variable pour la lecture de l’état de bouton poussoir
mode d’int = 0 ;
int soundVal = 0 ;
int soundPotThresholdValue = 0 ;
int soundSensitivityLimit = 0 ;
int x ;
int y ;
int z ;
void setup()
{
initialiser une communication série à 9600 bits/s :
Serial.Begin(9600) ;
Les canaux EL sont sur les broches 2 à 9
Initialiser les broches comme sorties
pinMode (sortie 2) ; canal A
pinMode (3, sortie) ; canal B
pinMode (sortie 4) ; canal C
pinMode (5, sortie) ; canal D
pinMode (6, sortie) ; canal E
pinMode (7, sortie) ; canal F
pinMode (sortie 8) ; canal G
pinMode (sortie 9) ; canal H
Nous avons aussi deux LED d’État, l’Escudo, broche 10
pinMode (sortie 10,) ;
et ledPin (13 broches) sur l’Arduino lui-même
pinMode (ledPin, sortie) ;
pinMode (buttonPin, entrée) ;
}
void loop()
{
Démarrer le programme avec un run unique d’éclairage à LED
Si (initialiser == true)
{
Delay(10) ;
Serial.println("") ;
Serial.println("") ;
Serial.println("Initialising...") ;
Serial.println("") ;
État int ;
Faire défiler les huit canaux EL (2 à 9 broches)
pour (x = 2; x < = 9; x ++)
{
digitalWrite (ledPin, HIGH) ; allumer la LED
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(100) ; attendre 1/10 seconde
digitalWrite (ledPin, basse) ; éteindre la LED
digitalWrite (x, faible) ; désactiver le canal EL
Delay(50) ; attendre 1/10 seconde
digitalWrite (ledPin, HIGH) ; allumer la LED
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(100) ; attendre 1/10 seconde
digitalWrite (ledPin, basse) ; éteindre la LED
digitalWrite (x, faible) ; désactiver le canal EL
Delay(50) ;
s’arrête en cours d’exécution d’initialisation après une itération
mise en service = false ;
}
Serial.println("") ;
Serial.println ("Initialisation faite!") ;
Serial.println ("Waiting for trigger Mode") ;
}
Detail() ;
=== Le MODE 1 (étape à travers tous les canaux EL huit) ===
Si (mode == 1)
{
Faire défiler les huit canaux EL (2 à 9 broches)
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
digitalWrite (x, faible) ; désactiver le canal EL
}
}
=== Le MODE 2 (remplir vers le haut du bas puis vide du bas) ===
Si (mode == 2)
{
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
}
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, faible) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
}
}
=== Le MODE 3 (jusqu'à bas jusqu'à bas) ===
Si (mode == 3)
{
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
digitalWrite (x, faible) ; désactiver le canal EL
}
pour (x = 2; x < = 9; x ++)
{
Detail() ;
y = 11-x ;
digitalWrite (y, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
digitalWrite (y, faible) ; désactiver le canal EL
}
}
=== Le MODE 4 (balayer en bas vers le haut, balayer de haut en bas) ===
Si (mode == 4)
{
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ;
Delay(Time) ;
}
pour (x = 9; x > = 2; x--)
{
Detail() ;
digitalWrite (x, faible) ;
Delay(Time) ;
}
}
=== Le MODE 5 (pile et désempilement) ===
Si (mode == 5)
{
pour (x = 2; x < = 9; x ++)
{
pour (y = 9; y > = x; y--)
{
digitalWrite (y, HIGH) ;
Delay(Time) ;
digitalWrite (y, faible) ;
Detail() ;
}
digitalWrite (x, HIGH) ;
}
pour (x = 9; x > = 2; x--)
{
pour (y = x; y < = 9; y ++)
{
digitalWrite (y, HIGH) ;
Delay(Time) ;
digitalWrite (y, faible) ;
Detail() ;
}
}
digitalWrite (y, faible) ;
Delay(Time+20) ;
}
=== MODE 6 (clignotement alternatif) ===
Si (mode == 6)
{
Detail() ;
digitalWrite (2, haut) ;
digitalWrite (4, élevée) ;
digitalWrite (6, HIGH) ;
digitalWrite (8, HIGH) ;
Delay(Time+75) ;
Detail() ;
digitalWrite (2, basse) ;
digitalWrite (4, faible) ;
digitalWrite (6, faible) ;
digitalWrite (8, faible) ;
digitalWrite (3, élevée) ;
digitalWrite (5, HIGH) ;
digitalWrite (7, HIGH) ;
digitalWrite (9, HIGH) ;
Delay(Time+75) ;
Detail() ;
digitalWrite (3, faible) ;
digitalWrite (5, faible) ;
digitalWrite (7, faible) ;
digitalWrite (9, faible) ;
}
=== Le MODE 7 (criss cross) ===
Si (mode == 7)
{
pour (x = 2; x < = 9; x ++)
{
y = 11-x ;
digitalWrite (x, HIGH) ; allumer la LED (HIGH est le niveau de tension)
digitalWrite (y, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Si (x == 5)
{
Delay(Time/2) ;
}
d’autre
{
Delay(Time) ;
}
digitalWrite (x, faible) ;
digitalWrite (y, faible) ;
Detail() ;
}
}
=== MODE 8 (Mode son) ===
Si (mode == 8)
{
Test sonore
detailSound() ;
Si ((soundVal,DEC) == 512)
{
son flash vers le haut
pour (x = 2; x < = 9; x ++)
{
digitalWrite (x, HIGH) ;
Delay(40) ;
}
pour (x = 9; x > = 2; x--)
{
digitalWrite (x, faible) ;
Delay(40) ;
}
}
}
//=================MODE 9 ==================
Si (mode == 9)
{
runAllSequences() ;
}
//=================MODE 10 ==================
Si (mode == 10)
{
}
}
// =========================================
=== FONCTIONS DE ===
// =========================================
Sub detail()
{
lire l’analogue en valeur et la mapper à la gamme pour le temps
Si ((mode == 8) || (mode == 0)) Si pas en mode sonore, ou si le programme n’a pas commencé à juste
{
ne rien faire
}
d’autre
{
Si ((potValue! = analogRead(analogInPin))) //pot n’est pas modifié
{
temps = carte (potValue, 0, 1024, 40, 200) ;
imprimer les résultats de la série monitor :
Serial.Print ("\n potentiomètre =") ;
Serial.Print(potValue) ;
Serial.Print ("\t temporisation =") ;
Serial.Print(Time) ;
Serial.Print ("millisecondes") ;
attendre 2 millisecondes avant la prochaine boucle
pour le convertisseur analogique-numérique à régler
après la dernière lecture :
Delay(2) ;
potValue = analogRead(analogInPin) ;
}
}
lire l’état de la valeur du bouton poussoir :
buttonState = digitalRead(buttonPin) ;
Si (buttonState == HIGH)
{
buttonPressed() ;
digitalWrite (ledPin, basse) ;
}
}
Sub detailSound()
{
soundPotThresholdValue = analogRead(analogInPin) ; seuil de
soundSensitivityLimit = carte (soundPotThresholdValue, 0, 1024, 0, 512) ;
soundVal=analogRead(analogInPinSound) ; valeur réelle de son
Si (soundVal > soundSensitivityLimit)
{
Serial.Print ("\n Threshold Level =") ;
Serial.println(soundSensitivityLimit) ;
Serial.Print ("\n son niveau d’entrée =") ;
Serial.println(soundVal) ;
digitalWrite (ledPin, HIGH) ;
pour (x = 2; x < = 9; x ++)
{
digitalWrite (x, HIGH) ;
Delay(15) ;
}
pour (x = 2; x < = 9; x ++)
{
digitalWrite (x, faible) ;
Delay(15) ;
}
}
digitalWrite (ledPin, basse) ;
Delay(10) ;
}
Sub buttonPressed()
{
digitalWrite (ledPin, HIGH) ;
Delay(300) ; une pause pour contrôler le programme. veiller à ce changement de mode unique
mode = mode + 1 ; Increment, Mode
Si (mode > 9) / / si le mode est supérieur à 9, redémarrage du mode 1
{
mode = 1 ;
Serial.println("") ;
Serial.println ("séquence Mode de réinitialisation") ;
Serial.println("") ;
pour (x = 0; x < = 3; x ++)
{
digitalWrite (ledPin, basse) ;
Delay(100) ;
digitalWrite (ledPin, HIGH) ;
Delay(100) ;
digitalWrite (ledPin, basse) ;
}
}
Serial.println("") ;
Serial.println("") ;
Serial.println ("touche enfoncée") ;
Serial.Print (« Mode: ") ;
Serial.Print(mode) ;
Serial.println("") ;
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
Si le mode est le mode sonore, blink a conduit rapidement 10 fois
Si (mode == 8) //sound
{
pour (x = 0; x < = 10; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (ledPin, HIGH) ;
Delay(50) ;
digitalWrite (ledPin, basse) ;
Delay(25) ;
}
}
}
Sub runAllSequences()
{
=== Le MODE 1 (étape à travers tous les 8 canaux) ===
pour (z = 0; z < = 7; z ++) //because c’est relativement courte séquence, il quelques fois fois
{
Faire défiler les huit canaux EL (2 à 9 broches)
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
digitalWrite (x, faible) ; désactiver le canal EL
}
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
=== Le MODE 2 (remplir vers le haut du bas puis vide du bas) ===
pour (z = 0; z < = 3; z ++) //because c’est relativement courte séquence, il quelques fois fois
{
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
}
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, faible) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
}
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
=== Le MODE 3 (jusqu'à bas jusqu'à bas) ===
pour (z = 0; z < = 3; z ++) //because c’est relativement courte séquence, il quelques fois fois
{
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
digitalWrite (x, faible) ; désactiver le canal EL
}
pour (x = 2; x < = 9; x ++)
{
Detail() ;
y = 11-x ;
digitalWrite (y, HIGH) ; Allumez le canal EL
Delay(Time) ; attendre 1/10 seconde
digitalWrite (y, faible) ; désactiver le canal EL
}
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
=== Le MODE 4 (balayer en bas vers le haut, balayer de haut en bas) ===
pour (z = 0; z < = 3; z ++) //because c’est relativement courte séquence, il quelques fois fois
{
pour (x = 2; x < = 9; x ++)
{
Detail() ;
digitalWrite (x, HIGH) ;
Delay(Time) ;
}
pour (x = 9; x > = 2; x--)
{
Detail() ;
digitalWrite (x, faible) ;
Delay(Time) ;
}
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
=== Le MODE 5 (pile et désempilement) ===
pour (z = 0; z < = 3; z ++) //because c’est relativement courte séquence, il quelques fois fois
{
pour (x = 2; x < = 9; x ++)
{
pour (y = 9; y > = x; y--)
{
digitalWrite (y, HIGH) ;
Delay(Time) ;
digitalWrite (y, faible) ;
Detail() ;
}
digitalWrite (x, HIGH) ;
}
pour (x = 9; x > = 2; x--)
{
pour (y = x; y < = 9; y ++)
{
digitalWrite (y, HIGH) ;
Delay(Time) ;
digitalWrite (y, faible) ;
Detail() ;
}
}
digitalWrite (y, faible) ;
Delay(Time+20) ;
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
=== MODE 6 (clignotement alternatif) ===
pour (z = 0; z < = 10; z ++) //because il s’agit d’une courte séquence, il peut fois
{
Detail() ;
digitalWrite (2, haut) ;
digitalWrite (4, élevée) ;
digitalWrite (6, HIGH) ;
digitalWrite (8, HIGH) ;
Delay(Time+75) ;
Detail() ;
digitalWrite (2, basse) ;
digitalWrite (4, faible) ;
digitalWrite (6, faible) ;
digitalWrite (8, faible) ;
digitalWrite (3, élevée) ;
digitalWrite (5, HIGH) ;
digitalWrite (7, HIGH) ;
digitalWrite (9, HIGH) ;
Delay(Time+75) ;
Detail() ;
digitalWrite (3, faible) ;
digitalWrite (5, faible) ;
digitalWrite (7, faible) ;
digitalWrite (9, faible) ;
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
=== Le MODE 7 (criss cross) ===
pour (z = 0; z < = 10; z ++) //because il s’agit d’une courte séquence, il peut fois
{
pour (x = 2; x < = 9; x ++)
{
y = 11-x ;
digitalWrite (x, HIGH) ; allumer la LED (HIGH est le niveau de tension)
digitalWrite (y, HIGH) ; allumer la LED (HIGH est le niveau de tension)
Si (x == 5)
{
Delay(Time/2) ;
}
d’autre
{
Delay(Time) ;
}
digitalWrite (x, faible) ;
digitalWrite (y, faible) ;
Detail() ;
}
}
pour (x = 2; x < = 9; x ++) //turn tous les canaux de remise - remise à zéro des arceau suivant
{
digitalWrite (x, faible) ;
}
}