Envoyer 5 variables meteorologiques en xbee(arduino)

Bonjour,
Je suis en terminale Sti2D specialité sin et jai un projet de fin d’année(bien avancé) qui est une station meteo.Elle recoit des donné et grace a un programme(arduino) les transformes en variables. Je dois ensuite envoyer ces variables sur une seconde carte arduino grace a deux cartes xbee. Le programme des capteurs n’etant pas ma partie , jai du mal a le comprendre, surtout qu’ilo est assez complexe. le voici

#include “DHT.h”
#define uint unsigned int
#define ulong unsigned long
#define DHTPIN 11 // Digital 6
#define PIN_ANEMOMETER 9 // Digital 2
#define PIN_RAINGAUGE 10 // Digital 3
#define PIN_VANE 5 // Analog 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Combien de fois nous voulons calculer la vitesse ou la direction du vent
#define MSECS_CALC_WIND_SPEED 2000
#define MSECS_CALC_WIND_DIR 2000
#define MSECS_CALC_RAIN_FALL 2000
volatile int numRevsAnemometer = 0; // Incrémenté à l’interruption
volatile int numDropsRainGauge = 0; // Incrémenté à l’interruption
ulong nextCalcSpeed; // Quand nous avons ensuite calculé la vitesse du vent
ulong nextCalcDir; // Quand nous avons ensuite calculé la direction
ulong nextCalcRain; // Quand nous avons ensuite calculé la chute de pluie
ulong time; // Millis () à chaque début de boucle ().
#define NUMDIRS 8 // Lectures ADC:
ulong adc[NUMDIRS] = {26, 45, 77, 118, 161, 196, 220, 256};
// Ces directions correspondent à 1-for-1 avec les valeurs dans adc, mais // devra être ajusté comme indiqué ci-dessus. Modifiez ‘dirOffset’ // auquel la direction est ‘loin’ (c’est l’Ouest ici).
char *strVals[NUMDIRS] = {“W”,“NW”,“N”,“SW”,“NE”,“S”,“SE”,“E”};
byte dirOffset=0;
int humidi;
int temper;

// innitialisation
void setup() {
Serial.begin(9600);
pinMode(PIN_ANEMOMETER, INPUT);
digitalWrite(PIN_ANEMOMETER, HIGH);
digitalWrite(PIN_RAINGAUGE, HIGH);
attachInterrupt(0, countAnemometer, FALLING);
attachInterrupt(1, countRainGauge, FALLING);
nextCalcRain = millis() + MSECS_CALC_RAIN_FALL;
nextCalcSpeed = millis() + MSECS_CALC_WIND_SPEED;
nextCalcDir = millis() + MSECS_CALC_WIND_DIR;
dht.begin();
}
void loop() {
// lire la température el l’humidité tout les 250 milliseconds!
time = millis();
float h = dht.readHumidity();
float t = dht.readTemperature();
// Vérifier si les rendements sont valables si elles sont NaN (not a number) puis quelque chose s’est mal passé!
if (time >= nextCalcSpeed) {
calcWindSpeed();
nextCalcSpeed = time + MSECS_CALC_WIND_SPEED;
}
if (time >= nextCalcDir) {
calcWindDir();
nextCalcDir = time + MSECS_CALC_WIND_DIR;
}
if (time >= nextCalcRain) {
calcRainFall();
nextCalcRain = time + MSECS_CALC_RAIN_FALL;
}
if (isnan(t) || isnan(h)) {
Serial.println(“Failed to read from DHT”);
} else {
Serial.print(“Humidite: “);
Serial.print(h);
Serial.print(” %\t”);
Serial.print(“Temperature: “);
Serial.print(t);
Serial.println(” *C”);

humidi = analogRead(h);
Serial.print(h);
delay(50);
temper = analogRead(t);
Serial.print(t);
delay(50);

}
}
// Interrompre l’entraîneur pour l’anémomètre. Appelé chaque fois le roseau(l’anche)
// Commuter(changer) de détentes (une révolution).

void countAnemometer() {
numRevsAnemometer++;
}
// Interrompre l’entraîneur pour le pluviomètre. Appelé chaque fois le roseau(l’anche)
// Commuter(changer) de détentes (une baisse(goutte)).

