Show Posts
Pages: 1 ... 100 101 [102] 103 104 ... 243
1516  International / Français / Re: Communication série entre deux arduino on: September 18, 2013, 03:02:25 pm
Je me suis trompé
Code:
void loop() {
   
float var;
char *ptr;
 
   var = temp1.readCelsius();

   ptr = (char*)&var; //pointe sur le 1er octet de la variable

  for (byte i=0; i<3;i++){
       Serial.write(ptr++);
  }
}

Mêmes corrections sur le code en réception
1517  International / Français / Re: besoin d un petit coup de main pour un if on: September 18, 2013, 01:08:16 pm
Sa ne fonctionne toujour pas /:



Code:
// telecommande aquarium  ( 5592323 )
// telecommande lumiere meuble tv ( on/off 1601921 )  gradateur (+ 1601924) (- 1601922 ) 
// telecommande lumiere lit ( on/off 12612369 )  gradateur (+ 12612372) (- 12612370 )
// telecommande desodirisant couloir ( on/off 1864065 )  gradateur (+ 1864068) (- 1864066 )
 
/*
Arduino Masterbalby Controller
 Analog Pin 0 = Température Sensor
 
 Digital Pin 11 = LCD
 Digital Pin 11 = NULL
 Digital Pin 12 = LCD
 Digital Pin 7 = LCD
 Digital Pin 8 = LCD
 Digital Pin 9 = LCD
 Digital Pin 10 = LCD
 Digital Pin 8 = moon_light
 Digital Pin 11 = PWM day_light
 Digital Pin 16 = Bouton poussoir 1 day light
 Digital Pin 15 = Bouton poussoir 2 chauffage
 */
#include <stdio.h>
#include <stdlib.h>
#include <Wire.h>
#include <RTClib.h>
#include <Time.h>
#include <LiquidCrystal.h>
#include <WProgram.h>
#include <DS1307.h>
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
RTC_DS1307 RTC;

/*
Arduino Masterbalby Controller

Analog Pin 0 = Température Sensor

Digital Pin 6 = // la pin de connexion de mon emmeteur 433 mhz

Digital Pin 11 = LCD
Digital Pin 12 = LCD
Digital Pin 5 = LCD
Digital Pin 3 = LCD
Digital Pin 2 = LCD
Digital Pin 3 = // la pin de connexion de mon émetteur

Branchement du module RTC DS1307
- DS1307 -> Arduino
- SDA -> Pin A4
- SCL -> Pin A5
- GND -> GND
- VCC+ -> +5V
*/
int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
int temps_reel; 
int sensorPin = 0;
int moon_light = 8;
int days_light = 7;
int pwm = 18;
int heater_on_temp = 24;  //allume chauffage à cette température
int heater_off_temp = 26; //éteint le chauffage à cette température
int moon_on_time = 0750;  //allume les  moon lights à cette heure (en temps_perso)
int moon_off_time = 2200;  //éteint les moon lights à cette heure (en temps_perso)



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

void setup() {
   {
    /* RTC.stop();
    RTC.set(DS1307_SEC,00); //réglage secondes
    RTC.set(DS1307_MIN,59); //réglage minutes
    RTC.set(DS1307_HR,15); //réglage heures
    RTC.set(DS1307_DOW,6); //réglage jour de la semaine
    RTC.set(DS1307_DATE,11); //réglage date
    RTC.set(DS1307_MTH,12); //réglage mois
    RTC.set(DS1307_YR,10); //réglage année
    RTC.start();
    */
    }
   
    Serial.begin(9600);
    mySwitch.enableTransmit(6);  // la pin de connexion de mon émetteur
    mySwitch.setProtocol(1); // le protocol (cf screenshot ci dessus, que je mets donc à 1)
    mySwitch.setRepeatTransmit(2); // nombre de répétitions du signal histoire d'être sur que la prise recevra le signal
   
    lcd.begin(16, 2);
    lcd.print("MasterBalby 2.1");
    lcd.setCursor(0, 1) ;
    lcd.print("Gestion Aqua");
    delay(1700);
    lcd.clear();
    lcd.print(" initialisation");
    delay(1700);
    lcd.clear();
    Wire.begin();
    RTC.begin();
    pinMode(moon_light, OUTPUT);  // digital pin pour moon light en sortie
    Serial.println("Start program");

//Récupérer l heure du DS1307 ********************************************************************
  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(__DATE__, __TIME__));
    }
}
   
