6.2 Les Entrées |
Sous Flowcode c'est le pictogramme qui permet de gérer les lignes de Port en entrée.
Aide: https://www.flowcode.co.uk/wiki/index.php?title=Input_Icon_Properties
Sous Arduino |
La fonction en langage C permettant de lire une ligne de Port du microcontrôleur en entrée est : digitalRead()
Reads the value from a specified digital pin, either HIGH or LOW.
digitalRead(pin)
pin: the Arduino pin number you want to read
HIGH or LOW
Sets pin 13 to the same value as pin 7, declared as an input.
int ledPin = 13; // LED connected to digital pin 13
int inPin = 7; // pushbutton connected to digital pin 7
int val = 0; // variable to store the read value
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output
pinMode(inPin, INPUT); // sets the digital pin 7 as input
}
void loop() {
val = digitalRead(inPin); // read the input pin
digitalWrite(ledPin, val); // sets the LED to the button's value
}
Lit la valeur à partir d'une broche numérique spécifiée, soit HIGH ou LOW.
digitalRead(pin)
pin: le numéro de la broche Arduino que vous voulez lire
HIGH ou LOW
Définit la broche 13 (la DEL sur la carte) à la même valeur que la broche 2, déclarée comme entrée.
int ledPin = 13; // LED connected to digital pin 13
// DEL connectée à la broche numérique 13
int inPin = 2; // pushbutton connected to digital pin 2
// bouton-poussoir connecté à la broche numérique 2
int val = 0; // variable to store the read value
// val:variable pour stocker la valeur lue
void setup() {
pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output
// définit la broche numérique 13 comme sortie
pinMode(inPin, INPUT); // sets the digital pin 2 as input
// définit la broche numérique 2 comme entrée
}
void loop() {
val = digitalRead(inPin); // read the input pin
// lire la broche d'entrée
digitalWrite(ledPin, val); // sets the LED to the button's value
// fixe la DEL à la valeur du bouton
}
Simulation sous Proteus 8
Téléchargement du schéma structurel sous Proteus 8: Arduino 328_Entrée.pdsprj
Il existe aussi d'autres fonctions permettant de gérer les Entrées/Sorties
noTone()
pulseIn()
pulseInLong()
shiftIn()
shiftOut()
tone()
Exemple, utilisation de la Fonction "pulseIn( )"
La description
Lit une impulsion ( HIGH ou LOW) sur une broche. Par exemple, si value est HIGH, pulseIn()attend que la broche passe de LOW à HIGH, démarre le chronométrage, puis attend que la broche parte LOW et arrête le chronométrage. Renvoie la durée de l'impulsion en microsecondes ou abandonne et renvoie 0 si aucune impulsion complète n'a été reçue dans le délai imparti.
La synchronisation de cette fonction a été déterminée empiriquement et montrera probablement des erreurs dans des impulsions plus longues. Fonctionne sur des impulsions de 10 microsecondes à 3 minutes.
Noter si le délai d'attente facultatif est utilisé, le code s'exécutera plus rapidement.
pulseIn(pin, value)
pulseIn(pin, value, timeout)
pin: le numéro de la broche Arduino sur laquelle vous souhaitez lire l'impulsion. Types de données autorisés : int.
value: type d'impulsion à lire : soit HIGH soit LOW . Types de données autorisés : int.
timeout (facultatif) : le nombre de microsecondes à attendre pour que l'impulsion démarre ; la valeur par défaut est une seconde. Types de données autorisés : unsigned long.
La durée de l'impulsion (en microsecondes) ou 0 si aucune impulsion n'a démarré avant le délai d'attente. Type de données : unsigned long.
/* Mesure de Fréquence
Utilisation de la fonction pulseIn
https://www.arduino.cc/reference/en/language/functions/advanced-io/pulsein/
*/
int Signal_GBF = A1; // Signal Analogique
long frequence =1;
long old_frequence =0;
void setup() {
Serial.begin(9600); // Configure le port série pour l'exemple
pinMode(Signal_GBF, INPUT); // configure la broche en entrée (signal venant du GBF)
}
void loop() {
noInterrupts();
unsigned long etat_haut = pulseIn(Signal_GBF, HIGH); // Mesure la durée de l'impulsion haute (timeout par défaut de 1s)
interrupts();
noInterrupts();
unsigned long etat_bas = pulseIn(Signal_GBF, LOW); // Mesure la durée de l'impulsion basse (timeout par défaut de 1s)
interrupts();
long periode = (etat_bas + etat_haut); // Calcul de la période = état haut + état bas
frequence = (1/ (periode*0.000001)); // Calcul de la fréquence = 1 / periode
if (frequence != old_frequence) {
Serial.print("Ton : ");Serial.print(etat_haut);Serial.println("us"); // temps à l'état haut en µs
Serial.print("Toff : ");Serial.print(etat_bas);Serial.println("us"); // temps à l'état bas
Serial.print("T : ");Serial.print(periode);Serial.println("us"); // T: période en µs
Serial.print("F : ");Serial.print(frequence);Serial.println(" Hz"); // F: fréquence en Hz
Serial.println("");
old_frequence = frequence;
}
delay(200);
}
Simulation sous proteus
Créé avec HelpNDoc Personal Edition: Maximisez vos capacités de documentation avec l'analyseur de projet de HelpNDoc