[conseil] multitâche à répétition

Bonjour à tous, je suis novice sur Arduino, mais, même si mon niveau d'électronique ne vole pas bien haut, j'arrive toujours à mes fins... j'arrive à nager !

Je suis actuellement sur un projet en UNO pour lequel j'ai une séquence d'allumage, de clignotement, d'extinction (dans tous les sens) de LED (23 LED dirigées par 13 ports) sur 2-3 minutes de boucle.
Je souhaite, parallèlement à cette séquence, pouvoir utiliser un bouton qui joue une courte mélodie sur une carte extérieure à l'Arduino.

J'ai couplé les deux programmes, mais:

  • En fermant la séquence bouton tout de suite après l'ordre d'appui, il faut jouer le bouton avant qu'il ne soit trop tard (fin de la séquence bouton dans la séquence entière). Ca parait logique.
  • En mettant un }} pour clore la séquence globale, cruelle logique encore, le bouton poussoir n'est actif qu'une fois par séquence de LED...
  • j'ai essayé de répéter le code de bouton plusieurs fois dans la séquence, entre deux clignos, en fermant } avant chaque nouvelle séquence de bouton (j'espérais pouvoir générer des boucles locales s'enchainant les unes aux autres). Mais pour une fois l'Arduino n'est pas aussi intuitif que ça... toujours qu'un appui bouton par séquence entière de LED !

Une telle séquence est-elle possible avec une seule Arduino ? Si oui, comment que je dois-je m'y prendre ? =(

Par avance, merci pour votre aide...

En utilisant des interruptions

Cette solution avait été éliminée dès le début... la séquence LED ne peut pas être intérompue (une tonne de delays dans tous les sens) à n'importe quel moment, bien évidemment, sinon ça ressemble plus à rien.

L'appui sur un bouton lève un drapeau, ça prends largement moins d'une milliseconde.

Pas faux ! Je vais tester, mais ça risque quand même d'être relou...
En fait, le jeu de LED est un faux "attractive mode" d'un plateau de flipper, et l'impression de faux contact à la pression du bouton peut-être quand même génante visuellement.

Merci pour le conseil, je m'y colle.

Bonjour,

Multitâche (enfin, pseudo multitâche) et delay() ... cherche l'erreur :wink:

Avec un peu de code à se mettre sous la dent on pourrait t'aider plus efficacement.