/* attiny animation 4 sorties
    utilisation de 2 tableaux
    changement de l'état des sorties et tempo aléatoires
    22/10/2021
    Dominique Hudry
    ATtiny85
    Test: ok

             Brochage Attiny85
                =|1  U  8|= VCC
      sortie3 3 =|2     7|= 2 sortie2
      random A2 =|3     6|= 1 sortie1
            GND =|4     5|= 0 sortie0
*/

const byte ButeeMini   = 7;    // valeur mini de la temporisation aléatoire
const byte ButeeMaxi   = 24;   // valeur maxi +1 de la temporisation aléatoire
//const byte ButeeMini   = 13;   // valeur mini de la temporisation aléatoire
//const byte ButeeMaxi   = 48;   // valeur maxi +1 de la temporisation aléatoire
const byte NbreSorties = 4;
const byte Sortie[] = {0, 1, 2, 3}; // broches en sortie
bool etatSortie[] = {1, 1, 1, 1};   // état des sorties, au démarrage tout est allumé
unsigned long tempsActuel;
byte bitAleatoire;             // bit choisi aléatoirement bit0 bit1 bit2 bit3
int tempo;                     // temporisation aléatoire entre deux états

#include "TinyDebug.h"

void setup() {
  Debug.begin();
  Debug.println(F("Animations 4 sorties"));
  for (byte i = 0; i < NbreSorties; i++) { // les broches reliées aux leds sont mises en sorties
    pinMode(Sortie[i], OUTPUT);
  } // fin boucle for 
  tempo = 5000; // au démarrage toutes les sorties sont à 1 durant 5s pour test
  randomSeed(analogRead(A2));
   tempsActuel = millis();
} // fin setup

void loop() {
  for (byte j = 0; j < NbreSorties; j++) { // met chaque sortie à son niveau respectif
    digitalWrite(Sortie[j], etatSortie[j]);
  } // fin boucle for
  if (millis() > tempsActuel + tempo) {
    tempsActuel = millis();
    tempo = random(ButeeMini, ButeeMaxi); // génération de la temporisation aléatoire
    Debug.print(F("temporisation en s = "));
    Debug.println(tempo);
    tempo = tempo * 1000;
    bitAleatoire = random(0, NbreSorties); // génère le numéro du bit qui changera l'état de la sortie liée
    Debug.print(F("bit nmr = "));
    Debug.println(bitAleatoire);
    etatSortie[bitAleatoire] = !etatSortie[bitAleatoire]; // inversion de l'état de la sortie correspondant au nombre aléatoire
    Debug.println((F("  ")));
  } // fin test if
} // fin loop
ATTINY8520PU