Bonjour ! Comme beaucoup je suis en plein projet de fin d'étude, je suis en pleine réalisation d'un module de stationnement !!
Avant d'exposer ma question (qui m'a plutôt l'air bête..), j'vais plus ou moins exposer ce que j'ai déjà accompli (J'ai bien compris qu'on n'est pas à la pèche au solution ici :))
J'ai donc pour charge de réaliser un module de stationnement alimenté par batterie, et qui envoie les données récolté par Liaison HF dans un délai de 30 minutes.
Pour la partie capteur j'ai utilisé un capteur Ultrason, qui me paraissait être le plus fiable et aussi une grande solution de facilité, en effet dans l'utilisation cela marche, mais ça me complique pas mal au niveau du code!!
digitalWrite(TRIGPIN, LOW); // Set the trigger pin to low for 2uS
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH); // Send a 10uS high to trigger ranging
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW); // Send pin low again
int distance = pulseIn(ECHOPIN, HIGH,26000); // Read in times pulse
distance = distance/58;
delay(2000);// Wait 50mS before next ranging
if ((distance>3) && (distance<25)) {
Serial.println("place occupé");
uint8_t data[] = "Place1 occupé";
rf95.send(data, sizeof(data));
rf95.waitPacketSent();
}
else {
Serial.println("place libre");
uint8_t data[] = "Place1 libre";
rf95.send(data, sizeof(data));
rf95.waitPacketSent();
}
}
J'use donc de chaîne de caractère, puis envoie une autre chaîne de caractère similaire par Liaison HF. Cependant, je ne peux légalement envoyé de donnée par RF dans un délais qui est en dessous de 15 minutes, et il me paraîtrait insensé d'envoyé une seule mesure tout les 30 minutes..
J'aimerai donc savoir si c'était possible en langage C de "stocker" temporairement les quelque 8/10 mesures captée durant la demi heure, envoyé le tout, clear la variable et rebelote..
C'est possible, il suffit d'utiliser un tableau et une variable qui compte les données stockées. Tu la remets à zéro lorsque tu veux réinitialiser. Pas besoin d'effacer le tableau, tu recommences à stocker au début du tableau
Je ne sais même pas a vrai dire si j'utilise les bons termes..
Je souhaiterai maintenant être capable de pouvoir envoyé un ensemble de donnée toute les 30 minutes, comme deja expliqué, en 30 minutes mon capteur aura le temps d'afficher 10 "1" ou "0" sur le moniteur serie, sauf que j'aimerai envoyé ces 10 valeurs en même temps par liaison HF et recommencer le processus avec 10 autres mesure sur 30minutes et ainsi de suite..
Tu utilises 'rf95' : c'est du LoRa ?
Moi je ne connais pas LoRa, dans ce cas, je ne peux pas t'aider.
Si d'autres le peuvent, il faut que tu donnes tous les détails, on ne peut pas les deviner !!!
La solution la plus simple à mon avis, puisque ton message sera une suite de 1 et de 0, serait de construire un chiffre en binaire qui assemble ces 1 et ces 0 et d'envoyer ce nombre en une fois. Le récepteur n'aurait plus qu'à décoder les 1 et les 0 pour connaitre l'ensemble du message.
Si c'est le cas, tu peux te renseigner sur le commande "<<" qui permet de décaler un ensemble de bits vers la gauche (en binaire ça correspond à une multiplication par 2).
Tu peux l'utiliser pour créer ton message binaire. Supposons que tu veuilles envoyer 5 valeurs, dans l'ordre 0 1 1 0 1. Ça te donnerait le message 01101 soit 13 en décimal.
On le stocke dans la variable M (comme message), qui est initialisée à 0.
1ère étape : M = M + 0 (la première valeur)
2ème étape : M = (M<<1)+1 -- ça donne M = 1
3ème étape : M = (M<<1)+1 -- ça donne M = 3
4ème étape : M = (M<<1)+0 -- ça donne M = 6
5ème étape : M = (M<<1)+1 -- ça donne M = 13
Tu envoies le chiffre 13 et tu le décodes de la façon inverse, par exemple avec l'opérateur % (modulo).
Note que ton message peut monter jusqu'à la valeur 2^11-1 (c'est 10 fois le chiffre 1) soit 2047, ça rentre dans un int mais pas dans un byte (pour la déclaration de la variable M).
Ca me parait être une solution évidente, mais pas vraiment copain avec mon cahier des charges, lors de la reception, ce sont des variable claire et horodaté qui doivent être affiché..
Noflex:
ce sont des variable claire et horodaté qui doivent être affiché..
Il y a une différence entre affichage et communication. Si tu reçois ton mot de 10 bits, dont chaque bit correspond à une mesure de distance toutes les 30 minutes (je crois comprendre que tu utilises un capteur ultrasons orienté vers le haut, si une voiture est stationnée, le capteur la détecte, et si la mesure donne une hauteur trop élevée ou pas de mesure du tout c'est que la place est libre : correct ?), lorsque tu décodes ton mot bit par bit, tu peux afficher un message comme :
heure = heure_actuelle - 30 * 3600 * place_du_bit; // calcul de l'heure correspondant à la mesure traitée
if (bit == 0) {
Serial.print ("Place libre à ");
Serial.println (heure);
}
else
{
Serial.print ("Place occupée à ");
Serial.println (heure);
}
Bien sûr, il faudrait calculer et afficher l'heure convenablement, ce n'est qu'un exemple.
Il suffit d'écrire ce que j'ai mis dans la réponse #11, dans une boucle.
Tu stokes tes 10 bits dans un tableau, une mesure toutes les 30 minutes, à la fin des 10 mesures, tu fais une boucle qui fais ce que j'ai dis dans le message #11 pour créer la variable à envoyer