void setup() {
// put your setup code here, to run once:
}
void loop() {
float SurProdMini = 0 ;
float Tmax_Ceau = 338 ;
float Charge_haut = 75 ;
float Charge_bas = 30 ; // charge en pourcentage ( valeur a vérifier avec le ce que renvoie la flow sensor)
int mode = 2 ;
int nuit = 0 ;
int flag ;
int pwm ;
int P_batt ;
int P_batt_d = 0 ;
float Mesure_courant_ENR=analogRead(A0);
float Mesure_courant_conso=analogRead(A1);
float Mesure_charge_Batterie=analogRead(A2);
float Mesure_temperature_eau=analogRead(A3);
float P_SurProd = abs(Mesure_courant_ENR) - abs(Mesure_courant_conso);
switch (mode) {
// mode 1 : quotidient ( batterie en convention génerateur que la nuit)
case 1 :
if (P_SurProd > SurProdMini){ // si on a une surproduction
P_batt_d=0;
if (Mesure_charge_Batterie < 90) { //On atteint jamais les 100% de charge
P_batt=1;
pwm=0;
}
else{
P_batt=0;
if ( Mesure_temperature_eau < Tmax_Ceau ){
pwm = 1 ;
}
else{
pwm = 0 ;
}
}
}
else{
pwm = 0 ;
P_batt = 0 ;
if (P_SurProd < 0) { // si il n'y a pas de surprod
if ((Mesure_charge_Batterie > Charge_haut) and (nuit==1)){ // la batterie est chargé
flag =1;
}
if (Mesure_charge_Batterie < Charge_bas){ // la batterie n'est pas assez chargé
flag =0;
P_batt_d = 0;
}
if ( nuit ==0 ){
flag = 0 ;
P_batt_d = 0;
}
if (flag ==1) {
P_batt_d = -1; // la batterie renvoie de l'energie pour subvenir au besoin des appareil de conso prio
}
else {
P_batt_d = 0 ;
}
}
else {
P_batt = 0; // on ne fait rien
pwm=0;
P_batt_d = 0;
}
}
break;
// mode 2 : on ne décharge pas la batterie
case 2 :
P_batt_d=0;
if (P_SurProd > SurProdMini){ // si on a une surproduction
if (Mesure_charge_Batterie < 90){ //On atteint jamais les 100% de charge
P_batt=1;
pwm=0;
}
else{
P_batt=0;
if ( Mesure_temperature_eau < Tmax_Ceau ){
pwm = 1 ;
}
else{
pwm = 0 ;
}
}
}
else{
pwm=0;
P_batt=0;
}
break ;
// mode 3 : on décharge des qu'on est en sous production
case 3 :
if (P_SurProd > SurProdMini){ // si on a une surproduction
P_batt_d=0;
if (Mesure_charge_Batterie < 90) { //On atteint jamais les 100% de charge
P_batt=1;
pwm=0;
}
else{
P_batt=0;
if ( Mesure_temperature_eau < Tmax_Ceau ){
pwm = 1 ;
}
else{
pwm = 0 ;
}
}
}
else{
pwm=0;
P_batt=0;
if (P_SurProd < 0) { // si il n'y a pas de surprod
if (Mesure_charge_Batterie > Charge_haut){ // la batterie est chargé
flag =1;
}
if (Mesure_charge_Batterie < Charge_bas){ // la batterie n'est pas assez chargé
flag =0;
P_batt_d = 0; // on ne fait rien
}
if (flag ==1) {
P_batt_d = -1; // la batterie renvoie de l'energie pour subvenir au besoin des appareil de conso prio
}
else {
P_batt_d = 0 ;
}
}
else {
P_batt = 0; // on ne fait rien
P_batt = 0;
pwm=0;
}
}
break ;
// mode 4 : absent
case 4 :
P_batt = 0 ;
pwm = 0 ;
P_batt_d=0;
break;
// mode 5 : profiter des heures creuses la nuit et utiliser la batterie de jour puisque heure pleine
case 5 :
if (P_SurProd > SurProdMini) { // si on a une surproduction
P_batt_d=0;
if (Mesure_charge_Batterie < 90) { //On atteint jamais les 100% de charge
P_batt=1;
pwm=0;
}
else{
P_batt=0;
if ( Mesure_temperature_eau < Tmax_Ceau ) {
pwm = 1 ;
}
else{
pwm = 0 ;
}
}
}
else{
pwm=0;
P_batt=0;
if (P_SurProd < 0) { // si il n'y a pas de surprod
pwm=0;
P_batt = 0;
if ((Mesure_charge_Batterie > Charge_haut) and (nuit==0)){ // la batterie est chargé
flag =1;
}
if (Mesure_charge_Batterie < Charge_bas){ // la batterie n'est pas assez chargé
flag =0;
P_batt_d = 0; // on ne fait rien
}
if ( nuit ==1 ) {
flag = 0 ;
P_batt_d = 0;
}
if (flag ==1){
P_batt_d = -1; // la batterie renvoie de l'energie pour subvenir au besoin des appareil de conso prio
}
else {
P_batt_d = 0 ;
}
}
else {
P_batt = 0; // on ne fait rien
pwm=0;
P_batt_d=0;
}
}
break ;
default :
if (P_SurProd > SurProdMini){ // si on a une surproduction
P_batt_d=0;
if (Mesure_charge_Batterie < 90) { //On atteint jamais les 100% de charge
P_batt=1;
pwm=0;
}
else{
P_batt=0;
if ( Mesure_temperature_eau < Tmax_Ceau ){
pwm = 1 ;
}
else{
pwm = 0 ;
}
}
}
else{
pwm = 0 ;
P_batt = 0 ;
if (P_SurProd < 0) { // si il n'y a pas de surprod
if ((Mesure_charge_Batterie > Charge_haut) and (nuit==1)){ // la batterie est chargé
flag =1;
}
if (Mesure_charge_Batterie < Charge_bas){ // la batterie n'est pas assez chargé
flag =0;
P_batt_d = 0;
}
if ( nuit ==0 ){
flag = 0 ;
P_batt_d = 0;
}
if (flag ==1) {
P_batt_d = -1; // la batterie renvoie de l'energie pour subvenir au besoin des appareil de conso prio
}
else {
P_batt_d = 0 ;
}
}
else {
P_batt = 0; // on ne fait rien
pwm=0;
P_batt_d = 0;
}
}
break;
}
float sortie_interupt_eau = 13 ;
float sortie_interupt_bat_charge = 12 ;
float sortie_interupt_bat_decharge = 8 ;
analogWrite(sortie_interupt_eau, pwm);
analogWrite(sortie_interupt_bat_charge, P_batt);
analogWrite(sortie_interupt_bat_decharge, P_batt_d);
}