Arduino - Fonctions d'E / S

Les broches de la carte Arduino peuvent être configurées en tant qu'entrées ou sorties. Nous expliquerons le fonctionnement des broches dans ces modes. Il est important de noter qu'une majorité de broches analogiques Arduino peuvent être configurées et utilisées exactement de la même manière que les broches numériques.

Broches configurées comme INPUT

Les broches Arduino sont configurées par défaut comme entrées, elles n'ont donc pas besoin d'être explicitement déclarées comme entrées avec pinMode()lorsque vous les utilisez comme entrées. On dit que les broches configurées de cette manière sont dans un état à haute impédance. Les broches d'entrée imposent des exigences extrêmement faibles au circuit qu'elles échantillonnent, ce qui équivaut à une résistance en série de 100 mégaohm devant la broche.

Cela signifie qu'il faut très peu de courant pour faire passer la broche d'entrée d'un état à un autre. Cela rend les broches utiles pour des tâches telles que la mise en œuvre d'un capteur tactile capacitif ou la lecture d'une LED comme photodiode.

Les broches configurées comme pinMode (pin, INPUT) sans rien de connecté, ou avec des fils connectés qui ne sont pas connectés à d'autres circuits, signalent des changements apparemment aléatoires dans l'état des broches, captent le bruit électrique de l'environnement ou couplent de manière capacitive l'état d'une épingle à proximité.

Résistances pull-up

Les résistances pull-up sont souvent utiles pour diriger une broche d'entrée vers un état connu si aucune entrée n'est présente. Cela peut être fait en ajoutant une résistance pull-up (à + 5V), ou une résistance pull-down (résistance à la masse) sur l'entrée. Une résistance 10K est une bonne valeur pour une résistance pull-up ou pull-down.

Utilisation de la résistance de traction intégrée avec des broches configurées comme entrée

Il y a 20 000 résistances de pull-up intégrées dans la puce Atmega qui sont accessibles à partir du logiciel. Ces résistances de traction intégrées sont accessibles en réglant lepinMode()comme INPUT_PULLUP. Cela inverse efficacement le comportement du mode INPUT, où HIGH signifie que le capteur est éteint et LOW signifie que le capteur est activé. La valeur de ce pull-up dépend du microcontrôleur utilisé. Sur la plupart des cartes basées sur AVR, la valeur est garantie entre 20 kΩ et 50 kΩ. Sur l'Arduino Due, il se situe entre 50kΩ et 150kΩ. Pour la valeur exacte, consultez la fiche technique du microcontrôleur de votre carte.

Lors de la connexion d'un capteur à une broche configurée avec INPUT_PULLUP, l'autre extrémité doit être connectée à la terre. Dans le cas d'un simple interrupteur, cela amène la broche à lire HIGH lorsque l'interrupteur est ouvert et LOW lorsque l'interrupteur est enfoncé. Les résistances pull-up fournissent suffisamment de courant pour allumer une LED faiblement connectée à une broche configurée comme entrée. Si les LED d'un projet semblent fonctionner, mais très faiblement, c'est probablement ce qui se passe.

Les mêmes registres (emplacements de mémoire interne de la puce) qui contrôlent si une broche est HIGH ou LOW contrôlent les résistances de rappel. Par conséquent, une broche qui est configurée pour avoir des résistances de tirage activées lorsque la broche est en mode INPUT, aura la broche configurée comme HIGH si la broche est ensuite commutée en mode OUTPUT avec pinMode (). Cela fonctionne également dans l'autre sens, et une broche de sortie laissée dans un état HIGH aura la résistance de pull-up réglée si elle est commutée sur une entrée avec pinMode ().

Example

pinMode(3,INPUT) ; // set pin to input without using built in pull up resistor
pinMode(5,INPUT_PULLUP) ; // set pin to input using built in pull up resistor

Broches configurées comme SORTIE

Les broches configurées comme OUTPUT avec pinMode () sont dites dans un état de basse impédance. Cela signifie qu'ils peuvent fournir une quantité substantielle de courant à d'autres circuits. Les broches Atmega peuvent fournir (fournir un courant positif) ou absorber (fournir un courant négatif) jusqu'à 40 mA (milliampères) de courant vers d'autres appareils / circuits. C'est assez de courant pour allumer une LED (n'oubliez pas la résistance en série), ou pour faire fonctionner de nombreux capteurs mais pas assez de courant pour faire fonctionner des relais, des solénoïdes ou des moteurs.

