/*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