Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

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

À 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

  1. Panneau de contrôle Arduino Nano pour Flight Simulator 2020 – Affichage LCD et CDI
  2. Panneau commutateurs et LED pour Microsoft Flight Simulator 2020 basé sur Arduino
  3. Système de Surveillance Thermique Scolaire : Précis, Temps Réel et Sécurisé
  4. Clavier prototype 64 touches Arduino avec registres à décalage - Matrice clavier DIY
  5. Créer une Zone Sécurisée Arduino pour Déverrouiller Android, iOS et Windows 10 par Empreinte
  6. Shield TFT 2,8" haute performance pour Arduino Nano – Écran SPI 320×240
  7. Système de contrôle de cafard DIY avec Arduino – Construisez-le pour moins de 30 €
  8. Circuit d'entrée analogique isolée pour Arduino : Protection contre les parasites industriels
  9. Kit de robot de navigation intérieure intelligente pour projets Arduino