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()

Description

Reads the value from a specified digital pin, either HIGH or LOW.


Syntax

digitalRead(pin)


Parameters

pin: the Arduino pin number you want to read


Returns

HIGH or LOW


Example Code

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
}

La description

Lit la valeur à partir d'une broche numérique spécifiée, soit HIGH ou LOW.


Syntaxe

digitalRead(pin)


Paramètres

pin: le numéro de la broche Arduino que vous voulez lire


Retour

HIGH ou LOW


Exemple de code

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

Advanced I/O

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 HIGHpulseIn()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.


Syntaxe

pulseIn(pin, value)
pulseIn(pin, value, timeout)


Paramètres

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.


Retour

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.


Exemple de code

/* 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

Arduino_328P_pulseIn.pdsprj

Créé avec HelpNDoc Personal Edition: Maximisez vos capacités de documentation avec l'analyseur de projet de HelpNDoc