void countRainGauge() {
numDropsRainGauge++;
}
// Trouver la direction des ailettes.
void calcWindDir() {
int val;
byte x, reading;
val = analogRead(PIN_VANE);
val >>=2;
reading = val;
// Regard(apparence) la lecture en haut dans table de directions. Trouvez la première valeur
// C’est > = à ce que nous sommes arrivés.
for (x=0; x<NUMDIRS; x++) {
if (adc >= reading)
break;}
x = (x + dirOffset) % 8; // Adjuster l’orientation
Serial.print(" Direction: ");
Serial.println(strVals);

Serial.print(x);
delay(50);

}
// Calculer la vitesse de vent et montrer(afficher-le) (ou enregistrer-le, indépendamment de ).
// 1 rev/seconde = 1.492 kms/h = 2.40114125 kms/h
void calcWindSpeed() {
int x, iSpeed;
// Ceci produira le km/h * 10
// (N’a pas fait calc de droit quand fait comme une déclaration)
long speed = 24011;
speed *= numRevsAnemometer;
speed /= MSECS_CALC_WIND_SPEED;
iSpeed = speed; // Avoir-en besoin pour formater ci-dessous
Serial.print("vitesse du vent: ");
x = iSpeed / 10;
Serial.print(x);
Serial.print(’.’);
x = iSpeed % 10;
Serial.print(x);
numRevsAnemometer = 0; // compteur remis à zéro

Serial.println(iSpeed);
delay(50);

}
// Calculer la pluie et montrer(afficher-le) (ou enregistrer-le, indépendamment de ).
// 1 seau = 0.2794 mm
void calcRainFall() {
int x, iVol;
// Ceci produira le mm * 10000 // (n’a pas fait calc de droit quand fait comme une déclaration)
long vol = 2794; // 0.2794 mm
vol *= numDropsRainGauge;
vol /= MSECS_CALC_RAIN_FALL;
iVol = vol; // Avoir-en besoin pour formater ci-dessous
Serial.print("pluie: ");
x = iVol / 10000;
Serial.print(x);
Serial.print(’.’);
x = iVol % 10000;
Serial.print(x);
Serial.println();
numDropsRainGauge = 0; // compteur remis à zéro

Serial.print(iVol);

}

Donc il affiche 5 varaibles( vitesse vent, direction,humidité temperature , et pluviometre) dans le moniteur serie de la premiere arduino.

comme sa :
http://imagesia.com/sans-titre_g3pv

Pouvez vous m’aidez a mettre les “instructions” (lignes)pour pouvoir envoyer ces 5 variables tel quelle et les afficher sur le moniteur serie de la seconde arduino. Je sais envoyer une variable a partir d’un potentiometre mais la c’est pas du tout pareil.

J’ai aussi mon programme recepteur qui n’est peut etre pas juste :

int incomingByte = 0; // for incoming serial data

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {

// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}[/i][/color][/font]

Donc si vous pouvez m’aidez pour l’emission des 5 variables , sa serait vraiment cool ! merci !!! et désolé si les programmes sont mal affichés.

Je sais envoyer une variable a partir d'un potentiometre mais la c'est pas du tout pareil.

bonjour,
donc tu sais envoyer plusieurs variables alors, ou est le soucis?
une piste comme ca :
mettre toutes les infos dans une seule variable avec un caractère de séparation comme un |
ca pourrait donner :
vitesse**|direction|humidité|** temp|pluie
10**|sw|95|25|**12

après tu recois la variable et tu la parse

Merci de ta réponse !
enfaite je sais envoyer avec un potentiometre qui a une variale plus facile a lire que dans le programme de mon colegue. (je sais pas si je suis clair..) Dans le programmes des capteurs jai du mal a identifier le nom des varibles (iVol=variable de la pluie ..? etc)

je peut mettre
serial.print(vitesseduvent/direction...) pour envoyer c'est sa que tu veut dire ?
merci

tu crois pas que le mieux serait de demander à ton collègue de te dire les variables? :slight_smile:

de plus pourquoi il rajoute

    humidi = analogRead(h);
    Serial.print(h);
    delay(50);
    temper = analogRead(t);
    Serial.print(t);
    delay(50);

alors qu'il le lit déjà?????????

le programme est pas complexe en plus, suffit de regarder les Serial.print :smiley:

on ne vous apprend pas a travailler en groupe?

Merci de ta réponse !
enfaite c'est un programme qu'il a récupere sur internet donc il ne connait pas le fonctionement du programme .... mon prof ne sais pas non plus(ou ne veut pas) comment faire..
si il y a deja les 5variables envoyer en "serail.print" que faut t-il rajouter pour l'envoi en xbee ????

Merci d'avance !

poudoux:
Merci de ta réponse !
enfaite c'est un programme qu'il a récupere sur internet donc il ne connait pas le fonctionement du programme .... mon prof ne sais pas non plus(ou ne veut pas) comment faire..
si il y a deja les 5variables envoyer en "serail.print" que faut t-il rajouter pour l'envoi en xbee ????

Merci d'avance !

vais pas me faire aimer, mais tant pis, c'est la période des plans foireux pour le bac, Artousteeeeeeeeee t'énerve pas :slight_smile:
hé les gars, faites des efforts un peu et creusez vous les méninges.
apprenez un peu les bases, au moins un minimum.
comment voulez vous faire un projet, le présenter et répondre à des questions qui vous serons posées si vous savez même pas ce que vous faites?
je crois réver, ton pote est dans le projet et copie colle un truc trouvé sur le net et basta, hop son taf est fait à toi de te démerder pour le reste. ]:slight_smile:

