Bibliothèque Arduino efficace pour port E/S 8 bits — Étendez le contrôle numérique
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino UNO | 1 |
| LED 5 mm rouge | 1 |
| Potentiomètre mono-tour 10 kΩ | 1 |
Applications et services en ligne
- Arduino IDE
À propos de ce projet
Bibliothèque Arduino pour port E/S 8 bits
Nous savons que l'Arduino fournit une sortie numérique via digitalWrite() et lit une entrée via digitalRead(). Mais ces fonctions ne gèrent qu'une seule broche à la fois. Si l'on veut interfacer un dispositif 8 bits (afficheur 7 segments, commutateurs DIP, convertisseur N/A), on doit envoyer les 8 bits un par un sur 8 broches distinctes. Par exemple, pour la valeur 0x37 (0011 0111), il faut appeler digitalWrite() huit fois.
Pour résoudre ce problème, voici une bibliothèque Port E/S 8 bits pour Arduino. Elle permet d'envoyer ou de lire directement un octet (8 bits) sur n'importe quelles 8 broches de l'Arduino configurées comme un port combiné. Il suffit de sélectionner 8 broches et de définir leur direction : 'O' pour sortie, 'I' pour entrée.
La bibliothèque ne contient que 5 fonctions : deux constructeurs pour créer l'objet port, une fonction d'envoi de donnée 8 bits, une de lecture, et une pour modifier la direction E/S.
1. IO_Port_8bit(pin1...pin8, char dir)
Constructeur principal. Crée un objet port en combinant 8 broches Arduino distinctes. Le dernier argument dir définit la direction : 'O' = sortie, 'I' = entrée. Le port ne peut pas fonctionner en entrée et sortie simultanément. Erreur si la direction n'est pas spécifiée.
2. IO_Port_8bit(pin1...pin8)
Constructeur alternatif. Crée le port sans définir la direction. On utilisera ensuite set_IO_direction() pour la définir à l'exécution. Ce constructeur permet d'alterner entre entrée et sortie (mais pas simultanément).
3. set_IO_direction(char dir)
Définit la direction du port : 'I' pour entrée, 'O' pour sortie. Affiche une erreur sur le moniteur série si non définie.
4. send_8bit_data(int byt)
Envoie 8 bits de données sur les broches spécifiées. L'argument doit être < 255, sinon erreur sur le moniteur série.
5. get_8bit_data(void)
Lit 8 bits depuis les broches spécifiées. Retourne un entier 8 bits représentant l'état des 8 broches.
Exemple 1 : Faire clignoter 8 LEDs alternativement à 1 Hz
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O'); // port sortie
void setup() {}
void loop() {
myport.send_8bit_data(85); // allume LEDs impaires (01010101)
delay(500);
myport.send_8bit_data(170); // allume LEDs paires (10101010)
delay(500);
}
Exemple 2 : Afficher le comptage binaire de 0 à F sur LEDs
#include <IO_Port_8bit.h>
IO_Port_8bit my8bitport(2, 3, 4, 5, 6, 7, 8, 9); // port sans direction
void setup() {
my8bitport.set_IO_direction('O');
}
void loop() {
for (int i = 0; i < 16; i++) {
my8bitport.send_8bit_data(i);
delay(200);
}
}
Exemple 3 : Niveau de tension analogique sur bargraphe 8 LEDs
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9, 'O');
void setup() {
myport.send_8bit_data(255); // allume tout
delay(500);
myport.send_8bit_data(0); // éteint tout
}
void loop() {
int level = analogRead(A0);
level = map(level, 0, 1023, 0, 80);
if (level < 80 && level > 70) myport.send_8bit_data(255);
else if (level <= 70 && level > 60) myport.send_8bit_data(127);
else if (level <= 60 && level > 50) myport.send_8bit_data(63);
else if (level <= 50 && level > 40) myport.send_8bit_data(31);
else if (level <= 40 && level > 30) myport.send_8bit_data(15);
else if (level <= 30 && level > 20) myport.send_8bit_data(7);
else if (level <= 20 && level > 10) myport.send_8bit_data(3);
else if (level <= 10 && level > 0) myport.send_8bit_data(1);
else if (level == 0) myport.send_8bit_data(0);
}
Exemple 4 : Lire 8 bits depuis commutateurs DIP et afficher sur moniteur série
#include <IO_Port_8bit.h>
IO_Port_8bit myport(2, 3, 4, 5, 6, 7, 8, 9);
void setup() {
Serial.begin(9600);
myport.set_IO_direction('I');
Serial.println("Test port entrée 8 bits");
}
void loop() {
int input_byt = myport.get_8bit_data();
Serial.print("entrée reçue = ");
Serial.println(input_byt);
delay(1000);
}
Code
La bibliothèque crée un port E/S 8 bits à partir des broches Arduino et envoie/réceptionne des données numériques 8 bits. (Téléchargement uniquement, pas d'aperçu.)
Schéma
Le port E/S envoie ou reçoit directement des données 8 bits depuis différentes broches.
Processus de fabrication
- Panneau de contrôle Arduino Nano pour Flight Simulator 2020 – Affichage LCD et CDI
- Panneau commutateurs et LED pour Microsoft Flight Simulator 2020 basé sur Arduino
- Système de Surveillance Thermique Scolaire : Précis, Temps Réel et Sécurisé
- Clavier prototype 64 touches Arduino avec registres à décalage - Matrice clavier DIY
- Créer une Zone Sécurisée Arduino pour Déverrouiller Android, iOS et Windows 10 par Empreinte
- Shield TFT 2,8" haute performance pour Arduino Nano – Écran SPI 320×240
- Système de contrôle de cafard DIY avec Arduino – Construisez-le pour moins de 30 €
- Circuit d'entrée analogique isolée pour Arduino : Protection contre les parasites industriels
- Kit de robot de navigation intérieure intelligente pour projets Arduino