Partage
  • Partager sur Facebook
  • Partager sur Twitter

arduino uno multitache possible ou pas?

Sujet résolu
14 décembre 2013 à 18:31:31

bonjour,

Petite question pour les connaisseurs arduino uno

Peut on allumer une led1 avec une temporisation de ex 2min

Et que en même temps que le la led1 et allumer,a environ 1 minute plus tard une 2 emme led s’allume  avec bien sur un temporisation exemple de 3minute? pendant que la led1 et encore allumer et fini sont cycle de 2min..

Après une semaine de recherche sur le net j ai trouvé aucun exemple incroyable

Peut être mal fait ma recherche

Merci d’avance pour le coup de pouce….

-
Edité par androstorm 14 décembre 2013 à 23:49:38

  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2013 à 19:24:20

Déjà BONJOUR !

Si j'ai bien compris, tu veux allumer une led à  t = 2min puis une seconde led à t = 3min ?

Si c'est cela je ne vois pas où se trouve le multitâches ^^

As-tu lu le cours sur l'arduino ?


Toutes les réponses à tes questions sont dedans, tu peux même procéder de plusieurs façons : fonction delay (moche), interruptions,...etc

  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2013 à 19:59:30

Heu non c est pas ce que je voulais dire..oups j ai un peut modifier la question..desolé

-
Edité par androstorm 14 décembre 2013 à 20:05:37

  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2013 à 20:01:59

Alors il serait peut-être judicieux de réexpliquer ;)

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

Anonyme
14 décembre 2013 à 22:46:25

Bonjour,

Il fut un temps, ou un homme, un seul, partit a la recherche de cette eledorados qu'est le multi-tâche sur... (oups désolé)

DuinOS, est, surement peut-etre, ton ami, si il est encore à jour...


Ho chef, une mouche !
Humm... Qu'avons nous comme arme ?
Heu... Le rayon de la mort de Tesla, la bombe nucléaire d'Einstein et la tapette de mami.
Trés bien ! Prennons le rayon de la mort !
  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2013 à 23:50:53

ha trop cool thelme et merci

alors tu confirme que l'ont peut pas faire cela avec arduino uno?

  • Partager sur Facebook
  • Partager sur Twitter
14 décembre 2013 à 23:56:05

Si c'est possible, si on arrive à comprendre ce que tu veux exactement faire... Moi ce que je comprend c'est que tu veux allumer deux LEDs, ca c'est possible, et tu veux les allumer à des moments différents, ce qui est possible aussi... D'ailleurs, le multitache en tant que tel n'existe pas réellement (sauf si tu as plusieurs processeurs). Tout est question de timing et d'ordonnancement.

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

15 décembre 2013 à 0:02:13

Alors :

1. Oui ton projet est possible via des timers. Avec deux timers seulement sur l'Arduino faut bien réfléchir à l'algorithme mais avec 2 leds c'est normalement faisable. 

2. Il n'y a pas forcément d'example pour tous tes projets, faut bien coder un truc nouveau un jour ou l'autre. Sachant que tu sais ce que tu veux faire, give it a try.

3. Le multitâche est tout à fait possible si on parle bien du même multitâche : plusieurs tâches qui sont plus ou moins exécutées à la suite mais dans l'ensemble ca fait comme si plusieurs tournaient en même temps (comme sur un OS style Windows). Faut juste coder le framework, bon sur une Arduino Uno ca risque de prendre pas mal de place donc c'est peut-être inutile.
  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2013 à 0:23:03

merci zeqL ça a l aire bien compliqué pour le novice que je suis,j ai toujours trouver des projects ou les leds qui clignottes mais jamais un projet avec 2 temporisations différentes pour chaque leds et qui sont indépendant l 'une de l'autre..

merci eskimon ,je vais essayer de donner un exemple un peut plus concret..

-------------------------

Détecteur ultrason dans un couloir a plusieurs   entrées A et B
Il faudrait pouvoir allumer grâce au détecteur ultrason si passage entrée A  alors allume led A pendant un certain temps ex 4 minutes

si passage entrée B     alors allume led B pendant un certain temps ex 6minutes

jusqu’ la facile….

Ici que ça ce corse

Mais si après une minute il y du passage aussi a l’entrée B la led B pendant 6 minutes doit s allumer même si la led A n as pas terminer sont cyle des 4minutes..

Et vis versa

J espère que je me suis fait mieux comprendre encore desolé..

-
Edité par androstorm 15 décembre 2013 à 1:15:02

  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2013 à 12:26:13

Ok, c'est plus clair maintenant !

Et comme chui de bonne humeur voici un exemple de code qui pourrait marcher

define TON_A 180000 // 3 minutes (3601000)

define TON_A 120000 // 2 minutes (2601000)

