Étape 4: Arduino Code
Comme avec le code App j’aborderai cela brièvement...
Tout d’abord, je place tous mes variables, affectant les capteurs et les LED aux broches corrects. La sortie des capteurs à effet hall est lues à l’aide de la fonction analogRead, donnant une valeur comprise entre 0 et 1023. Comme décrit précédemment, il génère la moitié lorsque aucun aimants ne présent, donc environ 500. J’utilise faibles et variables de la gâchette haute pour me permettre de régler facilement quand on sait la rondelle est au-dessus du capteur.
Les neopixels exige une bibliothèque afin que les de définie ici...
L’installation de Sub démarre les feuilletons, pour le Micro le Rx/Tx broches (bluetooth) utilisent Serial1... Les broches sont alors définis pour être entrées ou sorties et ensemble de LED sur off.
Maintenant, c’est la boucle principale...
Cette première section vérifie si toutes les données sont reçues de la Serial1.available() app. sont lire le numéro de série et obtenir le nombre d’octets dans la chaîne. Si cela de > 0 je sais datas entrant.
Si vous vous souvenez, toutes les chaînes que j’envoie de l’App terminent par un point d’interrogation... c’est à dire (Bright100)?
J’utilise la fonction .readStringUntil pour lire les données sérielles jusqu'à le point d’interrogation (Bright100) et définissez la variable BTstring à cela. J’ai vérifier si BTstring se termine par un ')' pour s’assurer que les commandes complètes sont reçues. Si elles sont, la boucle BluetoothProgram est dit... cela est décrit plus bas...
Ce prochain bit contrôle l’alarme de l’aube. Essentiellement si l’alarme est activée et que le temps est correct puis il va commencer la décoloration par les LED. En raison de le œil humain percevoir la lumière logarithmique est mieux de faire toute sorte de fondu LED hauts/bas avec une courbe exponentielle et non linéaire. D'où une équation est de conduire les valeurs PWM...
Pour éviter la rondelle interférant avec contrôle de l’application, il obtient désactivé lorsque vous utilisez l’application. Pour réactiver la rondelle, vous devez déplacer le produit hors tension pendant 5 secondes... Ce morceau de code vérifie d’abord si tous les capteurs sont sortie une valeur d’état d’équilibre (sans aimant) et puis démarre une minuterie. 5 secondes une fois terminée la variable BTinControl a la valeur retour à false.
Le code pour la rondelle maintenant... Tout d’abord les capteurs doivent être lus.
Si la lumière est actuellement désactivé, il vérifiera si les capteurs sont au-dessus ou dessous les points de déclenchement, c’est à dire la rondelle a été placé sur l’arc. Si elle est alors cela disparaîtra vers le haut de la LED blanche d’à votre dernier réglage peu importe où vous le placez.
Pour maintenir ensemble les LED à votre dernier réglage au lieu de mettre à jour les valeurs associées à quelque capteurs son déclenchement, la variable MovedSinceStandby est définie sur false. Fondamentalement, ce bit de code suivant vérifie si vous avez déplacé la rondelle de sa position initiale par un certain...
Si vous déplacez la rondelle le « MainProgram » est appelée pour mettre à jour le temp de luminosité/couleur. Cela est décrit plus bas.
Le dernier morceau de cette boucle principale vérifie si la rondelle a été placée sur la mise en veille de dock - est le capteur 12 lire une valeur au-dessus/au-dessous d’un point de déclenchement. Dans l’affirmative, il s’estompe le LED vers le bas...
La boucle de bluetooth :
Comme indiqué ci-dessus, lorsque les données sont reçues par l’intermédiaire de bluetooth, la chaîne est lue. Maintenant, nous avons besoin de vérifier ce que dit cette chaîne...
Toutes les chaînes en dehors de la luminosité, la couleur temp et RGB sont assez facile à traiter. Vous vérifiez si BTstring est égal au texte envoyé depuis l’application.
Si vous vous souvenez, chaque fois que vous modifiez des écrans dans l’application, il va envoyer une commande de bluetooth. Ici nous questionner pour cela et certaines variables la valeur true ou false afin que nous sachions que l’écran, vous êtes sur.
Avis à la fin de chaque section, que j’ai mis la variable BTinControl à true et effacez la valeur BTstring.
Lorsque vous appuyez sur le bouton d’alimentation dans l’application elle s’estompera les LED vers le haut ou vers le bas. Les variables définies ci-dessus pour quel écran vous êtes sur servent à décider si c’est le RGB ou blanc LED de contrôle...
Luminosité, température de couleur et RGB, j’ai besoin de lire les chaînes d’une manière légèrement différente. Parce que la partie numéro de la chaîne va changer, je me demande si la chaîne commence par un des identificateurs pas la chaîne complète, il suffit donc (Bright ici...
J’ai maintenant besoin de séparer la valeur de la luminosité réelle de la chaîne. Le format de la chaîne envoyée de l’App est (Brightvaleur) donc je sais donc la valeur de luminosité se situera entre le ' t 'et le')'. La position de ' t ' restera constante, il sera toujours le 7ème caractère dans la chaîne. Mais parce que la valeur de luminosité peut être comprise entre 10 et 100 la position de la ')' va changer. J’utilise la commande .indexOf travailler où la ')' est, quel caractère il est et que vous pouvez puis utiliser la commande de .substring pour lire la chaîne entre le caractère 7e et le ')' position de caractère. Cela me laisse avec juste la valeur de luminosité que je peux utiliser pour régler le RGB ou blanc LED selon l’écran.
Réglage de température de couleur est un processus similaire à ci-dessus, mais la valeur se situera entre le 'p' et le ')' cette fois...
Pour le réglage RVB, nous avons trois valeurs pour extraire de la chaîne, mais c’est un processus similaire à nouveau. Depuis l’application que nous recevons des chaînes sous la forme (RVBvaleur de. valeur de. valeur)
Donc je sais que la valeur rouge se situera entre le « B » comme le premier point. La valeur verte se situe entre les ouvertures de diaphragme 1re/2e et la valeur bleue est entre le 2e arrêt complet et la ')'.
Une fois que nous avons les valeurs de la neopixles sont sur le nouveau coloris...
Ici, nous vérifions si l’alarme est activée ou désactivée. Si l’heure de l’alarme est changée nous obtenir enverra une chaîne avec le nombre de millisecondes a partir de maintenant jusqu'à l’alarme. Encore une fois, cette valeur est extraite de la chaîne et afin de pouvoir vérifier si son temps de commencer au lever du soleil, que nous devons définir une variable à l’heure actuelle (millis)...
Contrôles de Puck :
Comme indiqué avant si la rondelle (aimant) est une façon il peut conduire à la sortie du capteur hall sous la gâchette basse et si l’autre manière vers le haut au-dessus de la gâchette haute.
Cela permet le contrôle de luminosité et de température de couleur sur le même arc...
Les valeurs de capteurs sont lues. Si l’un d'entre eux est inférieure à la valeur de déclenchement faible alors nous sommes réglage de temp de couleur. Il y a 11 capteurs sous la zone de l’arc, qui génère à son tour aller au-dessous du point de déclenchement que la rondelle est passeront au-dessus d’eux. Chaque capteur possède une valeur PWM pour les LEDs cool et chauds contre elle, commençant par capteur 1 à 100 % chaude, 0 % cool et travaillant au 11 à 0 % chaud, 100 % cool.
Le réglage de la luminosité se fait de la même manière... vérifier si les sorties des capteurs sont au-dessus de la gâchette haute en ce moment et donnant chaque capteur une luminosité valeur de pondération.
Cette pondération de luminosité est ensuite multipliée par la valeur temp de couleur pour donner l’ensemble valeur de sortie. Ce qui vous permet de définir n’importe quel temp de couleur à n’importe quel éclat...