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