Digitalwrite() arduino

Digitalwrite() arduino

Arduino analogwrite

Le très répandu Arduino IDE offre de nombreuses fonctions faciles à utiliser, l’une d’entre elles est void digitalWrite(uint8_t pin, uint8_t val) . Elle met l’une des broches du microcontrôleur à l’état haut ou bas, ce qui est très utile dans de nombreux cas. Cependant, elle a une performance vraiment faible, c’est-à-dire le temps d’exécution. Ce post analyse à la fois la vitesse et l’intérieur de la fonction digitalWrite, et propose des solutions alternatives et performantes pour fixer les broches de sortie.

Évidemment, il y a beaucoup de contrôles impliqués, ce qui rend la fonction très robuste. Néanmoins, la robustesse de la fonction n’est pas nécessairement nécessaire, par exemple lorsque l’on sait que la broche de paramétrage est toujours comprise dans $[0,13]$ (broches numériques de l’Arduino Uno), ou que les broches PWM ne sont pas utilisées. Dans de tels cas, plusieurs vérifications peuvent être abandonnées, ce qui conduit à une version plus légère, qui ne fonctionne que pour les broches numériques (PORTB et PORTD). Garretlab a écrit un article dans lequel le code source de la fonction est analysé plus en profondeur.

Il y a une excellente introduction sur le sujet sur le site Arduino. En résumé, il s’agit de régler directement les broches de sortie, conformément à la fiche technique. C’est la méthode la plus rapide pour manipuler les registres et donc les états des broches de sortie.

Sortie Arduino

Les broches de la carte Arduino peuvent être configurées comme des entrées ou des sorties. Nous allons expliquer le fonctionnement des broches dans ces modes. Il est important de noter que la majorité des broches analogiques de l’Arduino, peuvent être configurées, et utilisées, exactement de la même manière que les broches numériques.

  Pulse width modulation arduino

Les broches Arduino sont par défaut configurées comme des entrées, il n’est donc pas nécessaire de les déclarer explicitement comme des entrées avec pinMode() lorsque vous les utilisez comme des entrées. Les broches configurées de cette manière sont dites dans un état de haute impédance. Les broches d’entrée imposent des exigences extrêmement faibles au circuit qu’elles échantillonnent, équivalentes à une résistance en série de 100 mégaohms 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) auxquelles rien n’est connecté, ou auxquelles sont connectés des fils qui ne sont pas reliés à d’autres circuits, signalent des changements apparemment aléatoires de l’état de la broche, en captant le bruit électrique de l’environnement ou en couplant capacitivement l’état d’une broche voisine.

Arduino tension de sortie numérique

digitalWrite() est juste une fonction de commodité pour cacher la complexité à l’utilisateur, afin qu’il puisse simplement utiliser un numéro de broche et une valeur. Cette complexité prend un certain temps pour s’exécuter. Si cela est trop lent pour vous, vous devez aller un peu plus loin dans le terrier du lapin et utiliser la manipulation directe du port :

Dans le microcontrôleur de l’Arduino, toutes les fonctions spéciales pour les périphériques et autres (E/S numériques, ADC, série (UART), SPI, temporisateur, …) sont configurées via des registres de fonctions spéciales (SFR). Il s’agit d’emplacements mémoire spécifiques, qui sont directement connectés aux périphériques. Vous pouvez configurer l’ensemble du microcontrôleur en réglant ces registres sur des valeurs spécifiques.

  Où se trouve le capteur de température?

Pour les E/S numériques, vous devez d’abord savoir que les broches du microcontrôleur sont classées en groupes de 8 broches maximum. Ces groupes sont appelés Ports. Chaque port disponible du microcontrôleur reçoit un caractère, comme PORTB. Sur l’Arduino Nano par exemple PORTD comprend les broches 0 à 7.

Vous pouvez lire tout cela dans la fiche technique du microcontrôleur utilisé. La fiche technique est une lecture obligatoire (au moins les chapitres pertinents), si vous voulez contrôler le microcontrôleur via ses registres. Dans la plupart des microcontrôleurs, ces registres sont nommés comme ci-dessus. Mais certains microcontrôleurs peuvent définir d’autres noms. La fiche technique correspondante énumère tous les registres avec des descriptions assez détaillées.

Tension de sortie de l’Arduino

Ce bloc de code est utilisé pour lire la valeur d’une broche numérique définie, soit haute ou basse. Et en retour, il donnera l’état de la broche High ou Low. Par exemple, si nous voulons que la LED qui est connectée à l’une des broches numériques de l’Arduino s’allume dans certaines conditions, nous définirons cette broche dans le bloc de code ci-dessus et pourrons lire l’état de cette broche en tant que High ou Low.

pinMode détermine si une broche spécifiée se comporte comme une entrée ou une sortie – lit-elle un signal à l’Arduino (lu à partir d’un capteur, par exemple) ou le transmet-elle à un autre composant (une led pour l’allumer, un moteur pour le déplacer). Cela se fait en changeant l’impédance sur la broche – haute impédance pour l’entrée, basse pour la sortie.

  Projets créatifs avec arduino

INPUT_PULLUP est utilisé lorsque nous avons besoin d’un pull-up interne. Par exemple, si nous connectons un bouton poussoir à notre arduino, nous avons besoin d’une résistance pull-up. Alors cette chose peut être faite par ce INPUT_PULLUP. Ainsi, nous n’avons pas besoin de résistance dans le circuit.

PinMode définit le mode ou la fonction de la broche, comme l’entrée (lorsque vous la connectez à un capteur), ou la sortie (lorsque vous la connectez à une LED par exemple). Il existe également quelques variantes (comme pullup/pulldown pour des cas particuliers).