Gestion Neon-Led Aquarium par Bluetooth

Voilà je vous montre un p'tit projet que je viens de terminer.
ceci es la version 3 du projet ... lol

Version 1 : arduino uno + afficheur 2*20 + bouton pour reglage
Version 2 : arduino uno + lecteur carte SD + logiciel pc pour reglage de la carte SD
Version 3 : arduino standalone + module Bluetooth + logiciel pc pour reglage via bluetooth

But du projet : piloter 4 sortie pwm pour Neon-led de l'aquarium avec un reglage toute les 30min

pour réduire les coûts je suis passer sur un standalone (photo 4)
je passe par des ips521 pour piloter les neon.
horloge standart DS1307
Bluetooth Linvor

pour le reglage logiciel créer en java
un mode test pour tester chaque rampe et faire des mixage de lumiere (les neon sont de couleur differente) (photo 1)
reglage des niveaux de lumiere de chaque sortie (photo 2)
reglage de l'horloge (photo 3)

4.jpg

c est un beau projet rudement mené mais pourrais tu nous faire partager ton code ?

hmm je sais pas.. un peut honte.. :p.. c'est pas du code de premiere.. ^^

bon .. je le met quand même.. lol.. honte a moi .. :stuck_out_tongue:

/******************************* Programme Arduino ******************************/
/***************************** par Teal'couné - 2011 ****************************/
/********************************** Version 3.0 *********************************/

/**************************** Que fait ce programme ? ***************************/
/* Gestion d'allumage 4 ranger de luminaire d'aquarium
   reglage d'instensité de lumiere toute les 30min avec variation entre 
   chaque changement */
   
/********************** Inclusion des librairies utilisées **********************/
#include <Wire.h> 
#include <DS1307new.h>
#include <EEPROM.h>

/************************** Déclaration des constantes **************************/
const int LED1=6;
const int LED2=9;
const int LED3=10;
const int LED4=11;

const int debRampe[4] = {0, 48, 96, 144};

/************************** Déclaration des variables ***************************/
/* tableau de lumiere */
int rampe1[24][2];
int rampe2[24][2];
int rampe3[24][2];
int rampe4[24][2];

/* variable entrer mode test */
boolean test = false;
int testR1 = 0;
int testR2 = 0;
int testR3 = 0;
int testR4 = 0;

/* variable de reception */
/*
  data de la fonction test
  data[0]     = 0
  data[1]     = 0 off - 1 on
  data[2-4]   = rampe 1 exemple : 050 = 50%
  data[5-7]   = rampe 2
  data[8-10]  = rampe 3
  data[11-13] = rampe 4
*/
/*
  data pour les rampe
  data[0]     = 1
  data[1]     = 0 get - 1 set
  data[2]     = 0 : rampe1 - 1 : rampe 2 - 2 : rampe 3 - 3 : rampe 4
  data[3-5]   = valeur pour 00h00
  data[6-8]   = valeur pour 00h30
  data[9-11]  = valeur pour 01h00
  data[12-14] = valeur pour 01h30
  etc..
*/
/*
  data pour set heure
  data[0]   = 2
  data[1]   = 0 get - 1 set
  data[2-3] = heure exemple 17
  data[4-5] = minute exemple 45
*/
int iData = 0;
boolean finTram = false;
int data[147];

/* Autre variable */
int oldMinute = 0;

/**************************** Programme  ****************************/
void setup(void) {
  Serial.begin(115200);
  pinMode(LED1, OUTPUT); //met la broche en entree 
  pinMode(LED2, OUTPUT); //met la broche en entree 
  pinMode(LED3, OUTPUT); //met la broche en entree 
  pinMode(LED4, OUTPUT); //met la broche en entree
  initRampe();
  RTC.getTime();
  oldMinute = RTC.minute;
  ligneRampe(1);
  ligneRampe(2);
  ligneRampe(3);
  ligneRampe(4);
}

void loop(void) {
  RTC.getTime();
  if(test == true) {
    int value = 0;
    value = ((255*testR1)/100);
    analogWrite(LED1, value);
    value = ((255*testR2)/100);
    analogWrite(LED2, value);
    value = ((255*testR3)/100);
    analogWrite(LED3, value);
    value = ((255*testR4)/100);
    analogWrite(LED4, value);
  } else {
    if(RTC.minute != oldMinute) {
      ligneRampe(1);
      ligneRampe(2);
      ligneRampe(3);
      ligneRampe(4);
      oldMinute = RTC.minute;
    }
  }
}

void ligneRampe(int nbRampe) {
  int h    = RTC.hour;
  int m    = RTC.minute;
  int val1 = 0;
  int val2 = 0;
  int baseMinute;
  int inter = 0;
  int sortie = 0;
  float valeur = 0;
  int value = 0;
  boolean sup = false;
  if(m < 30) {
    if(nbRampe == 1) {
      val1 = rampe1[h][0];
      val2 = rampe1[h][1];
    }
    if(nbRampe == 2) {
      val1 = rampe2[h][0];
      val2 = rampe2[h][1];
    }
    if(nbRampe == 3) {
      val1 = rampe3[h][0];
      val2 = rampe3[h][1];
    }
    if(nbRampe == 4) {
      val1 = rampe4[h][0];
      val2 = rampe4[h][1];
    }
    baseMinute = 0;
  } else if(m >=30) {
    if(nbRampe == 1) {
      val1 = rampe1[h][1];
      if(h==23) val2 = rampe1[0][0];
      else val2 = rampe1[h+1][0];
    }
    if(nbRampe == 2) {
      val1 = rampe2[h][1];
      if(h==23) val2 = rampe2[0][0];
      else val2 = rampe2[h+1][0];
    }
    if(nbRampe == 3) {
      val1 = rampe3[h][1];
      if(h==23) val2 = rampe3[0][0];
      else val2 = rampe3[h+1][0];
    }
    if(nbRampe == 4) {
      val1 = rampe4[h][1];
      if(h==23) val2 = rampe4[0][0];
      else val2 = rampe4[h+1][0];
    }
    baseMinute = 1;
  }
  if(val1 != val2) {
    if(val1 < val2) inter = val2 - val1;
    else if(val1 > val2) {
      inter = val1 - val2;
      sup = true;
    }
    valeur = float(inter)/float(30);
    int time = (baseMinute==0)?0:30;
    sortie = valeur * (m-time);
    int u = 0;
    if(nbRampe == 1) u = rampe1[h][baseMinute];
    if(nbRampe == 2) u = rampe2[h][baseMinute];
    if(nbRampe == 3) u = rampe3[h][baseMinute];
    if(nbRampe == 4) u = rampe4[h][baseMinute];
    if(sup) value = ((255*(u-sortie))/100);
    else value = ((255*(u+sortie))/100);
    if(nbRampe == 1) analogWrite(LED1, value);
    if(nbRampe == 2) analogWrite(LED2, value);
    if(nbRampe == 3) analogWrite(LED3, value);
    if(nbRampe == 4) analogWrite(LED4, value);
  } else {
    value = (255*val1)/100;
    if(nbRampe == 1) analogWrite(LED1, value);
    if(nbRampe == 2) analogWrite(LED2, value);
    if(nbRampe == 3) analogWrite(LED3, value);
    if(nbRampe == 4) analogWrite(LED4, value);
  }
}

void initRampe() {
  int u = 0;
  int i = 0;
  int y = 0;
  for(int b = 0; b <= 3; b++) {
    y = debRampe[b] + 48;
    for(int x = debRampe[b]; x <= y; x++) {
      if(b == 0) rampe1[i][u] = (EEPROM.read(x)  == 255) ? 0 : EEPROM.read(x);
      if(b == 1) rampe2[i][u] = (EEPROM.read(x)  == 255) ? 0 : EEPROM.read(x);
      if(b == 2) rampe3[i][u] = (EEPROM.read(x)  == 255) ? 0 : EEPROM.read(x);
      if(b == 3) rampe4[i][u] = (EEPROM.read(x)  == 255) ? 0 : EEPROM.read(x);
      if(u == 1) {
        u = 0;
        i++;
      }
      else u = 1;
    }
    u = 0;
    i = 0;
  }
}

void serialEvent() {
  while(Serial.available()) {
    char serialRead =  Serial.read();
    if(serialRead != '|') { 
      data[iData] = (int)serialRead-48;
      iData++;
    } else {
      finTram = true;
    }
  }
  if(finTram) {
    switch (data[0]) {
      case 0:
        teste();
        break;
      case 1:
        if(data[1] == 1) setRampe();
        if(data[1] == 0) getRampe(); 
        break;
      case 2:
        if(data[1] == 1) setHeure();
        if(data[1] == 0) getHeure(); 
        break;
    }
    iData=0;
    finTram = false;
  }
}

void teste() {
  if(data[1] == 1) {
    test = true;
    if(data[2] == 1) testR1 = 100;
    else testR1 = data[3]*10 + data[4];
    if(data[5] == 1) testR2 = 100;
    else testR2 = data[6]*10 + data[7];
    if(data[8] == 1) testR3 = 100;
    else testR3 = data[9]*10 + data[10];
    if(data[11] == 1) testR4 = 100;
    else testR4 = data[12]*10 + data[13];
  } else if(data[1] == 0) {
    ligneRampe(1);
    ligneRampe(2);
    ligneRampe(3);
    ligneRampe(4);
    test   = false;
  }
}

void setRampe() {
  int y;
  int h = 0;
  int m = 0;
  y = debRampe[data[2]];
  for(int i = 3; i <= 146; i++) {
    int val;
    if(data[i] == 1) val = 100;
    else val = data[i+1]*10 + data[i+2];
    i += 2;
    EEPROM.write(y, val);
    y++;
    if(data[2] == 0) {
      rampe1[h][m] = val;
    }
    if(data[2] == 1) rampe2[h][m] = val;
    if(data[2] == 2) rampe3[h][m] = val;
    if(data[2] == 3) rampe4[h][m] = val;
    if(m == 1) {
      m = 0;
      h++;
    } else m = 1;
  }
  ligneRampe(data[2]+1);
}

void getRampe() {
  int val;
  Serial.print("1");
  Serial.print(data[2]);
  for(int i = 0; i <= 23; i++) {
    if(data[2] == 1) val = rampe1[i][0];
    if(data[2] == 2) val = rampe2[i][0];
    if(data[2] == 3) val = rampe3[i][0];
    if(data[2] == 4) val = rampe4[i][0];
    if(val < 100) Serial.print("0");
    if(val < 10) Serial.print("0");
    Serial.print(val);
    if(data[2] == 1) val = rampe1[i][1];
    if(data[2] == 2) val = rampe2[i][1];
    if(data[2] == 3) val = rampe3[i][1];
    if(data[2] == 4) val = rampe4[i][1];
    if(val < 100) Serial.print("0");
    if(val < 10) Serial.print("0");
    Serial.print(val);
  }
  Serial.print("|");
}

void setHeure() {
  int h = (data[2]*10 + data[3]);
  int m = (data[4]*10 + data[5]);
  RTC.stopClock();
  RTC.fillByHMS(h,m,0);
  RTC.setTime();
  RTC.startClock();
  RTC.getTime();
}

void getHeure() {
  int minutes = RTC.minute;
  int heures  = RTC.hour;
  String mess = "0";
  if(heures < 10) mess += "0";
  mess += (String) heures;
  if(minutes < 10) mess += "0";
  mess += (String) minutes;
  mess += "|";
  Serial.print(mess);
}

Y a pas de honte à avoir et puis des fois d'autres te donnerons des astuces pour modifier intelligemment ton code. Merci du partage.

Youpi, la version Android du logiciel terminer.. :p.. il m'a embêter ce bluetooth Android ]:slight_smile: ]:slight_smile: