/* Simulateur de soudure à l'arc - 2 postes 
  auteur: Philippe Blondé
  03/02/2025
  lien: https://forum.espacetrain.com/index.php?topic=5103.msg52313#new
  MODULE SOUDURE A L'ARC ; MAJ 2025-01-26 - Version 1
  Chargement à 8 MHz - Pour le chargement ne pas oublier : Programmateur = "Arduino as ISP"

  FONCTIONNEMENT
  Suite de séries de Flashes dont l'intensité, le nombre et la durée sont aléatoires.
  Entre deux séries : extinction d'une durée aléatoire comprise entre 0 et 4 s.

  La valeur des bornes mini/maxi des différentes "random" est directement écrite dans le code.
  On peut aussi déclarer ces bornes mini/maxi dans "DECLARATION DES VARIABLES"

  REPERAGE DES BROCHES D'UN ATtiny45 OU 85 :
  Broche 1 : Reset       Broche 8 : 5V
  Broche 2 : A3 ou 3     Broche 7 : A1 ou 2
  Broche 3 : A2 ou 4     Broche 6 : 1 (PWM)
  Broche 4 : GND         Broche 5 ; 0 (PWM)
*/
// DECLARATION DES VARIABLES
const int Flash_1 = 0; // Broche 5 (PWM)
byte Intensite_Flash_1;
byte Duree_Flash_1;
byte Temps_Extinction_Entre_Deux_Flashes_1;
byte Nombre_De_Flashes_1_A_Faire;

const int Flash_2 = 1; // Broche 6 (PWM)
byte Intensite_Flash_2;
byte Duree_Flash_2;
byte Temps_Extinction_Entre_Deux_Flashes_2;
byte Nombre_De_Flashes_2_A_Faire;

byte Temps_Entre_Deux_Series_De_Flashes;
byte Nombre_De_Boucles;

void setup ()
{
  pinMode (Flash_1, OUTPUT);
  pinMode (Flash_2, OUTPUT);
}

void loop ()
{
  Temps_Entre_Deux_Series_De_Flashes = random (0, 4); // Entre 0 et 4 s

// ANIMATION 1 - POSTE_SOUDURE_1

// PREMIERE SERIE DU POSTE_SOUDURE_1
  Nombre_De_Flashes_1_A_Faire = random (10, 20);
  Intensite_Flash_1 = random (140, 255);
  Duree_Flash_1 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_1 = random (10, 50);
 
  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_1, Intensite_Flash_1);
      delay (Duree_Flash_1);
      analogWrite (Flash_1, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_1);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_1_A_Faire);
  analogWrite (Flash_1, 0);
  delay (1000);

// DEUXIEME SERIE DU POSTE_SOUDURE_1
  Nombre_De_Flashes_1_A_Faire = random (10, 20);
  Intensite_Flash_1 = random (140, 255);
  Duree_Flash_1 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_1 = random (10, 50);
 
  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_1, Intensite_Flash_1);
      delay (Duree_Flash_1);
      analogWrite (Flash_1, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_1);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_1_A_Faire);
  analogWrite (Flash_1, 0);


// DELAIS ENTRE ANIMATION 1 ET ANIMATION 2
  Nombre_De_Boucles = 0;
  do
    { 
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes); 


// ANIMATION 2 - POSTE_SOUDURE_2

// PREMIERE SERIE DU POSTE_SOUDURE_2
  Nombre_De_Flashes_2_A_Faire = random (20, 45);
  Intensite_Flash_2 = random (140, 255);
  Duree_Flash_2 = random (10, 70);
  Temps_Extinction_Entre_Deux_Flashes_2 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_2, Intensite_Flash_2);
      delay (Duree_Flash_2);
      analogWrite (Flash_2, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_2);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_2_A_Faire);
  analogWrite (Flash_2, 0);
  delay (1000);

// DEUXIEME SERIE DU POSTE_SOUDURE_2
  Nombre_De_Flashes_2_A_Faire = random (20, 45);
  Intensite_Flash_2 = random (140, 255);
  Duree_Flash_2 = random (10, 70);
  Temps_Extinction_Entre_Deux_Flashes_2 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_2, Intensite_Flash_2);
      delay (Duree_Flash_2);
      analogWrite (Flash_2, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_2);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_2_A_Faire);
  analogWrite (Flash_2, 0);


// DELAIS ENTRE ANIMATION 2 ET ANIMATION 3
  Nombre_De_Boucles = 0;
  do
    {
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes);


// ANIMATION 3 - POSTE_SOUDURE_1
  Nombre_De_Flashes_1_A_Faire = random (5, 30);
  Intensite_Flash_1 = random (140, 255);
  Duree_Flash_1 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_1 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_1, Intensite_Flash_1);
      delay (Duree_Flash_1);
      analogWrite (Flash_1, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_1);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_1_A_Faire);
  analogWrite (Flash_1, 0);


// DELAIS ENTRE ANIMATION 3 ET ANIMATION 4
  Nombre_De_Boucles = 0;
  do
    {
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes); 


// ANIMATION 4 - POSTE_SOUDURE_2
  Nombre_De_Flashes_2_A_Faire = random (10, 60);
  Intensite_Flash_2 = random (140, 255);
  Duree_Flash_2 = random (10, 80);
  Temps_Extinction_Entre_Deux_Flashes_2 = random (10, 50);

  Nombre_De_Boucles = 0;
  do
    {
      analogWrite (Flash_2, Intensite_Flash_2);
      delay (Duree_Flash_2);
      analogWrite (Flash_2, 0);
      delay (Temps_Extinction_Entre_Deux_Flashes_2);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Nombre_De_Flashes_2_A_Faire);
  analogWrite (Flash_2, 0);


// DELAIS ENTRE ANIMATION 4 ET ANIMATION 1
  Nombre_De_Boucles = 0;
  do
    {
      delay (1000);
      Nombre_De_Boucles = (Nombre_De_Boucles + 1);
    }
  while (Nombre_De_Boucles <= Temps_Entre_Deux_Series_De_Flashes); 
}

ATTINY8520PU
tiny:PB5
tiny:PB3
tiny:PB4
tiny:GND
tiny:PB0
tiny:PB1
tiny:PB2
tiny:VCC
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2