Fréquence clignotement LED

Bonjour à tous, mon projet est actuellement simple mais qui reste compliqué pour moi ( débutant dans le domaine)

Le but de ce que je cherche:

  • Pouvoir sélectionner la vitesse de clignotement d'une LED avec un commutateur décimal. Exemple position 1 = 1 clignotement par seconde et ainsi de suite
  • Avoir un retour visuel sur un écran LCD 16*2 de cette vitesse de clignotement.

Merci pour vos réponses ou vos suggestions

Bonjour

Vous avez le tuto blink without delay qui colle avec votre projet, il suffira d'utiliser un digitalRead sur le commutateur.

Dans un premier temps afficher le tout sur le terminal serie.

Puis si c'est bon , afficher sur un LCD ( prenez avec i2c ).

@+

avec un commutateur décimal

Qu'est ce qu'un commutateur décimal ?
Un commutateur rotatif à 10 positions ?

Une roue codeuse 10 positions si tu préfère

Ceci par exemple ?

Ou

Donc 5 broches ?

Il faudra donc :

  • 1 sortie digitales pour la LED
  • 4 entrées digitales pour la roue codeuse
  • LCD
  • 6 sorties pour le LCD si c’est un LCD sans I2C
  • 2 sorties A4 A5 pour le LCD si c’est un LCD I2C

Il faudra préciser tout ça.

Les "roues codeuses" il en existe de plusieurs modèles et aussi différentes façons de les utiliser.
Par exemple la bleue du message d'hbachetti peut être utilisée soit avec une entrée analogique avec des commutation de résistances d'un pont diviseur à créer, soit en numérique avec 10 entrées numériques.

Donne ton schéma électrique du branchement de ta "roue codeuse".
Cela te permettra d'obtenir des réponses précises et efficaces.

Et bien évidement si c'est un projet scolaire (au hasard pour le bac) il est préférable de le dire immédiatement.

Du coup il s’agit de la roue codeuse en bleu plus haut dans les messages. Ce n’est pas un projet scolaire mais perso.

J’ai fait un bout de schéma pour montrer ce que je veux exactement

Les points C qui sont connectés à la masse sont-ils des inverseurs reliés soit à 1 soit à 4 (ou 2 et 8 ) ?
Quelle est la séquence quand on tourne le bouton ?
C'est ce qu'il faudra que tu gère par le programme.
Soit tu utilises les pull-up sur les entrées du micro soit il manque des résistances .

Je comprends vaguement ta première question. pour ce qui est de la séquence, on part de 1 qui signifie une fréquence de 100 ms. On incrémente de 100 ms à chaque position ; 2 = 200 ms, 6 = 600 ms

Pour le branchement j'utiliserais les pull-up des entrées

Tu as deux solutions après avoir lu la roue codeuse :

Faire clignoter la LED comme le fait l'exemple Blink de l'IDE.
Faire clignoter la LED comme le fait l'exemple BlinkWithoutDelay de l'IDE.

Dans le premier cas, la roue codeuse sera lue après chaque séquence ON/OFF de la LED.
Dans le deuxième cas, la roue codeuse pourra être lue en temps réel, donc la fréquence sera modifiée immédiatement.

Pour le décodage

Un petit tour sur internet et je trouve ici :

Il faut que tu décodes ce qui arrive sur les entrées et que tu attribues une fréquence à chaque position.

Merci pour le tableau des différentes positions c'est toujours mieux que de faire les calculs de tête :).

Dans mon cas, mettre jour la fréquence immédiatement serait intéressant. Je vais regarder dans la matinée avec BlinkWithoutDelay pour voir ce que je peux faire avec.

Comme tu as utilisé les pins A0 - A3 pour la roue tu peux lire directement la valeur :

void setup()
{
  Serial.begin(115200);
  // A0 - A3 input
  DDRC = B11110000;
  // A0 - A3 pullups
  PORTC |= B00001111;
}

void loop()
{
  uint8_t coder = ~PINC & 0x0f;
  Serial.println(coder);
}

Par contre il faudrait brancher 1 sur A0, 2 sur A1, 4 sur A2, 8 sur A3.