void displayTime(DateTime dateTime)
{
    lcd.setCursor(0, 1);
     if (dateTime.hour() <= 9) // Si les second sont inferieur a 10
       {   
           lcd.print ("0"); 
        }
    lcd.print(dateTime.hour(), DEC);
    lcd.print(':');
    if (dateTime.minute() <= 9) // Si les second sont inferieur a 10
       {   
           lcd.print ("0"); 
        }
    lcd.print(dateTime.minute(), DEC);
    lcd.print(':');
    if (dateTime.second() <= 9) // Si les second sont inferieur a 10
       {   
           lcd.print ("0"); 
        }
    lcd.print(dateTime.second(), DEC);
    lcd.print(' ');
  temps_perso = dateTime.hour()*100 + dateTime.minute();   // Mise à jour de temps_perso
 }
   
//Affichage température***************************************************************************

void displayTemperature(int temp)
{
    lcd.setCursor(8, 0);
    lcd.print("Temp:");
    lcd.print(temp);
    lcd.println("C");
    lcd.print(' ');
    delay(1000);
}





void loop() {
   
    //Récupérer la température du LM35 ***********************************************************

    int reading = analogRead(sensorPin);
    float voltage = reading * 5.0 / 1024;
    int temp = voltage * 100 ;
 
    //Affichage temps*****************************************************************************
    displayTime(RTC.now());
   
    //Affichage température***********************************************************************
    displayTemperature(temp);
   
 
   //programation relais**************************************************************************

 if((temps_perso < moon_on_time < )||(temps_perso > moon_off_time))
    {
      digitalWrite(moon_light, LOW);
    }
  else{
    digitalWrite(moon_light, HIGH);
      }
}


:/

Faudrait quand même réfléchir un peu.
Si tu changes le nom des variables entre 2 versions on ne va jamais y arriver.
Maintenant tu déclares une variable qui s'appelle temps-reel au lieu de temps_perso.
Faut choisir temps-reel ou temps_perso mais faut changer le nom partout
1518  International / Français / Re: besoin d un petit coup de main pour un if on: September 18, 2013, 09:11:10 am
oui mes je ne c pas ce que tu veut me dire par sa "Il faut aussi changer le test sur l'heure comme je l'avais indiqué."

Voir là ==>http://forum.arduino.cc/index.php?topic=188466.msg1394907#msg1394907
1519  International / Français / Re: Mesure de fréquence avec Arduino (timers ?) on: September 18, 2013, 07:56:31 am
http://interface.khm.de/index.php/lab/experiments/frequency-measurement-library/
http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
1520  International / Français / Re: besoin d un petit coup de main pour un if on: September 18, 2013, 07:53:22 am
Qu'est-ce qui ne marche pas?
Que se passe-t-il?

Tu n'as fait que la moitié des modifications relis mon dernier post
1521  International / Français / Re: Communication série entre deux arduino on: September 18, 2013, 05:45:06 am
Pour émettre avec Serial.write
Les flottants sont stockés sur 4 octets.
On utilise un pointeur sur la variable (le pointeur pointe donc sur le 1er octet de la variable), on fait envoyer les quatre octets
Code:
float var;
void *ptr;

   ptr = (void*)var; //pointe sur le 1er octet de la variable

  for (byte i=0; i<3;i++){
       Serial.write(ptr++);
  }

A l'arrivée, on récupère les 4 octets, on les écrit en mémoire avec un pointeur qui pointe sur une variable du bon type. C'est l'inverse de ce qui est fait à l'émission.

Pour émettre avec Serial.print
Si tu émets ta valeur flottante avec un Serial.println(var);
A la réception tu places les caractères reçus dans un tableau de char et tu passes le pointeur sur la chaine à la fonction atof() qui te retourne un flottant.
1522  International / Français / Re: Communication série entre deux arduino on: September 18, 2013, 01:38:05 am
Par ailleurs y a t-il une différence entre :

Code:
Serial.println()
et
Code:
Serial.write()
  pour la carte émettrice?
Serial.print() ou Serial.println() envoient une chaîne de caractères donc si tu veux envoyer une valeur numérique c'est sa représentation sous forme de  texte que tu vas recevoir (comme expliqué plus haut). Serial.print() permet quelques mises en forme (changement de base pour les nombres).

Serial.write() ne fais aucune interprétation des valeurs émises. En contre partie, Serial.write() attend en argument soit une valeur de type byte soit un tableau de byte ce qui oblige à manipuler les valeurs qui sont codées sur plus d'un octets (int, long et float)
1523  International / Français / Re: Comment incrémenter ceci 0x0100 on: September 17, 2013, 03:08:42 pm
une chaine de caractères, c'est en effet un nombre, mais en base 256...


Une chaîne de caractères c'est une information stockée sous forme de texte c'est tout.
1524  International / Français / Re: Comment incrémenter ceci 0x0100 on: September 17, 2013, 03:03:36 pm
Je m'excuse mais je travaille pour la premiere fois avec un EEPROM