Tenter de faire fonctionner des appareils à courant élevé à partir des broches de sortie peut endommager ou détruire les transistors de sortie de la broche ou endommager l'ensemble de la puce Atmega. Souvent, cela se traduit par une broche «morte» dans le microcontrôleur, mais les puces restantes fonctionnent toujours correctement. Pour cette raison, il est judicieux de connecter les broches de SORTIE à d'autres appareils via des résistances de 470Ω ou 1k, à moins qu'un courant maximal tiré des broches ne soit requis pour une application particulière.

Fonction pinMode ()

La fonction pinMode () est utilisée pour configurer une broche spécifique pour qu'elle se comporte comme une entrée ou une sortie. Il est possible d'activer les résistances de rappel internes avec le mode INPUT_PULLUP. De plus, le mode INPUT désactive explicitement les pull-ups internes.

Syntaxe de la fonction pinMode ()

Void setup () {
   pinMode (pin , mode);
}
  • pin - le numéro de la broche dont vous souhaitez régler le mode

  • mode - INPUT, OUTPUT ou INPUT_PULLUP.

Example

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(button , INPUT_PULLUP); 
   // set the digital pin as input with pull-up resistor
   pinMode(button , OUTPUT); // set the digital pin as output
}

void setup () {
   If (digitalRead(button ) == LOW) // if button pressed {
      digitalWrite(LED,HIGH); // turn on led
      delay(500); // delay for 500 ms
      digitalWrite(LED,LOW); // turn off led
      delay(500); // delay for 500 ms
   }
}

Fonction digitalWrite ()

le digitalWrite()La fonction est utilisée pour écrire une valeur HIGH ou LOW sur une broche numérique. Si la broche a été configurée comme SORTIE avec pinMode () , sa tension sera réglée à la valeur correspondante: 5V (ou 3,3V sur les cartes 3,3V) pour HIGH, 0V (masse) pour LOW. Si la broche est configurée comme INPUT, digitalWrite () activera (HIGH) ou désactivera (LOW) le pullup interne sur la broche d'entrée. Il est recommandé de régler pinMode () sur INPUT_PULLUP pour activer la résistance pull-up interne.

Si vous ne réglez pas le pinMode () sur OUTPUT et connectez une LED à une broche, lors de l'appel digitalWrite (HIGH), la LED peut sembler faible. Sans définir explicitement pinMode (), digitalWrite () aura activé la résistance pull-up interne, qui agit comme une grande résistance de limitation de courant.

Syntaxe de la fonction digitalWrite ()

Void loop() {
   digitalWrite (pin ,value);
}
  • pin - le numéro de la broche dont vous souhaitez régler le mode

  • value - HAUT ou BAS.

Example

int LED = 6; // LED connected to pin 6

void setup () {
   pinMode(LED, OUTPUT); // set the digital pin as output
}

void setup () { 
   digitalWrite(LED,HIGH); // turn on led
   delay(500); // delay for 500 ms
   digitalWrite(LED,LOW); // turn off led
   delay(500); // delay for 500 ms
}

Fonction analogRead ()

Arduino est capable de détecter s'il y a une tension appliquée à l'une de ses broches et de la signaler via la fonction digitalRead (). Il y a une différence entre un capteur marche / arrêt (qui détecte la présence d'un objet) et un capteur analogique, dont la valeur change continuellement. Pour lire ce type de capteur, nous avons besoin d'un autre type de broche.

Dans la partie inférieure droite de la carte Arduino, vous verrez six broches marquées «Analog In». Ces broches spéciales indiquent non seulement si une tension leur est appliquée, mais également sa valeur. En utilisant leanalogRead() fonction, nous pouvons lire la tension appliquée à l'une des broches.

Cette fonction renvoie un nombre compris entre 0 et 1023, qui représente des tensions comprises entre 0 et 5 volts. Par exemple, si une tension de 2,5 V est appliquée à la broche numéro 0, analogRead (0) renvoie 512.

Syntaxe de la fonction analogRead ()

analogRead(pin);
  • pin - le numéro de la broche d'entrée analogique à lire (0 à 5 sur la plupart des cartes, 0 à 7 sur le Mini et le Nano, 0 à 15 sur le Mega)

Example

int analogPin = 3;//potentiometer wiper (middle terminal) 
   // connected to analog pin 3 
int val = 0; // variable to store the value read

void setup() {
   Serial.begin(9600); // setup serial
} 

void loop() {
   val = analogRead(analogPin); // read the input pin
   Serial.println(val); // debug value
}