Go Down

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

Jazznet

Sinon interface quasi terminée.... Enfin la création graphique ^^ la programmation sera à faire quand je recevrai le matos.

En tout cas c'est sympa car cela donne déjà une idée des fonctionnalités que je vais développer.

Des que j'ai 5mn a moi je vous mettrais les screen shoot du premier jet

Jazznet

Voici les screen shoot du premier jet



































Heloderma-kris

belle interface , tu la develope sur quoi ?
atention si tu souhaite l'intégré dans l'arduino pour affichage sur TFT ça me semble gourmant en espace mémoire.

Jazznet

J'ai vu qu'on pouvait utiliser l'espace d'une sd sur l'écran tft pour aller récupèrer les images
La faudra que je regarde comment je découpe les screen shoot ou pas

Sinon c'est réalisé sous illustrator ^^ et cela sera une mega qui prendra le tout

Jazznet

j'ai doucement commencé a apprendre les bases que je n'ai toujours pas  :smiley-mr-green:
mais bon voila ce que cela donne pour le début de l'interface

j'ai zapper le fond sympa car j'ai du mal a trouver une lib qui me permet de mettre une image via la sd, a moins que ma sd ne soit pas reconnu par son format :/

je trouve que cela rend tout de même propre



maintenant je m'attaque a la gestion des menus les un envers les autres

Heloderma-kris

effectivement ça rend bien!
 tu utilise la lib utft ?
car sinon tu peut peut'etre te cree une fonction adapter de :
drawbitmap ,qui lit un tableau de donné sur SD ;
comme les donné d'image stocké en flash et tu charge , mais attention au temps de chargement qui risque d'etre long.

PS: on voit un petit trait noir en desous de tes logo c'est voulu ?

Jazznet

bon j'étais pas parti sur la bonne voie

donc en effet je vais repartir sur une lecture via la SD, cela ne fonctionnais pas sur ma SD de 16GO du coup j'ai retrouvé une vieille vieille vieille sd de 512Mo et la magique cela fonctionne et je peux lire des raw.

donc oui j'utiliserai les lib UTFT, donc je vais utiliser les fonction permettant de lire des raw, et cela va surement un peu ramer a l'ouverture des menu, mais bon, le but est d'avoir aussi une belle interface qui donne envi... et si cela met 2s pour ouvrir une image c'est pas grave.

donc je vais pouvoir revenir sur mon interface de base et cela sera plus sympa visuellement

maintenant plus que refaire tout le code lol

heureusement que c'est juste le début

Jazznet

aller me voila reparti de 0 mais cela fonctionne bien


remarquez qu'il n'y a rien non plus lol.
mais j'ai la base de présentation qui est bonne et lu via une sd
donc maintenant je peux enfin attaquer les menus

bricoleau

#23
Jan 22, 2015, 06:28 pm Last Edit: Jan 22, 2015, 06:39 pm by bricoleau
Questions aquariophiles :

En ce qui concerne la température, tu ne prévois rien de plus que des relevés réguliers avec alertes associées ?
Aucune action de pilotage des équipements chauffants ?

Pour les changements d'eau, tu restes sur du manuel ?
Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Heloderma-kris

que donne ton temps de chargement depuis la SD ?  et quelle taille d'ecran a tu finalement utilisé?

Jazznet

Bricoleau : pour la température je pense gerer la mise en/hors tension du chauffage, avec un écartype réglable par l'utilisateur, sinon cela va pas arreter de mettre en marche et arreter le relais. donc par exemple si tu depasse de 1 degrés en plus ou moins on met en tension ou hors tension le chauffage.
pour le moment pas de pilotage d'eau, j'ai pas les capacités chez moi de le faire en automatique.

Heloderma-Kris : j'ai pris un 3.2 pouces, et le temps de chargement d'une image de fond est de 2 à 3s.


j'ai pas eu beaucoup de temps a travaillé sur le projet mais j'ai commencé a bosser les menu...

pour le moment je fais a moitié du code et a moitié de la récupe de code sur le web que je modifie suivant mes envie.
bref rien de glorieux et surtout je n'arrive pas a comprendre pourquoi je n'arrive pas a me servir de mon touch (lui fonctionne parfaitement avec les exemples existant)

voici mon code
Code: [Select]
// JEFFDUINO 1.03
// 1.02 version avec menu venant de la SD
// 1.03 création des menus



#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;

