En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies pour vous proposer des contenus et services adaptés. Mentions légales.
Vous êtes ici :   Accueil » Tranferer et Parser
 
Prévisualiser...  Imprimer...  Imprimer la page...
Prévisualiser...  Imprimer...  Imprimer la section...

Rubriques

Rencontres (SM)

Mike James's

De jolis Modèles à voir sur ce site

 ↑  

Astuces (SM)

 ↑  

Mon Materiel

 ↑  

HMS TRENCHANT

 ↑  

Le U73

 ↑  

S100 SchnellBoot

 ↑  

La JOCELYNE

 ↑  

Le MOLCH

 ↑  

Réseaux sociaux

Tranferer et Parser

rss Cet article est disponible en format standard RSS pour publication sur votre site web :
https://www.papy94.fr/Site/data/fr-articles.xml

Transferer et Parser des données Arduino

2 Arduino NANO en série

06/2013

Le branchement

platine_08.jpg



3 câbles suffiront

  • 1 entre les masses de chaque carte  (carte 1 et carte 2)
  • 1 entre le TX de la carte 1 et le RX de carte 2
  • 1 entre le RX de la carte 1 et le TX de carte 2

Donc voici les codes que j'utilise pour avec ma 2ieme carte Arduino NANO

Les données que je veux recevoir sont:
_le numéro d'alarm
_le niveau (angle de mon soum)
_la profondeur du soum
_la temperature interne
_la tension batterie

c'est le numéro d’alarme reçu qui fait réagir ma 2ieme carte Arduino NANO
Alarm = 0 : RAS -> LedVerte();
Alarm = 1 : Periscope Haut -> LedVerte();
Alarm = 2 : Periscope Bas -> LedVerte();
Alarm = 3 : Accelerometre -> LedBleu();
Alarm = 4 : Profondeur Maxi -> Vidange(); LedBleu();
Alarm = 5 : Temperature -> Arret(); Vidange(); Remonte(); LedRouge();
Alarm = 6 : Batterie Faible -> Arret(); Vidange(); Remonte(); LedRouge();
Alarm = 7 : Perte de signal radio -> Arret(); Vidange(); Remonte(); LedRouge();
Alarm = 8 : Eau dans compartiment -> Arret(); Vidange(); Remonte(); LedRouge();

les autres paramètres seront simplement envoyés sur la carte SD, pour analyse

Sur ma 1ere carte Arduino NANO
mes variables sont déclarées comme ça:

int Alarm = 0;// variable pour Numero d alarm
int Val_X = 0;// variable pour angle X accelerometre 3 axes MMA7361 (sorties analogiques)
int Pression_Relative;// Difference de Pression entre la Surface et la Pression lut
float Tension = 0;//variable tension batterie

et j’envoie comme ça:

  Serial.print("<");
  Serial.print(Alarm);Serial.print(";");
  Serial.print(Val_X - Ang_Milieu);Serial.print(";");
  Serial.print(Pression_Relative);Serial.print(";");
  Serial.print((bmp.readTemperature()*100),0);Serial.print(";");
  Serial.print((Tension*100),0);
  Serial.print(">");
  Serial.println();

Pour la pression relative et le bmp.readTemperature,je multiplie par 100, pour envoyer un chiffre sans virgule
la trame envoyée ressemble donc a ceci : <1;-3;16;2294;531>
'<' = le début de la trame
'>' = la fin de la trame
';' = délimiteur des données


Sur ma 2ieme carte Arduino NANO

/*carte Nano RECEPTRICE
 arduino v1.0.1

 donnees (trame) recus : <1;-3;16;2294;531>
 '<' = le debut de la trame
 '>' = la fin de la trame
 ';' = delimitateur des donnees
*/

//----------
String Trame;              // Chaine pour contenir la Trame entrante
boolean TrameRecu = false; // si la Trame a ete recue dans son integralité
int NbrData = 4;           // Nombre de donnes qui seront recus   exemple: 5 valeurs : 1;-3;16;2294;531

//========================
void loop() {
  handleCommand();



} //FIN LOOP
//=======================


//************************* routines
void serialEvent(){
  while (Serial.available()) {// si recois des donnes
    char incomingByte = (char)Serial.read();
    if (incomingByte == '>') { // Fin de la Trame
       TrameRecu = true;
       return;
    }else if (incomingByte == '<'){ // Debut d une nouvelle Trame
       Trame = "";
       TrameRecu = false;
       return;
    }else{
      Trame += incomingByte;
      return;
    }
  }
}

void handleCommand() {
  if (!TrameRecu) return; // aucune Trame a parser
  int data[NbrData];     // un maximum de 5 nombres entiers de donnees
  char cmd[Trame.length()+1];
  Trame.toCharArray(cmd, Trame.length()+1);
  char *token = strtok(cmd, ";");

  for (int i = 0; i < NbrData+1; i++) { // mettre datas dans tableau
    if (token) {
      data[i] = atoi(token);
      token = strtok(NULL, ";");
    }
 }
//---Pour verif sur monitor de ce qui a ete recu
  Serial.print("data[0] = ");Serial.println(data[0]);
  Serial.print("data[1] = ");Serial.println(data[1]);
  Serial.print("data[2] = ");Serial.println(data[2]);
  Serial.print("data[3] = ");Serial.print(data[3]/100);Serial.print(".");Serial.println(data[3]%100);
  Serial.print("data[4] = ");Serial.print(data[4]/100);Serial.print(".");Serial.println(data[4]%100);
  TrameRecu = false;// Drapeau pour dire que nous avons traite la commande
 }
//************************Fin routines

data[de 0 à 4] contient mes 5 données 1 -3 16 22.94 5.31
pour data[3 et 4],Je divise par 100, pour remettre la virgule

J'ai extrais le code de mon programme principal pour simplifier la compréhension, je ne pense pas avoir oublié de lignes, je n'ai pas testé ce programme court,mais cela fonctionne très bien avec le programme principal

bien sur , il y a surement une meilleur façon d’écrire ce code,mais cela fonctionne et cela me suffit


Date de création : 14/06/2013 @ 10h45
Page lue 13441 fois

Traduction

Recherche

Recherche

Préférences


Se reconnecter :
Votre nom (ou pseudo) :
Votre mot de passe
<O>


  627315 visiteurs
  29 visiteurs en ligne

  Nombre de membres 115 membres
Connectés :
( personne )
Snif !!!

Cela peut servir

 ↑  

Calendrier

Lien constructions

Il faut ètre inscrit sur les forums
_ Buildingreport of my type VIIC scale 1:35 Forum RCgroups
_ My 1/32 VIIC Forum RCgroups
_ graupner Shark conversion Forum RCgroups
_ Engel Gato anyone building Forum RCgroups
_ VII-C/41 REVELL au 1/72ém Forum La royale
_ VII-C/41 REVELL au 1/72ém Forum subsim

 ↑  

Annonce

Archives Nouvelles


+ Année 2017
 -  Année 2017
+ Année 2015
 -  Année 2015
+ Année 2014
 -  Année 2014
+ Année 2013
 -  Année 2013
+ Année 2012
 -  Année 2012
+ Année 2011
 -  Année 2011
+ Année 2010
 -  Année 2010
+ Année 2009
 -  Année 2009
Vous êtes ici :   Accueil » Tranferer et Parser