Show Posts
Pages: 1 ... 99 100 [101] 102 103 ... 242
1501  International / Français / Re: [arduino] PWM, harmonique et afficheur LCD. une histoire de compatibilité on: September 23, 2013, 03:59:00 am
Un schéma pour comprendre comment est câblé l'ensemble
1502  International / Français / Re: lecture serie avec arduino on: September 21, 2013, 05:04:14 am
j'ai progresse un peu dans mon elaboration

maintenant j'ai besoin de ce coup de pouce pour mettre des gardes fou a serial.available pour ne pas que l'on rentre des chiffre >4 ou < 4
toute mes tentatives avec des if mettent a mal mon prog et plus rien fonctionne

voila ce que j'ai fait jusque la



Je ne sais pas si c'est vraiment ça que tu veux.

Code:
int conv;
float TempCons;
char tempcons[5];

void setup(){
  Serial.begin(9600);
}

void loop(){
  while ( Serial.available() != 4 ) {};           // On ne fait rien tant qu'il n'y a pas 4 caractères de reçus
 
  for (int i=0;i<=4;i++) {
        tempcons[i] = Serial.read();
  }
  tempcons[4]='\0';                                  // termine la chaîne
  TempCons = atof(tempcons);
  conv =(int)(TempCons*10);                    // conversion en entier pour stockage en eeprom
   
  Serial.println();
  Serial.print(TempCons,1);
  Serial.println();
  Serial.print(conv);
 /* Serial.println();
  Serial.print(conv/100);
  Serial.print(conv%100);*/
  Serial.flush();
}
1503  International / Français / Re: Comment incrémenter ceci 0x0100 on: September 20, 2013, 01:25:46 pm
Euh, du reste tout est déclaré en byte en fait. Forcement que ca marche pas bien :/

Le mieux pour faire joujou avec des mask c'est des unsigned int pour des paquets de 16 bits, voir des unsigned long pour des pack de 32
Faut pas se fier au nom, de ce que j'ai compris c'est plutôt l'adresse de base dans la mémoire
1504  International / Le bar / Re: recherche composant timer... on: September 20, 2013, 09:18:09 am

La difficulté est que pour obtenir ce fichier binaire on utilise un langage qui ressemble à de la programmation mais qui n'en est absolument pas, même si on utilise des boucles if,for,while on est vraiment au niveau du matériel : une variable "registre" est plus à considérer comme une bascule D-Latch que comme en C un registre de 8 bits manipulable à  volonté.
En VHDL ou Verilog, on peut écrire très bas niveau (en décrivant la bascule et la porte) mais on peut aussi écrire assez haut niveau. Dans ce cas les variables peuvent représenter un registre de taille quelconque. Un compteur s'écrit alors comme une addition et l'écriture n'est pas très éloignée du C.

Il y a des chaînes de développement gratuites. Pour ce faire la main c'est pas mal.

Le problème c'est plutôt le prix. Un petit FPGA coûte déjà assez cher comparativement à un microcontrôleur. Et du coup il est plus économique de faire 10 PWM avec interface SPI dans 10 ATtiny que dans un FPGA.
1505  International / Le bar / Re: recherche composant timer... on: September 20, 2013, 09:08:38 am
Tu es vraiment attaché à l'interface parallèle?

Parce qu'il y a des trucs comme ça http://www.ti.com/product/tlc5940 qui sont plutôt pas mal. Par contre en interface parallèle il n'y a rien avec PWM.
1506  International / Français / Re: Comment incrémenter ceci 0x0100 on: September 20, 2013, 03:14:19 am
Par contre, je suis surpis d'un truc

Code:
#define EPROM_INC 0x0100
byte mask = 0x1100;

mask = mask+EPROM_INC;


mask devrait être egal à
Quote
0x1200
non?
Non, la variable mask est de type byte donc limitée à 0xFF si tu veux voir le bon résultat déclare ta variable comme int ou unsigned int.
1507  International / Français / Re: String et tableau utiliser la Flash plutot que la ram on: September 19, 2013, 01:28:58 am
Voir là ==> http://arduino.cc/en/Reference/PROGMEM
1508  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
1509  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
1510  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
1511  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/
1512  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
1513  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.
1514  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)
1515  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.
Pages: 1 ... 99 100 [101] 102 103 ... 242