le programme est tout ce qu'il y a de plus con et je reste poli en plus.
t=> température
h=>humidité
déjà avec ces 2 variables tu peux faire quelque chose.
cherche comment mettre 2 variables bout à bout sur le net, y a pas 36000 solutions.

fais ton petit prog comment ca a blanc avec des variables en dures et présente après ton truc ici.

infobarquee:
.....y a pas 36000 solutions.....

Bonsoir,

Et à peu près autant de candidats au bac STI2D: vers les 30000? (les 4 options cumulées )
Heureusement ils ne viennent pas tous ici, mais ceux qui viennent sont quand même les bienvenus :grin: , mais si!
Il faut bien que " jeunesse se passe", et en soufflant un peu dans les bronches de certains qui le méritent sans doute ,le schmilblick avance quand même. :wink:

Je sais bien , mais sa fait 1mois que je ne sais plus comment faire,j'ai pourtant bien avancer jusque la. Nous n'avons pas de cours, on doit tout chercher sur internet, pas d'aide du prof .... donc j'essaye de trouver des moyens pour me décoincer un peut .

On envoie une variable en xbee avec "serial.print" c'est bien sa ?? les serial.print étant deja écrit pour chaque variable, que dois je faire de plus ?

merci a vous !

infobarquee:

Je sais envoyer une variable a partir d'un potentiometre mais la c'est pas du tout pareil.

bonjour,
donc tu sais envoyer plusieurs variables alors, ou est le soucis?
une piste comme ca :
mettre toutes les infos dans une seule variable avec un caractère de séparation comme un |
ca pourrait donner :
vitesse**|direction|humidité|** temp|pluie
10**|sw|95|25|**12

après tu recois la variable et tu la parse

infobarquee:

poudoux:
Merci de ta réponse !
enfaite c'est un programme qu'il a récupere sur internet donc il ne connait pas le fonctionement du programme .... mon prof ne sais pas non plus(ou ne veut pas) comment faire..

vais pas me faire aimer, mais tant pis, c'est la période des plans foireux pour le bac, Artousteeeeeeeeee t'énerve pas :slight_smile:

:grin: :grin:

Je ne suis pas enervé, simplement tres interrogatif/dubitatif sur la methode d'apprentissage/recherche, et la durée/qualité d'apprentissage.

comme tout bon scientifique, je ne suis pas encore determiné sur les "ptits jeunes" qui debarquent ici en fevrier pour un bac en "juin" avec dans leur besace le mot "arduino"

sur les X en Terminales "devant" rendre pour notation pour juin un projet impliquant "un arduino" ça represente combien d'eleves ?
sur ce volume restant Y, combien atterisse ici sur le forum en fevrier ?

mon questionnement est surtout :
Est ce que ce sont des "glandeurs" qui se reveillent brusquement devant l'echeance, des "impasseurs" 8) qui se reveillent tout aussi brutalement ?
ou une gestion educative "initialement mal conçue" ?

comme je je suis toujours du genre à rester dans l'indulgence :

celles et ceux que l'on voit arriver ici , sont ils un "haut de panier " faisant l'effort de poser des questions (les exposés ici etant quand meme generalement plutot pas mal redigés) ce qui impliquerait de facto qu'une grande masse aurait déjà prealablement abandonnés ?

celles et ceux que l'on voit arriver ici , sont ils un "haut de panier " faisant l'effort de poser des questions (les exposés ici etant quand meme generalement plutot pas mal redigés) ce qui impliquerait de facto qu'une grande masse aurait déjà prealablement abandonnés ?

ou trouvé des solutions par eux même en buchant et venant ici pour des points critiques et non trouver du tout cuit :wink:
je m'étonne quand même que beaucoup (99.95%) d'arrivants ici, n'aient pas fait l'effort d'installer déjà l'ide sur leur pc et buché un peu les exemples et parcourut un peu le forum.
pour beaucoup, on imaginerait une poule devant un couteau, t'as vu j'ai pas dit coinc :).............ha ben si, héhéhéhé

A partir du moment ou le problème est bien exposé, on a pratiquement la méthodologie pour réaliser un premier jet en ce basant sur des exemples de l'ide et en cherchant sur le net.

maintenant, comme tu le souligne, une interrogation est a se poser sur la méthode d'apprentissage, mais quand même le doute me vient quant a lacher des novices sans certaines bases.

J'ai deja fait les recherches sur internet, essayer des choses ...
nous n'avons aucune formation des professeurs a nous de nous débrouiller. En aucun cas je cherche que vous ne fassiez mes programmes mais me donner des pistes et le bon chemin a suivre. Je ne suis pas venu ici pour que vous fassiez le travail a ma place mais pour m'aider un peut.

que dois-je rajoutez aux variables qui sont déja ecritents dans un serial.print, pour les envoyer en xbee. (on envoi bien une variable avec un serial.print)

merci de votre aide et de votre comprehension

pas la peine de prendre la mouche :wink:
c'est une réflexion générale.

mais pour la troisième fois

infobarquee:

infobarquee:

Je sais envoyer une variable a partir d'un potentiometre mais la c'est pas du tout pareil.

bonjour,
donc tu sais envoyer plusieurs variables alors, ou est le soucis?
une piste comme ca :
mettre toutes les infos dans une seule variable avec un caractère de séparation comme un |
ca pourrait donner :
vitesse**|direction|humidité|** temp|pluie
10**|sw|95|25|**12

après tu recois la variable et tu la parse

a toi de trouver comment faire

Tu peux également t'inspirer de ça, c'est pas parfait car je ne suis pas un programmeur né mais ça fonctionne. Et j'avais utilisé des XBee:
http://forum.arduino.cc/index.php?topic=85469.msg677932#msg677932

Merci de vos réponses !

du coup j’ai écrit sa et j’ai rajouter les lignes suivantes:

#include “DHT.h”
#define uint unsigned int
#define ulong unsigned long
#define DHTPIN 11 // Digital 6
#define PIN_ANEMOMETER 9 // Digital 2
#define PIN_RAINGAUGE 10 // Digital 3
#define PIN_VANE 5 // Analog 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
// Combien de fois nous voulons calculer la vitesse ou la direction du vent
#define MSECS_CALC_WIND_SPEED 2000
#define MSECS_CALC_WIND_DIR 2000
#define MSECS_CALC_RAIN_FALL 2000
volatile int numRevsAnemometer = 0; // Incrémenté à l’interruption
volatile int numDropsRainGauge = 0; // Incrémenté à l’interruption
ulong nextCalcSpeed; // Quand nous avons ensuite calculé la vitesse du vent
ulong nextCalcDir; // Quand nous avons ensuite calculé la direction
ulong nextCalcRain; // Quand nous avons ensuite calculé la chute de pluie
ulong time; // Millis () à chaque début de boucle ().
#define NUMDIRS 8 // Lectures ADC:
ulong adc[NUMDIRS] = {26, 45, 77, 118, 161, 196, 220, 256};
// Ces directions correspondent à 1-for-1 avec les valeurs dans adc, mais // devra être ajusté comme indiqué ci-dessus. Modifiez ‘dirOffset’ // auquel la direction est ‘loin’ (c’est l’Ouest ici).
char *strVals[NUMDIRS] = {“W”,“NW”,“N”,“SW”,“NE”,“S”,“SE”,“E”};
byte dirOffset=0;
int humidi;
int temper;

// innitialisation
void setup() {
Serial.begin(9600);
pinMode(PIN_ANEMOMETER, INPUT);
digitalWrite(PIN_ANEMOMETER, HIGH);
digitalWrite(PIN_RAINGAUGE, HIGH);
attachInterrupt(0, countAnemometer, FALLING);
attachInterrupt(1, countRainGauge, FALLING);
nextCalcRain = millis() + MSECS_CALC_RAIN_FALL;
nextCalcSpeed = millis() + MSECS_CALC_WIND_SPEED;
nextCalcDir = millis() + MSECS_CALC_WIND_DIR;
dht.begin();
}
void loop() {
// lire la température el l’humidité tout les 250 milliseconds!
time = millis();
float h = dht.readHumidity();
float t = dht.readTemperature();
// Vérifier si les rendements sont valables si elles sont NaN (not a number) puis quelque chose s’est mal passé!
if (time >= nextCalcSpeed) {
calcWindSpeed();
nextCalcSpeed = time + MSECS_CALC_WIND_SPEED;
}
if (time >= nextCalcDir) {
calcWindDir();
nextCalcDir = time + MSECS_CALC_WIND_DIR;
}
if (time >= nextCalcRain) {
calcRainFall();
nextCalcRain = time + MSECS_CALC_RAIN_FALL;
}
if (isnan(t) || isnan(h)) {
Serial.println(“Failed to read from DHT”);
} else {
Serial.print(“Humidite: “);
Serial.print(h);
Serial.print(” %\t”);
Serial.print(“Temperature: “);
Serial.print(t);
Serial.println(” *C”);

humidi = analogRead(h);
** Serial.print(h);**
** delay(50);**
** temper = analogRead(t);**
** Serial.print(t);**
** delay(50);**

}
}
// Interrompre l’entraîneur pour l’anémomètre. Appelé chaque fois le roseau(l’anche)
// Commuter(changer) de détentes (une révolution).