//broches de sorties des leds const int led_A = 2; const int led_B = 3;

//garde une trace du temps long temps_A, temps_B;

//garde une trace de l'état des leds char etat_A = LOW; char etat_B = LOW;

void loop() {

// Vérifie les UltraSon pour savoir s'il faut allumer les leds if(US_A) {

  temps_A = millis();
  etat_A = HIGH;
  digitalWrite(led_A, HIGH);

} if(US_B) {

  temps_B = millis();
  etat_B = HIGH;
  digitalWrite(led_B, HIGH);

}

// On regarde s'il faut éteindre les leds ou pas if(etat_A == HIGH && ((millis() - temps_A) > TON_A)) {

  etat_A = LOW;
  digitalWrite(led_A, LOW);

} if(etat_B == HIGH && ((millis() - temps_B) > TON_B)) {

  etat_B = LOW;
  digitalWrite(led_B, LOW);

}

}

</pre>

-
Edité par Eskimon 15 décembre 2013 à 15:49:59

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

15 décembre 2013 à 15:35:27

houaou trop cool Eskimon et merci, donc ça veut dire que c est possible, 

a moi maintenant de comprendre tout ca et de rajouter ce qu il faut.

Un tout grand merci

  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2013 à 18:38:29

Comment dire, quand ont et novice comme moi,ca fait du bien de pouvoir essayer de résoudre un problème avec un bout de code adapter épurer de tout chose inutile...

Se mettre a la place de la personne qui a une problème c est plutôt balèze

Alors merci encore Eskimon pour le temps que tu as passé

J ai modifié pour que ca fonctionne avec des 2 pousoirs car pas encore reçu le détecteur ultrason

//////////////////déclaration des variables///////////////////////////////////
#define TON_A 10000  // 10 SECONDE
#define TON_B 5000  // 5 SECONDE
int US_AX = 8;//pousoir A ,PIN 8
int US_A;
int US_BX = 9;//pousoir B ,PIN 9
int US_B;
 //broches de sorties des leds
const int led_A = 2;
const int led_B = 3;
 
//garde une trace du temps
long temps_A, temps_B;
 
//garde une trace de l'état des leds
char etat_A = LOW;
char etat_B = LOW;
////////////////initialisation et configuration des entrées/sorties ///////////
void setup()
{
pinMode(US_A,INPUT);//ENTREE POUSSOIR A
pinMode(US_B,INPUT);//ENTREE POUSSOIR B
pinMode(led_A,OUTPUT);//SORTIE LED A
pinMode(led_B,OUTPUT);//SORTIE LED B
}
//////////////////////////////////execution en boucle///////////////////////////
void loop() {
 
   // Vérifie les poussoirs pour savoir s'il faut allumer les leds
   US_A = digitalRead(US_AX);//US_A = US_AX lire la valeur du port PIN 8
   if(US_A) {
      temps_A = millis();
      etat_A = HIGH;
      digitalWrite(led_A, HIGH);
   }
   US_B = digitalRead(US_BX);////US_B = US_BX lire la valeur du port PIN 9
   if(US_B) {
      temps_B = millis();
      etat_B = HIGH;
      digitalWrite(led_B, HIGH);
   }
 
   // On regarde s'il faut éteindre les leds ou pas
   if(etat_A == HIGH && ((millis() - temps_A) > TON_A)) 
   {
      etat_A = LOW;
      digitalWrite(led_A, LOW);
   }
   if(etat_B == HIGH && ((millis() - temps_B) > TON_B)) 
   {
      etat_B = LOW;
      digitalWrite(led_B, LOW);
   }
 
}



Merci bonne fin de week andro

-
Edité par androstorm 15 décembre 2013 à 18:39:35

  • Partager sur Facebook
  • Partager sur Twitter
15 décembre 2013 à 18:42:20

Par contre comme on l'a souvent dit sur d'autres sujets, faire gaffe avec millis(). ca va fonctionner pendant 50 jours puis après ca risque de buguer (prévoir un reset software par exemple ?). Mais bon, pour du "proof of concept" on va dire que ca suffit :D

  • Partager sur Facebook
  • Partager sur Twitter

Retrouvez moi sur mon blog et ma chaine Youtube !

15 décembre 2013 à 18:50:08

Oui merci pour l’info j’ai déjà entendu parler du problème de millis() a 50j

;)
  • Partager sur Facebook
  • Partager sur Twitter
5 juin 2019 à 22:02:05

Bonjour, j'aimerai faire tourner un moteur pas à pas et en même temps faire changer de couleur une led RVB.... C'est possible ?

PS : Je sais faire les 2 séparément mais en même temps non, car ils n'ont pas dû-tout le même delay...

  • Partager sur Facebook
  • Partager sur Twitter
5 juin 2019 à 22:50:09

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter