Go Down

Topic: Projet aquarium (un de plus) (Read 44160 times) previous topic - next topic

bricoleau

Et j'oubliais : comme l'arduino n'intervient qu'en second niveau pour le contrôle du chauffage, j'ai aussi ajouté un capteur de courant ACS712 près des relais.
Cela permet d'enregistrer les mises en route / arrêts du chauffage dans une log, et même de déterminer la puissance de chauffe engagée (l'arduino indique si le chauffage branché est un 50W, 100W, 200W ou 300W).
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

skywalker81

Bonjour , pour moi j'ai mis deux chauffage à thermostat intégrés a moitié puissance que celle recommandé..
comme ça si un se bloque enclenché , la t° monte pas trop et si un ne s'enclenche pas l'autre chauffe quand même... ça coute un peu plus cher ; mais comme je suis en récifal on prend plus de précautions

Jazznet

merci pour toutes ses info,

cela donne pas mal d'idée.

Pour le moment je me met tout sous le coude, et je vais simplement essayer de creer un noyaux fonctionnel,
aprés je ferait les fonctions avec les sugestions qui me paraisse s'adapter au mieux avec mes besoins (tres relatif puisque perso)...

mais c'est pas gagner, je sais que je commence avec un gros projet en connaissant peut de la prog sous arduino :/

Jazznet

Heloderma-kris

Bon je pense a voir compris la partie switch maintenant c'est la fonction de touch qui m'embête :/

Je vais potasser pour comprendre ce qui ne va pas

Heloderma-kris

quest ce qui te pose probléme ? e peut detailer si tu as besoin!

Jazznet

Je sais pas j'ai aucun retour sur mon code (enfin repris surtout sur le web, mais a lire cela parait plutot cohérent, mais vu mon niveau je but bêtement)

voici le code actuel, apres je pense que je suis vraiment a l'arrache et que je ne met pas les truc au bon emplacement...

dur dur de débuter  :-[
Code: [Select]
// JEFFDUINO 1.04
// 1.02 version avec menu venant de la SD
// 1.03 création des menus sans switch
// 1.04 création des menus avec switch non fonctionnel


#include <tinyFAT.h> // Librairie gestion SD
#include <UTFT.h> // Librairie gestion ecran TFT
#include <UTFT_tinyFAT.h> // Librairie gestion SD
#include <UTouch.h> // Librairie gestion touch
#include <Arduino.h>

// déclaration de la typo
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
UTFT         myGLCD(ITDB32S, 38, 39, 40, 41); 
UTouch      myTouch(6,5,4,3,2);
UTFT_tinyFAT myFiles(&myGLCD);
byte selecteurPage=0;
boolean affichage=false;

// fonction de detection des zone de clics
// on defini la fonction testTouche qui est definie en bolean donc elle renvoie une variable de type booleene donc soit faux : false soit vrai: true:
boolean TestTouche(int zoneX, int zoneY,int Longueur,int hauteur)
{
   int X, Y,testX,testY;
   
    boolean reponse=false;
    if (myTouch.dataAvailable())// dataAvailable() est une fonction de la lib Utouch.h
    {
        myTouch.read();// read() est une fonction de la lib Utouch.h
        X=myTouch.getX(), Y=myTouch.getY();// getX et getY() sont des fonction de la lib Utouch.h
        //---- vérifie si appui sur la touche "+" ---------
        testX=abs(X-(zoneX+Longueur/2)); // calcul valeur absolue de l'écart de X touchpad à ZoneX centre trouche
        testY=abs(Y-(zoneY+hauteur/2)); // calcul valeur absolue de l'écart de Y touchpad à ZoneY centre trouche

        if (testX<Longueur/2 && testY<hauteur/2)
         {reponse= true;}
        else
         {reponse=false;}
    }
    return reponse;
}


// debut programmation



void setup()
{
 
  myGLCD.InitLCD(LANDSCAPE);
  myGLCD.clrScr();
  file.initFAT();

  myTouch.InitTouch();
  myTouch.setPrecision(PREC_LOW);
  file.initFAT(SPISPEED_HIGH);
}

void loop()
{
 
    switch(selecteurPage){case 1:Home();break;
                          case 2:menu();break;
                          case 3:menu_ph();break;
                          case 4:menu_temp();break;
                          case 5:menu_lum();break;
                          case 6:menu_nour();break;
                          case 7:menu_reglage();break;
                          case 8:menu_reglage1();break;
                          case 9:menu_pompe();break;
                          default:Home();break;
                        }
}
 void Home()
 {
   switch(affichage){
     
     case 0:
     // logo demarrage
          myFiles.loadBitmap(100, 70, 123, 104, "AQUAPLAN.RAW");
  delay(2000);
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU0.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
//ici on teste l'apuis sur les bouton et on part sur le menu
 if (TestTouche(320, 240,0,0)){
 affichage=true;
 myGLCD.clrScr();
 selecteurPage =2;
 }
 
//on afiche les variable qui change en dynamique pour le moment cela restera en dur
  myGLCD.setColor(255,255,255);
  myGLCD.setBackColor(0,0,0);
  myGLCD.setFont(BigFont);
  myGLCD.print("12H01", 120, 20);
 myGLCD.setColor(0,0,0);
  myGLCD.setBackColor(255,255,255);
  myGLCD.print("100%", 56, 100);
  myGLCD.print("Off", 218, 100);
  myGLCD.print("27.2", 56, 160);
  myGLCD.print("6.8", 218, 160);
  myGLCD.setBackColor(88,88,91);
   myGLCD.setColor(255,255,255);
   myGLCD.setFont(SmallFont);
  myGLCD.print("25-12-2015", 225, 217);
break;
}
 
}

void menu()
{affichage=false;
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU1.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
//ici on teste l'apuis sur les bouton
 if (TestTouche(30, 30,0,210)){selecteurPage =2;}
//on afiche les variable qui change en dinamique
  myGLCD.print("menu complet", 150, 0);
   break;
}
}

void menu_ph()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
//ici on teste l'apuis sur les bouton
 if (TestTouche(30, 30,0,210)){selecteurPage =2;}
//on afiche les variable qui change en dinamique
  myGLCD.print("menu complet", 150, 0);
   break;
}
}




void menu_temp()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
//ici on teste l'apuis sur les bouton
 if (TestTouche(30, 30,0,210)){selecteurPage =2;}
//on afiche les variable qui change en dinamique
  myGLCD.print("menu complet", 150, 0);
   break;
}
}

void menu_lum()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
//ici on teste l'apuis sur les bouton
 if (TestTouche(30, 30,0,210)){selecteurPage =2;}
//on afiche les variable qui change en dinamique
  myGLCD.print("menu complet", 150, 0);
   break;
}
}



void menu_nour()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
//ici on teste l'apuis sur les bouton
 if (TestTouche(30, 30,0,210)){selecteurPage =2;}
//on afiche les variable qui change en dinamique
  myGLCD.print("menu complet", 150, 0);
   break;
}
}
 

void menu_reglage()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
  myGLCD.print("menu reglage", 150, 0);
   break;
}
}

void menu_reglage1()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
  myGLCD.print("menu reglage1", 150, 0);
   break;
}
}

void menu_pompe()
{
     switch(affichage){
     
     case 0:
// arriere plan, bouton, intitulé de variable , etc
myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");

affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
break;
case 1:
  myGLCD.print("menu affichage", 150, 0);
   break;
}
}

Heloderma-kris

laise moi deviner , lorsque tu est dans home et que tu clique sur ton bouton ton ecran s'eface mais lorsque tu arrive sur ton menu tu charge et recharge le bitmap et ta touche ne marche pas!
 

Heloderma-kris

aller voic qui devrai te débloqué ! :smiley-mr-green:
Code: [Select]

void Home()
{
  switch(affichage){

  case 0:
    // logo demarrage
    myFiles.loadBitmap(100, 70, 123, 104, "AQUAPLAN.RAW");
    delay(2000);
    // arriere plan, bouton, intitulé de variable , etc
    myFiles.loadBitmap(0, 0, 318, 238, "MENU0.RAW");
    affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
    break;
    /* jusque la pas de souci*/
  case 1:
    //ici on teste l'apuis sur les bouton et on part sur le menu
    if (TestTouche(320, 240,0,0)){
      affichage=true;//-----> tu doit passe a false comme sa lors de la prochaine boucle que tu soit dans homme ou autre tu affichera tou!
      myGLCD.clrScr();
      selecteurPage =2;
    }

    //on afiche les variable qui change en dynamique pour le moment cela restera en dur
    myGLCD.setColor(255,255,255);
    myGLCD.setBackColor(0,0,0);
    myGLCD.setFont(BigFont);
    myGLCD.print("12H01", 120, 20);
    myGLCD.setColor(0,0,0);
    myGLCD.setBackColor(255,255,255);
    myGLCD.print("100%", 56, 100);
    myGLCD.print("Off", 218, 100);
    myGLCD.print("27.2", 56, 160);
    myGLCD.print("6.8", 218, 160);
    myGLCD.setBackColor(88,88,91);
    myGLCD.setColor(255,255,255);
    myGLCD.setFont(SmallFont);
    myGLCD.print("25-12-2015", 225, 217);
    break;
  }

}

void menu()
{
  affichage=false;//------------> grosiere erreur car si tu affect en debut de fonction false a chaque tour tu ne tracera que la case 0 jamais 1
  //                              c'est dans la fonction d'avant qu'il faut changer avant d'arivé ici!
  switch(affichage){

  case 0:
    // arriere plan, bouton, intitulé de variable , etc
    myFiles.loadBitmap(0, 0, 318, 238, "MENU1.RAW");
    affichage=true;// on passe a true pour ignoré ces instruction a la prochaine boucle
    break;
  case 1:
    //ici on teste l'apuis sur les bouton
    if (TestTouche(30, 30,0,210)){
      selecteurPage =2;
    }
    //on afiche les variable qui change en dinamique
    myGLCD.print("menu complet", 150, 0);
    break;
  }
}


Jazznet

Merciiiii

T'es un as.

Bon plus qu'à bien comprendre ce que tu as fais pour pas etre con mais cela marche ^^

Maintenant a moi de faire l'interface complet
Et après je rentre les fonctions des différents modules ^^
Le premier sera l'heure ^^

skywalker81

Bonjour , je suis en train de faire un peu le même projet mais moins compliqué , pour l'instant juste la gestion des pompes par arduino avec écran tactile 3.2".
J'attend tes prochaines interventions pour l'affichage de l'heure car la je suis un peu bloqué..
Merci

Heloderma-kris

quel librairie utilise tu pour la RTC?

de maniere général
1) on interoge la RTC et on recupere dans des variable H:M:S
2) on conditionne pour l'affichage :

sur le Serial normalement un simple
 
Code: [Select]

serial.print(h);
serial.print(":");
serial.print(m);
serial.print(":");
serial.println( s);


sinon sur l'crant c'est un peut differenat il faudrat utilisé

Code: [Select]

char buffer[20];// un tableau de carracter ou chaine
sprintf(buffer;"%2i : %2i : %2i",H,M,S);// on transforme nos variable en chaine de caracter
LCD.print(buffer,100,100);// on affiche la chaine de carracter



skywalker81

j'ai ce programme qui fonctionne sur le serie et j'aimerais bien le transcrire sur mon écran..

// DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup () {
  Serial.begin(9600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
   
   
   
     
   
    Serial.println();
    delay(3000);
}

Heloderma-kris

je n'utilise pas la meme lib mais normalement c'est exactement comme je t'ai dit au dessus
tu fait biensur les declaration préalable pour ton ecran et ensuite
tu colle le tout dans un buffer via sprintf et tu imprime sur l'ecran.

dans la lib on voi que
second() revoie un uint8_t donc le code si dessous devrai passé sinon remplace le %2i par %2u

ex :
Code: [Select]


char buffer[20];// un tableau de carracter ou chaine
sprintf(buffer;"%2i : %2i : %2i",now.hour(),now.minute(),now.second());// on transforme nos variable en chaine de caracter
LCD.print(buffer,100,100);// on affiche la chaine de carracter


skywalker81

ça ne marche pas , j'ai aussi ce programme :
#include <liquidcrystal.h>
#include <wire.h>
#include <rtclib.h>

LiquidCrystal lcd(12, 11, 10, 5, 4,3,2);
RTC_DS1307 rtc;

void setup() {
    lcd.begin(20,4);
    lcd.clear();

    Wire.begin();
    rtc.begin();
}

void loop(){
    DateTime now = rtc.now();

    lcd.setCursor(0,0);
    lcd.print(now.year());
    lcd.print("/");
    if (now.month()<10) lcd.print="0";
    lcd.print(now.month());
    lcd.print("/");
    if (now.day()<10) lcd.print="0";
    lcd.print(now.day());
    lcd.print(" ");
    if (now.hour()<10) lcd.print="0";
    lcd.print(now.hour());
    lcd.print(":");
    if (now.minute()<10) lcd.print="0";
    lcd.print(now.minute());
    lcd.print(":");
    if (now.second()<10) lcd.print="0";
    lcd.print(now.second());

    delay(900);
}

mais je n'arrive pas à le transcrire avec la librairie UTFT

Heloderma-kris

poste deja entre balise code "le parchemin avec <> haut dessu des smiler" , le code qui reuni RTC et utft que tu a deja ecris histoire de voir ou ça cloche !  :smiley-mr-green:

Go Up