Étape 3: Quatre digits sept segments et Manipulation de Port
Ajouter un affichage 4 digits 7 segments pour afficher les valeurs à modifier avec encodeurs. J’ai décidé d’utiliser les deux premiers chiffres pour afficher le nombre d’étapes par octave et noter les deux derniers chiffres du MIDI de base.
J’ai acquis un à quatre chiffres common anode sept afficheur. Selon la feuille de données broches 6, 9, 10 et 12 sont les pivots de chiffres. Ces broches sont utilisées pour la sélection de chacun des quatre chiffres. Les 8 autres broches sont pour les sept segments, plus un point décimal.
J’ai mis des résistances de limites actuelles sur chacune des broches à chiffres car il n’y a seulement 4. (J’aurais besoin de 8 résistances si je les ai mis sur les broches du segment). La fiche technique indique un courant constant maximum de 25 mA avec un typique 2,2 volts vers l’avant. J’ai utilisé des résistances de 220 ohms. Puis en utilisant les résistances vont limiter le courant à volts (5-2. 2) de la Loi d’Ohm / 220 ohms = 12,7 mA, qui est dans la plage acceptable.
J’ai branché les broches 7 segments sur les broches d’Arduino seuls 12 numériques 2-13. J’ai simplement connecté eux dans un ordre qui rend facile à associer. Puis, en utilisant le mappage de la tige de la feuille de données, que j’ai bien précisé l’Arduino pin cartographie dans mon code avec un tas d’instructions #define. J’ai pensé que c’est plus facile d’adapter le code qu’afin de faire un gâchis inextricable des fils entre l’écran et Arduino.
// arduino pin numbers for the seven segments and decimal point #define PIN_A 12 #define PIN_B 8 #define PIN_C 4 #define PIN_D 6 #define PIN_E 7 #define PIN_F 11 #define PIN_G 3 #define PIN_DP 5
// arduino pin numbers for the 4 digits #define PIN_1 13 #define PIN_2 10 #define PIN_3 9 #define PIN_4 2
J’ai commencé à l’origine à l’aide de la bibliothèque SevSeg de arduino.cc. Cela a fonctionné bien pour l’affichage des nombres, mais j’ai trouvé qu’elle introduit une quantité importante de latence avec tous les appels de digitalWrite()--7 segments et virgule fois 4 = 32 total. Alors j’ai décidé d’écrire mon propre code à écrire aux broches plus efficacement.
Pour cela, j’avais besoin d’apprendre la manipulation de port. Les registres de deux données PORTD et PORTB correspondent respectivement aux broches de l’Arduino 0-7 et 8-15. Lorsque la tige est réglée en sortie, puis en écrivant un 0 ou 1 pour ces registres résulte en définissant la tige basse ou haut. J’ai donc écrit le code suivant pour définir rapidement les broches haute ou basse en écrivant directement au PORT correspondant sans aucune vérification des erreurs.
pinHigh(int pin) { if (pin >= 2 && pin <= 7) { PORTD |= 1 << pin; } else if (pin >= 8 && pin <= 13) { PORTB |= 1 << (pin - 8); } }
pinLow(int pin) { if (pin >= 2 && pin <= 7) { PORTD &= ~(1 << pin); } else if (pin >= 8 && pin <= 13) { PORTB &= ~(1 << (pin - 8)); } }