Étape 4: Code
Le code est basé sur un couple d’if-conditions. Le code lit la valeur de la touche (pressé ou non) et la pression mesurée par le capteur. La première condition if vérifie si le bouton est enfoncé ou non. Si l’utilisateur a appuyé il, le LED émettent une lumière rouge immédiatement et rester dans cet état jusqu'à ce que l’utilisateur appuie sur le bouton nouveau. Dans cette autre condition, le code vérifie la valeur de pression censuré. Au-dessus du seuil (dans notre cas 500), le voyant passe au rouge. Sous le seuil, il restera vert. Ces couleurs ont été choisies car elles sont mieux reconnues comme les couleurs de « stop » et « go » respectivement. Le capteur Piezo est sensible et implique des tests pour découvrir le seuil approprié. Dans la plupart des tutoriels ce capteur nécessite une résistance de 1MOhm, mais parce que dans notre circuit, nous avons un autre un attaché à la touche, il touché extrêmement les valeurs.
Pour le NeoPixel, vous aurez besoin d’installer la bibliothèque NeoPixel à votre bibliothèque d’Arduino. Vous pouvez le trouver ici. Nous avons utilisé pour notre code de l’exemple strandtest et plus précisément la partie colorWipe du code.
Pour la touche, nous avons utilisé l’exemple de bouton poussoir 3C de la mise en route avec Arduino par Massimo Banzi.
Pour le capteur Piezo, il y a ainsi plusieurs tutoriels en ligne. Vous devriez vérifier que l'on sert votre but le meilleur. Pour ce tutoriel, il est simplement lire la valeur.
Voici notre code basé sur les exemples qu’on retrouvées ailleurs :
#include
#define broche 9
Paramètre 1 = nombre de pixels dans la bande de
Paramètre 2 = nombre de goupille de Arduino (la plupart sont valide)
Paramètre 3 = type de pixel drapeaux, additionner au besoin :
NEO_KHZ800 800 KHz bitstream (la plupart NeoPixel produits w/WS2812 LEDs)
NEO_GRB Pixels sont câblés pour GRB bitstream (la plupart des produits NeoPixel)
Bande de Adafruit_NeoPixel = Adafruit_NeoPixel (60, PIN, NEO_GRB + NEO_KHZ800) ;
Cette constantes ne changeront pas :
const int piezo = A0 ;
const int buttonPin = 2 ; le nombre de la tige poussoir
Variables vont changer :
buttonState int = 0 ; état actuel de la touche
int old_ButtonState = 0 ;
État int = 0 ; 0 = vert et 1 = rouge
void setup() {}
Serial.Begin(9600) ;
pinMode (buttonPin, entrée) ;
Strip.Begin() ;
Strip.Show() ; Initialiser tous les pixels sur « arrêt »
}
void loop() {/
/ lire l’état de la valeur du bouton poussoir :
buttonState = digitalRead(buttonPin) ;
int piezoVal = analogRead(piezo) ;
Serial.println(piezoVal) ;
Vérifiez si le bouton est appuyé.
Si ((buttonState == HIGH) & & (old_ButtonState == faible)) {}
État = 1 - État ;
Delay(10) ;
}
old_ButtonState = buttonState ;
Si (État == 1) {}
colorWipe (bande. Color(255, 0, 0), 50) ; ROUGE
} else {}
Si (piezoVal < = 500) {}
colorWipe (bande. Color(0, 255, 0), 50) ; VERT
} else {}
colorWipe (bande. Color(255, 0, 255), 50) ; ROUGE
}
}
attendre 2 millisecondes avant la prochaine boucle
pour le convertisseur analogique-numérique à régler
après la dernière lecture :
Delay(2) ;
}
Remplir les points un après l’autre avec une couleur
Cette partie est nécessaire pour le NeoPixel, il suffit d’inclure ce
void colorWipe (uint32_t c, uint8_t attente) {}
pour (uint16_t i = 0; i < strip.numPixels(); i ++) {}
strip.setPixelColor (i, c) ;
Strip.Show() ;
Delay(Wait) ;
}
}