void countAnemometer() {
numRevsAnemometer++;
}
// Interrompre l’entraîneur pour le pluviomètre. Appelé chaque fois le roseau(l’anche)
// Commuter(changer) de détentes (une baisse(goutte)).

void countRainGauge() {
numDropsRainGauge++;
}
// Trouver la direction des ailettes.
void calcWindDir() {
int val;
byte x, reading;
val = analogRead(PIN_VANE);
val >>=2;
reading = val;
// Regard(apparence) la lecture en haut dans table de directions. Trouvez la première valeur
// C’est > = à ce que nous sommes arrivés.
for (x=0; x<NUMDIRS; x++) {
if (adc >= reading)
break;}
x = (x + dirOffset) % 8; // Adjuster l’orientation
Serial.print(" Direction: ");
Serial.println(strVals);

** Serial.print(x);**
** delay(50);**

}
// Calculer la vitesse de vent et montrer(afficher-le) (ou enregistrer-le, indépendamment de ).
// 1 rev/seconde = 1.492 kms/h = 2.40114125 kms/h
void calcWindSpeed() {
int x, iSpeed;
// Ceci produira le km/h * 10
// (N’a pas fait calc de droit quand fait comme une déclaration)
long speed = 24011;
speed *= numRevsAnemometer;
speed /= MSECS_CALC_WIND_SPEED;
iSpeed = speed; // Avoir-en besoin pour formater ci-dessous
Serial.print("vitesse du vent: ");
x = iSpeed / 10;
Serial.print(x);
Serial.print(’.’);
x = iSpeed % 10;
Serial.print(x);
numRevsAnemometer = 0; // compteur remis à zéro

Serial.println(iSpeed);
** delay(50);**

}
// Calculer la pluie et montrer(afficher-le) (ou enregistrer-le, indépendamment de ).
// 1 seau = 0.2794 mm
void calcRainFall() {
int x, iVol;
// Ceci produira le mm * 10000 // (n’a pas fait calc de droit quand fait comme une déclaration)
long vol = 2794; // 0.2794 mm
vol *= numDropsRainGauge;
vol /= MSECS_CALC_RAIN_FALL;
iVol = vol; // Avoir-en besoin pour formater ci-dessous
Serial.print("pluie: ");
x = iVol / 10000;
Serial.print(x);
Serial.print(’.’);
x = iVol % 10000;
Serial.print(x);
Serial.println();
numDropsRainGauge = 0; // compteur remis à zéro

Serial.print(iVol);

}

et j’obtient dans le moniteur serie de la arduino receptrice :

http://hpics.li/c02a3a7

Donc je pence déja qu’il faut décomposer les 5 variables. Comment les diférencier ?
Savez vous pourquoi je recois des valeurs alors que les capteurs ne sont pas brancher(envoi de 0 normalement).

MERCI

va falloir répéter combien de fois?
ca s’appelle concaténer, cherche du coté de strcat, sans oublier de mettre à nul la variable à chaque boucle, sinon ca va s’ajouter

infobarquee:
pas la peine de prendre la mouche :wink:
c’est une réflexion générale.

mais pour la troisième fois

infobarquee:

infobarquee:

Je sais envoyer une variable a partir d’un potentiometre mais la c’est pas du tout pareil.

bonjour,
donc tu sais envoyer plusieurs variables alors, ou est le soucis?
une piste comme ca :
mettre toutes les infos dans une seule variable avec un caractère de séparation comme un |
ca pourrait donner :
vitesse**|direction|humidité|** temp|pluie
10**|sw|95|25|**12

après tu recois la variable et tu la parse

a toi de trouver comment faire

pour les valeurs, il y a toujours de la “résistance” entre les pins, fil dans le vide, etc…