// 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();
  myGLCD.setColor(255,255,255);
  myGLCD.setBackColor(0,0,0);
  myGLCD.setFont(BigFont);
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
  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()
 {
 myFiles.loadBitmap(0, 0, 318, 238, "MENU.RAW");
 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);

  if (TestTouche(30, 30,0,210)){selecteurPage =2;}

 while(1) {};
}

void menu()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_ph()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_temp()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_lum()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_nour()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_reglage()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_reglage1()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

void menu_pompe()
{
  myGLCD.print("menu complet", 150, 0);
   while(1) {};
}

 Mon code n'est pas très beau non plus mais je me fais la main aussi dessus. donc soyez indulgeant ^^

donc si vous aviez des idées.

Heloderma-kris

a mon avis il doit pas marché tres bien ton code tu a des boucle
Code: [Select]
while(1){}; partout du coup le programe tourne en boucle indefiniment vire le while .
ou alors j'ai rien compris :smiley-mr-green:


Jazznet

Ben oui il marche pas bien lol

Par contre si j'enlève le While jai surtout l'écran qui se reaffiche en continue

Je ne pense pas qu'il soit bon du tout
Je tâtonne enormement pour comprendre le principe de prog sous arduino ;)

Donc c'est plutôt pour montrer le chemin que je prend
Si tu me dis que cest franchement pas la bonne méthode je referai autrement (si tu peux m'aiguiller je prend aussi ;) )

Heloderma-kris

si tu te met des retour sur le Serial tu vera que a la fin de ta page principale apres avoir tester l'apuis sur ta touche et bien tu ne sort plus de la boucle while . ce n'est donc pas la bonne methode . voici une astuce:
tu va cree une vriable globale de type
Code: [Select]
boolean affichage=false;

en suite a l'interieur de chaqu'une de tes page tu va cree un controle avec un switch

Code: [Select]
swich( affichage){

case 0:
// toute les instruction que tu ne cherche a afiché qu'une fois
// arriere plan, bouton, intitulé de variable , etc
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
//on afiche les variable qui change en dinamique
break;
}


et derniere astuce , quand tu fait un apuis sur une touche pour changer de page
tu repasse
affichage a false comme ça la prochaine page lira toute les instruction a sont premier passa et ferra les teste au prochain.

il faut garder a l'esprit que le programe est une boucle infini ( sauf si tu lui colle un while(1)  :smiley-mr-green: )
donc il peut etre decouper de façon a ignoré selon les passage dans la boucle certaine action

bricoleau

Bricoleau : pour la température je pense gerer la mise en/hors tension du chauffage, avec un écartype réglable par l'utilisateur, sinon cela va pas arreter de mettre en marche et arreter le relais. donc par exemple si tu depasse de 1 degrés en plus ou moins on met en tension ou hors tension le chauffage.
pour le moment pas de pilotage d'eau, j'ai pas les capacités chez moi de le faire en automatique.
Juste pour partager quelques idées :

Nos chauffages pour aquarium intègrent déjà un thermostat réglable.
Le désactiver revient à le régler à une température supérieure, et prendre la main depuis un arduino + relais.

De mon côté, j'ai plus confiance dans la fiabilité du thermostat embarqué sur du matos qui a fait ses preuves, que dans celle d'un montage DIY.
Ceci étant dit, "plus confiance" ne veut pas dire "totale confiance".
N'importe quel aquariophile expérimenté peut confirmer qu'un chauffage qui reste bloqué en position marche, cela peut arriver (avec bouillabaisse à la clé).

C'est pour cela que de mon côté, l'arduino ne gère qu'une coupure de sécurité, avec alerte associée.
Cette coupure est réglée à un seuil supérieur à la température normale de l'aquarium, qui reste réglée sur le thermostat du chauffage.

En option : j'ai prévu de couper le chauffage en heures pleines EDF, tant que la température de l'aquarium est supérieure à un seuil bas.

Enfin, sans automatiser les changements d'eau, j'ai quand même ajouté un capteur de niveau dans le bac, qui permet à l'arduino de détecter que je suis en train de changer une partie de l'eau manuellement, couper automatiquement pompe et chauffage, enregistrer les dates / heures de changement d'eau, et accessoirement de se rappeler à mon bon souvenir si cela fait trop longtemps que je ne l'ai pas fait.


Tutoriels arduino : http://forum.arduino.cc/index.php?topic=398112.0

Go Up