Problème lire les ports

Bonjour à tous,

J'utilise depuis quelque temps une carte Arduino, j'aimerais savoir comment utiliser et initialiser les ports analogiques et numériques. En effet j'aimerais pouvoir utiliser les entrées numériques reliées à des boutons poussoirs et du coup aux sorties analogiques reliés à des LEDs. Quand les boutons poussoir sont activés les LEDs s'éteignent et inversement.

Du coup l'option des "if" à suivre pour dire à chaque entrées quoi faire est impossible car le programme effectue un par un les instructions et moi j'aimerais avoir les LEDs qui s'allument toutes en même temps.

Merci d'avance pour vos réponses :slight_smile:

Tu devrais te renseigner sur l'utilisation des sorties digitales et "analogiques" et comment brancher des LEDS. Voici quelques liens :

LED avec un Arduino
Tuto d'Eskimon et sorties analogiques-enfin-presque

Tu en sauras plus après ça et tu reviendras avec des questions plus précises...

aragos:
Du coup l'option des "if" à suivre pour dire à chaque entrées quoi faire est impossible car le programme effectue un par un les instructions et moi j'aimerais avoir les LEDs qui s'allument toutes en même temps.

Bonjour,

Tu peux bien sur accéder directement aux ports du micro pour allumer plusieurs leds en même temps, mais est ce nécessaire ?
En utilisant les fonctions digitalWrite ou analogWrite tu vas avoir un décalage de quelques dizaines de microsecondes entre chaque allumage. Ca m'étonnerait que ce soit visible à l'oeil.

Merci de ta réponse, j'ai trouvé des réponses à mes questions, mais le problème est que je n'arrive pas à envoyer les données récoltés par mon PORTD (digital) et de les envoyer au PORTC (analogique).
Comment faire cela ?

Le portc n'est pas un port analogique.
Les sorties 'analogiques' sont connectées aux sorties timer et nécessitent une programmation des timer pour fonctionner en 'analogique' (PWM).
Ce que tu envisages n'est donc pas possible directement, il faut travailler bit par bit.

et de les envoyer au PORTC (analogique).

Et oui comme l'a dit Kamill les ports sont tous numériques.

Les entrées A0 à A5 (arduino) sont connectées sur deux parties différentes du micro :
Pour un 328p

  1. sur le port C (C0 à C5)
  2. aux entrées d'un multiplexeur analogique.
  3. Concernant A4 et A5 en supplément elles sont connectés sur le module I2C.

Le choix de l'une ou de l'autre sous partie du micro se fait en configurant des registres.
Plus simplement l'appel à digitalRead ou Write configure les registres pour envoyer le signal sur la partie numérique.
L'appel à analogRead configure les registres pour envoyer le signal vers le multiplexeur analogique

Car il n'y a qu'un seul convertisseur analogique digital sur le micro, son entrée est reliée à la sortie du multipleur analogique.

Sur les micros avr il n'y a pas de convertisseur digital analogique.
Ce qui existe c'est de la PWM (pulse width modulation) en français MLI (Modulation par Largeur d'Impulsion).
Cette PWM n'est accessible que sur quelques I/O : celles qui peuvent être commandées par un timer.
Six au total sur un 328p.

La PWM est un signal numérique.
Ce n'est que si on effectue un lissage par filtrage Résistance/condensateur que l'on peut obtenir une tension continue.

Par defaut avec la configuration arduino la fréquence de PWM est de 500 Hz ou de 1kHz. On peut l'augmenter jusqu'à 64 kHz.
Mais grace à la persistance rétinienne à 500Hz l'œil ne verra aucun clignotement, aucun lissage n'est nécessaire, c'est l'œil qui le fait.

Bien plus de renseignements sont disponibles dans la datasheet du microcontrôleur.