/*attiny chant oiseaux
   11/11/2022
   Dominique Hudry
   lien: https://wokwi.com/projects/414272311990345729
   Commande aléatoire d'un genérateur de chants d'oiseau
   - une sortie parmis quatre passe à l'état HIGH pdt un temps puis repasse à LOW
   - le nombre de répétition du même chant est aélatoire
   - temps entre deux chants différents est aléatoire
   
   test: ok

            Brochage ATtiny85
              =|1  U  8|= VCC
  Chant3 <--3 =|2     7|= 2--> Chant2
 random -->A2 =|3     6|= 1--> Chant1
          GND =|4     5|= 0--> Chant0
*/

const byte ButeeMini  = 4; // valeur mini de la temporisation aléatoire
const byte ButeeMaxi  = 25; // valeur maxi +1 de la temporisation aléatoire
const byte Chant[] = {0, 1, 2, 3}; // numéro des pins en sortie
byte i;

void setup() {
  for (i = 0; i < 4; i++) { // les pins sont mises en sorties au niveau 0
    pinMode(Chant[i], OUTPUT);
    digitalWrite(Chant[i], LOW);
  } // fin boucle for
  randomSeed(analogRead(A2));
  delay(1000);
} // fin setup

void loop() {
  byte selectionAleatoire = random(0, 4); // génère le numéro du Chant (0 à 3) qui positionnera l'état de la sortie liée
  byte repetitionAleatoire = random(1, 4); // génère le nombre de fois que le même chant sera joué
  for (i = 1; i < repetitionAleatoire + 1; i++) { // nombre aléatoire d'impulsions
    digitalWrite(Chant[selectionAleatoire], HIGH);
    delay(50); // ne pas descendre en dessous de 50
    digitalWrite(Chant[selectionAleatoire], LOW);
    delay(6000); // durée d'un chant 
  } // fin for
  unsigned int tempoAleatoire = random(ButeeMini, ButeeMaxi); // génération de la temporisation aléatoire entre deux chants différents
  tempoAleatoire = tempoAleatoire * 1000;
  delay(tempoAleatoire); // délai avant la prochaine étape
} // fin loop
ATTINY8520PU