#include <Servo.h>
Servo Batterie;
Servo Sang;
Servo Cerveau;
Servo TicTac; //Battements du coeur.
int charge=0; //Charge de la batterie = nombre de passage devant LDR.
int detect=0;
int pos=0;
int SangVal=5;
int CerveauVal=5;
int tictack=6;
int A=65; //balancement de l'aiguille TicTac entre A et B.
int B=115;
int const Ldr=2; //Photo-résistance.
int const Buzzer=6;
int const Switch=8; //Interrupteur d'électrocution.
int const Relai=10; //Relai moteur essui-glace.
int const Reset=3; //Repositionement du squelette par Bp.
int const BpBatAuto=5; //Bp pour charger ou décharger la batterie.
int ResetPos; //Repositionnement par Relai.
int BatAutoPos; //Recharge batterie par Bp.
bool chargeMax=false; //arrêter l'aiguille à 120.
bool tictak=true; //pour l'alternance.
bool batAuto=false; //pour charger ou décharger la batterie en automatique.
void setup() {
Batterie.attach(4);
Batterie.write(5); //pas zéro pour éviter les à-coups.
Sang.attach(12);
Sang.write(SangVal);
Cerveau.attach(A0);
Cerveau.write(CerveauVal);
TicTac.attach(A2);
TicTac.write(A);
Serial.begin(9600);
pinMode(Buzzer, OUTPUT);
pinMode(Ldr, INPUT);
pinMode(Switch, INPUT_PULLUP);
pinMode(Relai, OUTPUT);
digitalWrite(Relai, LOW);
pinMode(4, OUTPUT);
pinMode(12, OUTPUT);
pinMode(A0, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(Reset, INPUT_PULLUP);
pinMode(BpBatAuto, INPUT_PULLUP);
}
void loop() {
ONE:
ResetPos=digitalRead(Reset); //Repositionnement.
if(ResetPos==LOW){digitalWrite(Relai, HIGH);}
else{digitalWrite(Relai,LOW);}
Serial.println(ResetPos);
BatAutoPos=digitalRead(BpBatAuto); //chargement automatique de la batterie.
if(BatAutoPos==LOW){chargeAuto();}
Serial.println(BatAutoPos);
Serial.println(batAuto);
detect=digitalRead(Ldr);
if(detect==0){++charge;}
Serial.print("Charge= ");
Serial.println(charge);
delay(200);
if(chargeMax==false && batAuto==false){Batterie.write(charge);}
if(charge>=110){chargeMax=true;tone(Buzzer,100,1000);delay(1010);goto TWO;}
goto ONE;
TWO:
while(digitalRead(Switch)==HIGH){} //à la fermeture du Switch on électrocute.
tone(Buzzer,200,1000);
for(pos=SangVal; pos<=100; pos+=2) //les aiguilles augmentent.
{Sang.write(pos);delay(50);
CerveauVal+=3;Cerveau.write(CerveauVal);}
SangVal=pos;
digitalWrite(Relai, HIGH); //actionne le moteur du lève-vitre.
tictac(); //la duré est définie par tictac().
//delay(2000); //duré des mouvements du squelette.
aiguille();
digitalWrite(Relai, LOW); //fin des mouvements du squelette.
delay(30000); //temporisation pour les essais sur Wokwi.
}
void aiguille() { //faire redescendre les aiguilles.
for(pos=charge; pos>=5; pos-=3)
{Batterie.write(pos);delay(50); //Charge
SangVal-=2;Sang.write(SangVal); //Sang
CerveauVal-=3;Cerveau.write(CerveauVal);} //Cerveau
SangVal=5;
Sang.write(SangVal);
CerveauVal=5;
Cerveau.write(CerveauVal);
charge=0;
chargeMax=false;
}
void tictac(){ //Battements du coeur.
DIX:
TicTac.write(A);
delay(1000);
TicTac.write(B);
delay(1000);
tictack-=1;
if(tictack>0){goto DIX;}
TicTac.write(A);
tictack=6;
}
void chargeAuto(){
if(batAuto==false)
{for(pos=charge; pos<=175; pos+=2)
{Batterie.write(pos); delay(50);}batAuto=true;delay(1500);}
else{for(pos=175; pos>=charge; pos-=2) {Batterie.write(pos); delay(50);}
batAuto=false; delay(1500);}
/*if(batAuto==false)
{Batterie.write(175);
batAuto=true;delay(1500);} //delay sinon battement de la charge.
else{Batterie.write(5);batAuto=false;delay(1500);}*/
}