Plusieurs tâches differentes en même temps

Bonjour,

Je précise d'abord que je suis un débutant en arduino, la plupart du temps je me débrouille avec des codes que je trouve ici et là et que je modifie à ma sauce ::slight_smile:

Mon petit projet et que j'aimerai me refaire un simple générateur à argent colloïdal. C'est tout simplement une électrolyse avec de l'argent pure, qui sert à traiter les bobo du quotidiens, plaie, brulure, aphte, eczéma, on peut aussi le prendre en ingestion ou autre. Je vous conseils vivement de faire des recherches pour vous faire votre propre opinion.

J'avais déjà fait une première version à l'aide de Ne555, transistor, etc qui fonctionner bien mais limiter. Et donc je souhaite le refaire à l'aide d'un digispark ou arduino, que ce soit plus pratique pour changer le code et rajouter pourquoi pas d'autre fonction intéressante par la suite. Et aussi en grande parti pour le défi :stuck_out_tongue: .

Donc l'idée général est qu'on fait baigner deux électrode dans de l'eau distiller, on vient alimenter ces deux électrodes en alternance avec une tension de +-40v et avec un courant constant, 10ma par exemple. Ceci avec un mélangeur magnétique.

Dans un premier temps j'ai essayer un code pour faire alterner une led entre un état low et high sur une sortie , pas de soucis ça fonctionne.
J'ai essayer un code pour faire varier une autre led sur une autre sortie en Pwm commander via un potentiomètre, de même pas de soucis.

Par contre là où je rencontre une difficulté, est que lorsque je veux faire fonctionner ces deux taches toutes deux sur une sortie différente, la première fonctionne comme souhaiter, par contre la deuxième la commande via le potentiomètre est pris en compte uniquement lorsque l'état de la première led change, bref inutile de vous dire que c'est pas très pratique, j'aimerai avoir un contrôle de celle ci en temps réel.

J'ai modifier mon code en n'utilisant pas (delay), cela ne change rien.

Mon code :

int pot_value = 0;
int ledPin2 = 1;
int sensorPin = A3;
const int ledPin =  0;      // the number of the LED pin

// Variables will change :
int ledState = LOW;             // ledState used to set the LED

// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change :
const long period = 5000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(sensorPin, INPUT);
}

void loop() {
  
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= period) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    {
    pot_value = analogRead(sensorPin);
    pot_value = map(pot_value, 0, 1023, 0, 255);
    analogWrite(ledPin2, pot_value);
}

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Si quelqu'un pourrez m'aider à trouver une solution ou m'aiguiller, ce serait génial, merci.

maker33:
C'est tout simplement une électrolyse avec de l'argent pure, qui sert à traiter les bobo du quotidiens, plaie, brulure, aphte, eczéma, on peut aussi le prendre en ingestion ou autre.

Il est interdit à la vente en France pour une utilisation par voie interne si je me souviens bien...

votre bout de code

    {
      pot_value = analogRead(sensorPin);
      pot_value = map(pot_value, 0, 1023, 0, 255);
      analogWrite(ledPin2, pot_value);
    }

est imbriqué dans la partie qui gère l'alternance (blink without delay). faut le sortir de là si vous voulez que ce soit fait à chaque boucle

void loop() {

  unsigned long currentMillis = millis();

  // CODE ACTIF UNIQUEMENT TOUTES LES 'period' ms
  if (currentMillis - previousMillis >= period) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }

  // CODE ACTIF A CHAQUE LOOP
  pot_value = analogRead(sensorPin);
  pot_value = map(pot_value, 0, 1023, 0, 255);
  analogWrite(ledPin2, pot_value);
}

Vous pouvez lire les tutos d'eskimon et le chapitre Introduire le temps

Votre besoin est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)

Parfait, j'ai mis la fonction qui me poser problème en fin de code et cela fonctionne comme je souhaite, merci de votre conseil.