Go Down

Topic: Thermostat from scratch (Read 3505 times) previous topic - next topic

chefdesgros

Bonjour,

Bonjour Taddot,

Ca y est j'ai compris le logiciel de logigramme que tu m'avais conseillé, j'ai donc réalisé un premier schéma, mais dans celui-ci, je ne sais pas comment implémenter le changement de la longueur de la plage éco lorsque j'appuie sur un bouton (le carré rouge.)

En même temps je ne détaille pas spécialement la programmation des horaires et je me doute que ca doit se faire dans ce coin... Bref je pèche un peu...

Question présentation (soyer indulgents, il s'agit de mon premier logigramme...)Est-ce qu'on a le droit de faire se croiser des flèche? Sinon comment on fait?

Est-ce que dans l'ensemble, c'est cohérent avec le dev sur Arduino, ou est-ce qu'il y a des choses dans le logigramme qui seront "impossible"/difficile à transcrire?



http://picasaweb.google.com/lh/photo/ehQvmhm2yKCY_eYL0CXbKQ?feat=directlink[/url]

Sinon, je commence ma programmation sur le soft Arduino en voulant pour l'instant juste retourner l'heure via le sérial monitor.
voila le début de code que j'ai :
Code: [Select]
// --- Programme Arduino ---
// programmation de thermostat

//

// --- Que fait ce programme ? ---
/* thermostat 3 états */

// --- Fonctionnalités utilisées ---


//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies incluses, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---
//const int btabsappui=0;  // boutton absence appuyé
//const int btabsrelache=1; // boutton absence relaché
//const int heureappui=0; // boutton heure appuyé
//const int heurerelache=1; // boutton heure relaché
//const int minappui=0; // boutton minutes appuyé
//const int minrelache=1; // boutton min relaché
//const int internetappui=0; // boutton internet appuyé
//const int internetlache=1; // boutton internet relaché




// --- constantes des broches ---

const int BPH=1; // boutton heure
const int BPM=2; // boutton minute
const int BPA=3; // boutton absence
const int SONDE=5; // Sonde LM35
const int CHAUDIERE=4; // contact chaudière
int analogPin=5;// thermostat


// Déclaration des variables et constantes horloge
  int seconde = 0;
  int minute = 0; // Minutes de l'horloge
  int heure = 12;
  int jour = 0;
  int mois = 0 ;
// Heures de l'horloge (avec inscription "19h" comme heure initiale)
     // Permet de remettre l'horloge à l'heure sur init à 19h00


// --- Déclaration des variables globales ---


// --- Déclaration des objets utiles pour les fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   {
 
  pinMode (BPH,INPUT);
  pinMode (BPM,INPUT);
  pinMode (BPA,INPUT);
  pinMode (SONDE,INPUT);
  pinMode (CHAUDIERE,OUTPUT); 

  // Initialise la liaison série
  Serial.begin(19200);
   delay(50);




} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()


// HORLOGE
    Serial.print ("mois/");
    Serial.println(mois);
    Serial.print ("jour" );
    Serial.println(jour);
    Serial.print ("heure ");
    Serial.println(heure);
    Serial.print ("minute: ");
    Serial.println(minute);
    Serial.print ("seconde");
    Serial.println(seconde);
    delay (1000);
   
 
  {(seconde) = seconde + 1};
   
    if (seconde >= 60) {minute= minute + 1 }; 
    seconde = 0}
   
    if (minute >= 60) {heure= heure + 1 }; 
    minute = 0}
   
    if (heure >= 24) {jour= jour + 1 }; 
    heure = 0}
   
 
   
// programmes

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

// --- Fin programme ---




Le problème, c'est que sur la ligne 98, il me dit :
expected ';'before'}token

Qu'est-ce qu'il veut?
Moi j'aimerais juste qu'il m'incrémente d'une seconde quand il a attendu la fin du delay (1000);?
C'est pas comme ca qu'il faut faire?

Des idées?

Attention, ce n'est pas tres pratique, mais voila le début du topic....

http://arduino.cc/forum/index.php/topic,33725.0.html

SamoLaw

#1
Jan 26, 2011, 11:42 pm Last Edit: Jan 26, 2011, 11:46 pm by SamoLaw Reason: 1
Salut

Il me semblait avoir répondu sur ton topic, mais apparemment non.  XD

Il y a quelque chose que je ne comprends pas dans ton code.

Code: [Select]
   if (seconde >= 60) {minute= minute + 1 };  
   seconde = 0}
   
   if (minute >= 60) {heure= heure + 1 };  
   minute = 0}
   
   if (heure >= 24) {jour= jour + 1 };  
   heure = 0}


