voilier connecté

Bonjour à tous.

J'ai utilisé ce site pour obtenir des informations bien utiles et je vous en remercie.
Je pense avoir fini mon projet: domotique d'un voilier (batotique?)

voici le programme pour arduino méga.
Double objectif:

  • telecommande à distance pour le pilote automatique.
  • telecommande pour les circuits permanents.

Le tout via un smartphone (appli appinventor)
Il fonctionne.

/*

  • Arduino mega
  • commandes pour un tableau electrique d'un bateau.
  • fermeture ou ouverture des circuits via un smartphone.
  • les relais 1 à 6 sont dédiés au pilote auto. Ils fonctionnent comme des boutons poussoirs (pilote ST4000)
  • Les relais 7 à 23 commandent les circuits permanents.
  • relais1 = 26;//STANDBY
    relais2 = 27;//AUTO
    relais3 = 28;//-10
    relais4 = 29;//+10
    relais5 = 30;//-1
    relais6 = 31;//+1

relais7 = 32;//auxi1
relais8 = 33;//auxi2
relais9 = 34;//instruments
relais10 = 35;//pilote
relais11 = 36;//navtex
relais12 = 37;//eclairage
relais13 = 38;//frigo
relais14 = 39;//grpe eau
relais15 = 40;//prises exterieur
relais16 = 41;//feux nav
relais17 = 42;//feu hune
relais18 = 43;//feu mouillage
relais19 = 44;//ecl pont
relais20 = 45;//pompe douches
relais21 = 46;//pompe cale
relais22 = 47;//prises 12V
relais23 = 48;//tv
*/
int mem[17];// memoire des relais 7 à 23
int pos = 0;// variable de position dans tableau des memoires : pos1 = memoire relais8 = mem[pos]
int broche = 0;// definit la broche de sortie (serialA + 25)
int serialA; // variable de reception de donnée via RX

void setup()
{

Serial1.begin(9600); // initialisation de la connexion série (avec le module bluetooth hc06)

for (int i = 26 ; i < 49; i++) //on utilise les sorties 26 à 48
{ digitalWrite(i, HIGH);// les relais optocoupleurs sont "active low"
}
for (int j =26 ; j < 49; j++)
{ pinMode(j, OUTPUT);// broches de sortie
}
for (int k = 0; k < 17 ; k++)// mise des memoires à 0 pour les relais 7 à 23
{mem[k] = 0;
}

}

void loop() {
while (Serial1.available() == 0);
serialA = Serial1.read(); // stocker la valeur reçue dans la variable SerialA
pos = serialA - 1; // position dans le tableau (utile à partir de case 7)
broche = serialA + 25; // calcul broche de sortie
switch (serialA)
{
case 1: // si arduino reçois le chiffre 1 à 6
case 2:
case 3:
case 4:
case 5:
case 6:
digitalWrite(broche, LOW); // ferme le relais
delay (500);
digitalWrite(broche, HIGH);// fin d'impulsion et ouverture du relais
break;

case 7: // si arduino reçois le chiffre 7 à 23"
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 21:
case 22:
case 23:
if (mem[pos] == 0){
digitalWrite(broche, LOW);// ferme le relais
mem[pos]=1;//memoire relais ON
}
else {
digitalWrite(broche, HIGH);// ouvre le relais
mem[pos] = 0;//memoire relais OFF
break;
}

}
}

Si on peut faire mieux je suis preneur.
Je suis "arduiniste autodidacte depuis 2 mois"

Encore un grand merci pour vos conseils.

GG