/*
***********************************************
* Simulation Soudure à l'arc *
* version 20230626 *
* ATtiny 85 *
***********************************************
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Ce code est distribué gratuitement sous licence !
! Creativ Commons CC-BY-NC-ND 3.0 !
! !
! Cette licence permet à d'autres utilisateurs d'utiliser ce code !
! à des fins non commerciales. !
! Code original sur Locoduino modifié par Philippe GUENET ! !
! Animation visible ici https://wgnt-train.fr/article.php?sid=241 ! !
! auteur Philippe GUENET - [email protected] - https://wgnt-train.fr !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
*/
/*
Déroulement :
Au démarrage la simulation commence pendant une minute.
Elle s'execute ensuite toutes les 5 minutes pendant 1 minute
Plusieurs bibliothèques ont été testées pour simuler le grésillement.
Ce serait sans doute mieux avec une carte son mais c'est suffisant ainsi.
Le montage final a été fait avec un ATtiny 88 MH&Live et la bibliothèque
TimerFreeTone.h
*/
// Ain0 (D 5) PB5 1| |8 Vcc
// Ain3 (D 3) PB3 2| |7 PB2 (D 2) Ain1
// Ain2 (D 4) PB4 3| |6 PB1 (D 1) pwm1
// GND 4| |5 PB0 (D 0) pwm0
//
//#include <TimerFreeTone.h>
//#include <SoftwareSerial.h>
//SoftwareSerial Serial(7, 4);
const int pinSon = PB0;
const int pinLedsEtincelles = PB2 ;
const int pinLedTemoin = PB4;
const int Duree_etincelles_mini = 10;
const int Duree_etincelles_maxi = 100;
const int Duree_repos_mini = 10;
const int Duree_repos_maxi = 60; //51;
const int Nb_event_mini = 10;
const int Nb_event_maxi = 30;
const unsigned long P_repos_mini = 1000; //1500;
const unsigned long P_repos_maxi = 5000; //7001;
const unsigned long intervalAction = 300000;
const unsigned long dureeAction = 60000;
unsigned long departChrono;
unsigned long departAction;
unsigned long precedentClignoteMillis;
bool etatLedTemoin = false;
void setup() {
randomSeed(analogRead(0));
pinMode(pinLedTemoin, OUTPUT);
pinMode(pinLedsEtincelles, OUTPUT);
pinMode(pinSon, OUTPUT);
departChrono = millis() + intervalAction;
} // Fin de setup
void loop() {
enFonction();
if ((millis() - departChrono) >= intervalAction){
departChrono = millis();
soudure();
} // Fin de if ((millis() - departChrono) >= intervalAction)
} // Fin de loop
void soudure() {
departAction = millis();
while ((millis() - departAction) < dureeAction) {
int Nb_event = random(Nb_event_mini, Nb_event_maxi);
for (int i = 1; i <= Nb_event; i++) {
enFonction();
int Duree_etincelles = random(Duree_etincelles_mini, Duree_etincelles_maxi);
int Duree_repos = random(Duree_repos_mini, Duree_repos_maxi);
digitalWrite(pinLedsEtincelles, HIGH);
//digitalWrite(pinSon, HIGH);
//TimerFreeTone(pinSon, 40, Duree_flash,10);
tone(pinSon, 30, Duree_etincelles);
unsigned long startMillisEtincelles= millis();
while (millis() - startMillisEtincelles < Duree_etincelles) {
enFonction();
}
digitalWrite(pinLedsEtincelles, LOW);
//digitalWrite(pinSon, LOW);
unsigned long startMillisRepos = millis();
while (millis() - startMillisRepos < Duree_repos) {
enFonction();
}
} // Fin de for (int i = 1 ; i <= Nbre_even ; i++)
int P_repos = random(P_repos_mini, P_repos_maxi);
unsigned long startMillisRepos = millis();
while (millis() - startMillisRepos < P_repos) {
enFonction();
}
} // Fin de while ((millis() - departAction) < dureeAction)
} // Fin de procédure soudure()
void enFonction (){
/* procédure pour faire clignoter la led témoin de fonctionnement */
unsigned long clignoteMillis = millis();
if (clignoteMillis - precedentClignoteMillis > 500) {
precedentClignoteMillis = clignoteMillis;
etatLedTemoin =! etatLedTemoin;
digitalWrite(pinLedTemoin, etatLedTemoin);
} // Fin de if (clignoteMillis - precedentClignoteMillis > 500)
} // Fin de procédure enFonction()