Pourquoi il y a un ";" puis "minute = 0}" juste après. Je trouve ça bizarre, normalement une ligne de code doit se terminer par un ";".
C'est la même erreur sur les 3 lignes. (seconde = 0}, minute = 0} et heure = 0}).

Tiens voilà un lien intéressant sur la structure du IF :
http://www.arduino.cc/en/Reference/If

Et voilà un exemple tiré du site ci-dessus :

Code: [Select]
if (x > 120){
  digitalWrite(LEDpin1, HIGH);
  digitalWrite(LEDpin2, HIGH);
}     

Didierh

Bonjour,
Bonjour, Ici ça compile (pas eu le temps de tester / un arduino.)
Petit détail qui a son importance: utiliser l'horloge de l'arduino comme base de temps n'est pas un très bonne idée au niveau précision.
A+ Didier


Code: [Select]
// --- Programme Arduino ---
// programmation de thermostat

//

// --- Que fait ce programme ? ---
/* thermostat 3 etats */

// --- Fonctionnalites utilisees ---


//**************** Entete declarative *******
// A ce niveau sont declarees les librairies incluses, les constantes, les variables...

// --- Inclusion des librairies utilisees ---

// --- Declaration des constantes ---
//const int btabsappui=0;  // boutton absence appuye
//const int btabsrelache=1; // boutton absence relache
//const int heureappui=0; // boutton heure appuye
//const int heurerelache=1; // boutton heure relache
//const int minappui=0; // boutton minutes appuye
//const int minrelache=1; // boutton min relache
//const int internetappui=0; // boutton internet appuye
//const int internetlache=1; // boutton internet relache




// --- constantes des broches ---

const int BPH=1; // boutton heure
const int BPM=2; // boutton minute
const int BPA=3; // boutton absence
const int SONDE=5; // Sonde LM35
const int CHAUDIERE=4; // contact chaudière
int analogPin=5;// thermostat


// Declaration des variables et constantes horloge
  int seconde = 0;
  int minute = 0;     // Minutes de l'horloge
  int heure = 12;
  int jour = 0;
  int mois = 0 ;
      // Heures de l'horloge (avec inscription "19h" comme heure initiale)
      // Permet de remettre l'horloge à l'heure sur init à 19h00


// --- Declaration des variables globales ---


// --- Declaration des objets utiles pour les fonctionnalites utilisees ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est executee en premier et 1 seule fois, au demarrage du programme

void setup()   {
 
  pinMode (BPH,INPUT);
  pinMode (BPM,INPUT);
  pinMode (BPA,INPUT);
  pinMode (SONDE,INPUT);
  pinMode (CHAUDIERE,OUTPUT); 

  // Initialise la liaison serie
  Serial.begin(19200);
   delay(50);




} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'execute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()


// HORLOGE
    Serial.print ("mois/");
    Serial.println(mois);
    Serial.print ("jour" );
    Serial.println(jour);
    Serial.print ("heure ");
    Serial.println(heure);
    Serial.print ("minute: ");
    Serial.println(minute);
    Serial.print ("seconde");
    Serial.println(seconde);
    delay (1000);
   
 
   seconde = seconde + 1;
   
    if (seconde >= 60) {
      minute= minute + 1; 
      seconde = 0;
    }
   
    if (minute >= 60) {
      heure= heure + 1;
      minute = 0;
    }
   
    if (heure >= 24) {
      jour= jour + 1;
      heure = 0;
    }
   
 
   
// programmes

} // fin de la fonction loop() - le programme recommence au debut de la fonction loop sans fin
// ********************************************************************************

//*************** Autres Fonctions du programme *************

// --- Fin programme ---


taddot

pour le logigramme, je voyait un truc du genre :


Pour être encore mieux, structurellement parlant, le "dérog web" devrait être avant le controle de l'horaire (H18/20), afin que les sauts ne se coisent pas. Mais dans ce cas, la dérog est permanente tant que tu ne l'as pas changée. Pour info, les télécommandes "téléphoniques" de chauffage fonctionnement de cette manière (exemple, départ paris, maison de vacances dans le cantal - départ paris : 1er appel vers n°tel cantal = mise en marche - arrivée sur site, on se re-téléphone = extinction de la commande à distance + remise en mode manuel de l'install) - De cette façon, quand tu rentres de vacances, il te suffirait de modifier ton "url" pour remettre le chauffage en route et que ta maison soit chaude à l'arrivée chez toi.

Tu peux même faire en sorte que ta programmation soit entièrement stockée sur un site web/serveur (donc facilement modifiable/consultable depuis n'importe quel terminal), site que ton arduino interrogerait toutes x minutes...
pas taper... sauf application de l'article 35 ...

Go Up