Mais ceci fais donc la meme chose

EEPROM.write(0x0100, data_len);
EEPROM.write(256, data_len);
Oui c'est la même chose

Ce n'est en aucun cas lié à l'utilisation de l'EEPROM. C'est la syntaxe de base du C voir là : http://arduino.cc/en/Reference/IntegerConstants

Tu n'es pas aller voir le lien que je t'avais donné ou alors tu n'as pas compris.

Lorsque tu écris un chiffre de cette manière 101 c'est du décimal
Lorsque tu écris un chiffre de cette manière 0x101 c'est de l'hexadécimal
Lorsque tu écris un chiffre de cette manière B101 c'est du binaire
Suivant la base utilisé la valeur ne représente évidemment pas la même chose.

Si tu n'es pas à l'aise avec l'hexadécimal, pourquoi te faire du mal. Utilise la notation décimal. De toute façon, le compilateur se fiche complètement de la base que tu utilises pour compter au final il traduit tout ça dans son mode de comptage à lui.

Le fait d'écrire dans l'EEPROM n'impose pas un mode d'écriture particulier pour les valeurs. Les données stockées dans l'EEPROM se présentent comme celles qui sont stockées dans la RAM ou dans la Flash.
1525  International / Français / Re: besoin d un petit coup de main pour un if on: September 17, 2013, 02:16:44 pm
comment faire int temps_perso: ( et que le je déclare l heure en temps réelle de l horloge )
Si tu ne sais pas quoi faire avec, pourquoi as-tu crées cette variable temps_perso??

La fonction displayTime() est appellée à chaque passage dans la boucle donc, tu pourrais faire ça par exemple:
Code:
void displayTime(DateTime dateTime)
{
    lcd.setCursor(0, 1);
    lcd.print(dateTime.hour(), DEC);
    lcd.print(':');
    if (dateTime.minute() <= 9) // Si les second sont inferieur a 10
       {   
           lcd.print ("0"); 
        }
    lcd.print(dateTime.minute(), DEC);
    lcd.print(':');
    if (dateTime.second() <= 9) // Si les second sont inferieur a 10
       {   
           lcd.print ("0"); 
        }
    lcd.print(dateTime.second(), DEC);
    lcd.print(' ');

    temps_perso = dateTime.hour()*100 + dateTime.minute();   // Mise à jour de temps_perso
   }

Il faut aussi changer le test sur l'heure comme je l'avais indiqué.
1526  International / Français / Re: Pile et tas de la carte Mega2560 on: September 17, 2013, 02:04:10 pm
petit regret quand même, le compilateur ne donne pas la RAM dispo une fois le biniou compilé... (on sait vite quelle taille de pile donnera une fonction, avec la connaissance de la prog)
C'est prévu pour une future version de l'ide si je me souviens bien smiley-wink

J'ai chargé il y a peu de temps la version de développement et il y a l'information sur la RAM à la fin de la compilation
1527  International / Français / Re: besoin d un petit coup de main pour un if on: September 17, 2013, 10:06:30 am
Quote
fdunews je debute je ne comprend pas ce que je doit faire
Tu as créé une variable temps_perso et tu ne mets jamais de valeur dedans donc ta comparaison ne peut pas fonctionner.
1528  International / Français / Re: besoin d un petit coup de main pour un if on: September 17, 2013, 08:44:38 am
temps_perso n'est pas initialisé, ni mis à jour.

Autrement la condition s'écrirait plutôt comme ça
Code:
if((temps_perso < moon_on_time < )||(temps_perso > moon_off_time))
    {
      digitalWrite(moon_light, LOW);
    }
  else{
    digitalWrite(moon_light, HIGH);
      }

edit: correction parenthèse manquante
1529  International / Français / Re: Problème de déclaration on: September 17, 2013, 02:19:21 am
C'est la même chose que ta précédente question.
Mettre 2 classes dans un même fichier ne les fait pas se connaitre mutuellement.
Pour qu'une classe puisse utiliser les ressources d'une autre il faut :
  - soit que l'une dérive de l'autre et ainsi hérite des ses propriétés et méthodes
  - soit qu'elle instancie un objet de la classe en question et ainsi puisse appeler les classes et les méthodes de l'objet
1530  International / Français / Re: Teleinfo Arduino on: September 16, 2013, 02:39:38 pm
La fonction  bool xPL_Message::AddCommand(char* _name, char* _value) attend 2 chaînes de caractères en argument
Dans ta ligne msg.AddCommand("hchp",hchp); le second argument est un unsigned long. donc c'est normal que tu ais une erreur.
Pages: 1 ... 100 101 [102] 103 104 ... 243