Étape 4: Firmware
Étape 1 est contenue dans sa propre fonction définie par l’utilisateur. Vous lisez d’abord la broche analogique attaché au potentiomètre. Cela se traduira par une lecture entre 0-682 (n’oubliez pas que nous sommes sur 3.3V, pas 5). Ensuite nous voulons retourner une valeur de 0-11, qui représente les 11 segments sur notre thermomètre, pour le programme principal. Pour ce faire, vous effectuez un entier sur l’entrée à l’aide de la taille d’un segment, 62 (682/11 = 62). L’utilisation de la division d’entiers, qui utilise uniquement des nombres entiers, n’est pas une erreur, il permet la fonction renvoie un nombre entier sans passer à l’étape supplémentaire d’arrondir le résultat avec une autre ligne de code.
Une fois que vous exportez le segment que le pot est indiquant que le code a besoin établir une corrélation entre ce nombre de la séquence binaire qui s’allument les voyants appropriés. Les valeurs décimales qui convertissent les chaînes binaires appropriés pour contrôler de la 595 sont stockés dans un tableau où leur position dans le tableau d’idéalement est identique à la sortie du pot.
L’étape finale consiste à pousser les commandes pour de 595. L’ordre des opérations est de désactiver la goupille de verrouillage, empêchant les LEDs de modifier tandis que les nouvelles commandes sont rédigés, utilisez le changement de commande pour envoyer les chaînes binaires par l’intermédiaire de la broche de données, qui utilise la goupille horloge pour différencier les morceaux, et enfin de réactiver la goupille de verrouillage pour les nouvelles données de sortie à travers toutes les quilles en même temps.
2 TEST LED w / 74HC595 //by 2013 Bwrussell / / / * * ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier * elle aux termes de la GNU General Public License telle que publiée par * la Free Software Foundation ; soit la version 2 de la licence, ou * (à votre choix) toute version ultérieure. ** Ce programme est distribué dans l’espoir qu’il sera utile, * mais sans aucune garantie ; sans même la garantie implicite de * qualité marchande ou ADEQUATION a un usage particulier. Voir la * GNU General Public License pour plus de détails. * / //74HC595-Arduino des définitions d’interface Pin //Pin connecté à ST_CP de 74HC595 int latchPin = 8 ; Broche reliée à SH_CP de 74HC595 int clockPin = 12 ; Broche reliée à la DS de 74HC595 int dataPin = 11 ; Broche reliée à la borne de balayage de la marmite #define potPin A5 //arrays qui tiennent les États LED pour chaque poste de pot, un pour chaque 595 int ledStatesA [] = {1,2,6,14,30,62,126,254,254,254,254,254} ; int ledStatesB [] = {0,0,0,0,0,0,0,0,1,3,7,15} ; Variable, Defs int knobPosition ; void setup() {//Start série pour débogage à des fins Serial.begin(9600) ; //set broches de sortie parce qu’elles sont adressées dans la boucle principale pinMode (latchPin, sortie); pinMode (clockPin, sortie); pinMode (dataPin, sortie);} void loop() {knobPosition = potRead() ; digitalWrite (latchPin, 0); //send données à la seconde 595 shiftOut (8-11) (dataPin, clockPin, ledStatesB[knobPosition]) ; //cosend données à la première 595 (0-7) shiftOut (dataPin, clockPin, ledStatesA[knobPosition]) ; //return la goupille de verrouillage haute au signal puce qu’il a besoin de //no plus de temps écouter les informations digitalWrite (latchPin , 1); } void shiftOut (int myDataPin, int myClockPin, myDataOut octet) {/ / cela décale de 8 bits sur MSB //on tout d’abord, le front de l’horloge, //clock ralenti //internal faible fonction Configuration int j’ai = 0; int pinState ; pinMode (myClockPin, sortie); pinMode (myDataPin, sortie); //clear tout juste dans le cas de //prepare Maj s’inscrire à peu mouvants digitalWrite (myDataPin, 0); digitalWrite (myClockPin, 0); pour (j’ai = 7; j’ai > = 0; i--) {digitalWrite (myClockPin , 0); Si (myDataOut & (1 << j’ai)) {pinState = 1;} else {pinState = 0;} //Sets la broche à haute ou basse selon pinState digitalWrite (myDataPin, pinState) ; enregistrer des morceaux de déplacements sur la branche ascendante de horloge broche digitalWrite (myClockPin, 1) ; zéro la broche de données après Maj pour empêcher le saignement par digitalWrite (myDataPin, 0) ; } //stop déplacement digitalWrite (myClockPin, 0) ; } / / Fonction pour la lecture et segmanting le pot entrée int potRead () {int metrów = 0; //read dans la position du pot brut, avec une moyenne de plus de 5 échantillons pour (int j’ai = 0; j’ai < 5; i ++) {metrów = metrów + analogRead(potPin);} metrów = metrów/5 ; //segment les fichiers RAW en 12 segmants égales, renvoie une valeur de 0-11 int potPosition = metrów / 60 ; //Use 60 pour 3.3V, 93 pour 5V à travers le pot //send le segment actuel de la boucle principale return potPosition;}
Le code source est disponible dans le fichier .zip (le .ino ne serait pas télécharger) et un fichier de texte brut.
Juste un bouchon rapide : dans certains des tests initiaux, j’ai utilisé le soft ArduinoDroid relativement nouveau pour Android. C’est assez impressionnant pour ce que c’est. Il vous permet d’écrire du code de l’Arduino, avec codage couleur et compilation, n’importe où, comme sur la pause déjeuner au travail. Avec un câble USB, vous pouvez également alimenter et charger sur une carte Arduino. Il y a quelques autres fonctionnalités que je n’ai pas encore utilisé comme contrôle Bluetooth et autres, mais pour un fabricant sur le pouce ou le travail sur le terrain, ce soft est phénoménal. Je le recommande fortement surtout que c’est totalement gratuit (annonce pris en charge) et illimitée. Si vous l’aimez alors vous pouvez payer une somme modique pour supprimer les publicités et soutenir le développement. Je ne sais pas qui est le développeur, mais ils basculent.