Auteur Sujet: Bus CAN et Décimal  (Lu 2655 fois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1565
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #15 le: avril 27, 2020, 02:31:00 pm »
Et bien il faut mettre des identifiants différents selon le capteur.

C'est l'objet du prochain article.
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 2105
  • 100% Arduino et N
    • Voir le profil
Re : Re : Bus CAN et Décimal
« Réponse #16 le: avril 27, 2020, 07:39:27 pm »
Ah oui, une question :
comment pour ajouter plusieurs mesures de capteur, plusieurs sondes ???

 8)
Bah, il faut faire plusieurs messages ou combiner plusieurs mesures dans les 8 octets d'un message (la 1ère solution est préférable, le Can est rapide et ne perd rien.

Ah, Jean-Luc a déjà répondu avant moi...
« Modifié: avril 27, 2020, 07:40:58 pm par Dominique »
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1565
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #17 le: avril 28, 2020, 09:48:33 am »
Bonjour,

Pierre a fait une release (version 2.0.4). Exit l'union, il suffit maintenant d'écrire :

Côté émetteur :

message.dataFloat[0] = val;
controleurCAN.tryToSend(message);

Côté récepteur :

if (controleurCAN.receive(message)) {
  float val = message.dataFloat[0];
  ...
}
Cordialement

JeeLet

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #18 le: avril 28, 2020, 03:29:02 pm »
Jean-Luc Bonjour

...release (version 2.0.4) , mis a jour biblio de l'IDE et modification comme dit.

Impeccable, les croquis on encore Rétréci, cela devient inquiétant  :P  :)

donc je passe les codes Arduino en version 2, avec la modif du float et ajout d'un capteur DHT22 (temp/humidité)
( les version 1 reste pour les nouveaux arrivant ??)

Emi_dht_ACAN2515_v2.ino

/*
 * Locoduino: 1er mai 2020
 * https://www.locoduino.org/spip.php?article268
 *
 * Envoi et Réception de valeur numerique a deux digit apres la virgule
 * (valeur positif ou négatif)
 *
 * sur une base de Locoduino (JL) et bricol par JeeLet
 *
 * - librarie ACAN2515 ver.2.0.4  de pierre Molinaro https://github.com/pierremolinaro/acan2517
 * - librarie "dhtnew.h" Ver:0.1.5 de Rob Tillaart's
 *
 * -X- compil des exemples 1 et 2 (partie eraser)
 * -X- Ajout partie float "virgule" et valeur négatif
 * -X- ajout capteur DHT22 (température-humidité)
 * -X- ver. 2.0.4 de ACAN2515 (ajout float) et croquis V1 en V2
 * -o- gestion des ID can pour multi capteurs (quatres ?)
 * -o-
 */
// ------------- Debut Pgm Emission ----------------

 // ----- inclusion des bibliothèques -------------
   #include <ACAN2515Settings.h>      // les reglages
   #include <ACAN2515.h>              // le controleur
   #include <CANMessage.h>            // les messages
   #include <dhtnew.h>                // Capteur temp/humi

// ------ config des E/S -----------
   static const uint8_t MCP2515_CS  = 10;  // pin SPI_CS
   static const uint8_t MCP2515_INT = 2;   // pin interruption

   DHTNEW dht1  (5);      // pin capteur DHT22   

// ------- les déclarations ----------
// objet de type ACAN2515 est instancié pour gérer le MCP2515
 
   ACAN2515 CAN(MCP2515_CS, SPI, MCP2515_INT); //pin CS,SPI ,pin INT.
   static const uint32_t FREQUENCE_DU_QUARTZ = 8000000; // quartz du MCP2515 en hertz
   static const uint32_t FRENQUENCE_DU_BUS_CAN = 125000;  // fréquence du bus CAN

   CANMessage message;    // objets pour les messages CAN en emission.

//  ----------------- capteur1 DHT22 -----------
    float t1 = 0.0;     // température
    float h1 = 0.0;     // humidité
       
    static uint32_t milliEnvoi = 0;         // Tempo d’envoi CAN
       
// -------------- Setup --------------
  void setup()  {
  Serial.begin(9600);           // com série
  SPI.begin();                  // bus SPI
  dht1.read();            // lecture capteurs 
 
  Serial.println("Configuration du MCP2515");
  ACAN2515Settings configuration(FREQUENCE_DU_QUARTZ, FRENQUENCE_DU_BUS_CAN);
 
// ----  Demarrage et control d'erreur du CAN ----
  const uint32_t codeErreur = CAN.begin(configuration, [] { CAN.isr(); });
   
    if (codeErreur == 0)   
      {
      Serial.println("Configuration ok");
      }
    else
      {
      Serial.println("Probleme de connexion");
      while (1);
      }
     
    message.len = 4;      //message avec 4 octets de donnee
 }
 
//------------ Loop --------------
  void loop()
 {
  uint16_t milliEncour = millis();
    if (milliEncour - milliEnvoi >= 6000)  //envoi toutes les 2 secondes
    {
// ------------- partie capteur ----------------     
  capteur();              //apl sous pgm du capteur
  h1 = dht1.humidity ;    //humidite 1
  t1 = dht1.temperature;  //Temperature 1
           
// ------------- partie CAN ----------------   

    message.dataFloat[0] = t1;    // valeur float du capteur
    CAN.tryToSend(message);       // envoi CAN
   
      Serial.print(t1);
      Serial.print(" Temp --Emi--> ");
      Serial.println(message.data32[0]);

      Serial.print(h1);
      Serial.print(" hum --Emi--> ");
      Serial.println(message.data32[0]);
   
      milliEnvoi = milliEncour;     // reset tempo
     }
  }

              // ------ control Capteurs ------
 void capteur()
  {
   int chk = dht1.read();
    switch (chk)
    {
    case DHTLIB_OK:
      Serial.println("DHT22 OK,\t");
      break;
    case DHTLIB_ERROR_CHECKSUM:
      Serial.println("Checksum error,\t");
      break;
    case DHTLIB_ERROR_TIMEOUT:
      Serial.println("Time out error,\t");
      break;
    default:
      Serial.println("Unknown error,\t");
      break;
    }
        // ----- fin sous pgm ------------   
 }
 
// ----------- Fin du pgm ------------------


Rec_dht_ACAN2515_v2.ino

/*
 * Locoduino: 1er mai 2020
 * https://www.locoduino.org/spip.php?article268
 *
 * Envoi et Réception de valeur numerique a deux digit apres la virgule
 * (valeur positif ou négatif)
 *
 * sur une base de Locoduino (JL) et bricol par JeeLet
 *
 * - librarie  ACAN2515 ver.2.0.4  de pierre Molinaro https://github.com/pierremolinaro/acan2517
 * - librarie "dhtnew.h" Ver:0.1.5 de Rob Tillaart's
 *
 * -X- compil des exemples 1 et 2 (partie eraser)
 * -X- Ajout partie float "virgule" et valeur négatif
 * -X- ajout DHT22 (température-humidité) en Emission
 * -X- ver. 2.0.4 de ACAN2515 ( ajout float) et croquis V1 en V2
 * -o- gestion des ID can pour multi capteurs (quatres ?)
 * -o-
 */
// ------------- Debut Pgm Reception ----------------

 // ----- inclusion des bibliothèques -------------
   #include <ACAN2515Settings.h>       // les reglages
   #include <ACAN2515.h>               // le controleur
   #include <CANMessage.h>             // les messages

// ------ config des E/S -----------
   static const uint8_t MCP2515_CS  = 10;  // pin SPI_CS
   static const uint8_t MCP2515_INT = 2;   // pin interruption

// ------- les déclarations ----------
// objet de type ACAN2515 est instancié pour gérer le MCP2515
 
   ACAN2515 CAN(MCP2515_CS, SPI, MCP2515_INT); //pin CS,SPI ,pin INT.
   static const uint32_t FREQUENCE_DU_QUARTZ = 8000000; // quartz du MCP2515 en hertz
   static const uint32_t FRENQUENCE_DU_BUS_CAN = 125000;  // fréquence du bus CAN

    CANMessage message;     // objets pour les messages CAN
   
// -------------- Setup --------------
  void setup()  {
  Serial.begin(9600);           // com série
  SPI.begin();                  // bus SPI
 
  Serial.println("Configuration du MCP2515");
  ACAN2515Settings configuration(FREQUENCE_DU_QUARTZ, FRENQUENCE_DU_BUS_CAN);
 
// ----  Demarrage et control d'erreur du CAN ----
  const uint32_t codeErreur = CAN.begin(configuration, [] { CAN.isr(); });
   
  if (codeErreur == 0) 
    {
    Serial.println("configuration ok");
    }
  else
    {
    Serial.println("Probleme de connexion");
    while (1);
    }
 }

//------------ Loop --------------
  void loop()
 {
   if (CAN.receive(message))  // signal arrive message CAN
    {
    float val1 = message.dataFloat[0];
    Serial.print(" --Rec--> ");
    Serial.println(val1); 
    }
 }
// -------------- fin Pgm -------------------

Jean-Luc Merci
« Modifié: avril 28, 2020, 04:32:05 pm par JeeLet »

JeeLet

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #19 le: mai 06, 2020, 09:01:29 pm »

Bonsoir

donc la version 3 du croquis, version final  :D
( j'ai aucun mérite,  le coupable c Jean-luc )


Emi_ACAN2515_light.ino

/*     
 * Locoduino: 1er mai 2020
 * https://www.locoduino.org/spip.php?article268
 *
 * Envoi et Réception de valeur numerique a deux digit apres la virgule
 * (valeur positif ou négatif)
 *
 * sur une base de Locoduino (JL) et bricol par JeeLet
 *
 *    Libraries:
 * - ACAN2515 ver.2.0.4 de pierre Molinaro
 * - DHTNEW Ver:0.1.5 de Rob Tillaart's
 *
 *    Mofication:
 * -X- ver. 2.0.4 de ACAN2515 (ajout valeur float)
 * -X- Gestion des ID can pour multi capteurs (merci JL)
 * -X- Mis a plat de la terminologie, Groupes Eléments 
 * -X- un version  LIGHT de la V3
 * -o-
 * 
 */
// ------------- V3 Light -- Envoi Msg CAN ----------------

 /* ----- inclusion des bibliothèques -------------*/
   #include <ACANBuffer16.h>          /* les buffers */
   #include <ACANBuffer.h>
   #include <ACAN2515Settings.h>      /* les reglages */
   #include <ACAN2515.h>              /* le controleur */
   #include <CANMessage.h>            /* les messages */
   

  /*  Module CAN MCP2515 */
   static const uint8_t MCP2515_CS  = 10;  /* pin SPI_CS */
   static const uint8_t MCP2515_INT = 2;   /* pin d'interruption */
   
    /* objet de type ACAN2515 est instancié pour gérer le MCP2515  */
    ACAN2515 CAN(MCP2515_CS, SPI, MCP2515_INT); /* pin CS,SPI et INT */
   static const uint32_t FREQUENCE_DU_QUARTZ = 8ul * 1000ul * 1000ul; /*quartz du MCP2515*/
   static const uint32_t FREQUENCE_DU_BUS_CAN = 125ul * 1000ul;  /*fréquence du bus*/
   /* avec un Maximum de 512kb/s pour un quartz à 8MHz */

   CANMessage messageCANdht;    /* objets CAN pour les messages en emission */
 
    /*  CAN : numero des (éléments) capteurs pour les messages  */
  const uint16_t CAPTEUR1 = 10; /* le DHT22 1 */
  const uint16_t CAPTEUR2 = 11; /* le n° 2 */
  const uint16_t CAPTEUR3 = 12; /* le n° X */

    /*  Nbr de Bits pour les poids fort et faible  */
  const uint16_t NBBITS_TYPE_MESSAGE = 6;   /* Groupe */
  const uint16_t NBBITS_ID_CAPTEUR = 5;     /* Element */

  const uint16_t MESSAGE_GROUPE = 4;  /*type de message (le Groupe 7,la clim)*/

  const uint16_t MASK = MESSAGE_GROUPE << NBBITS_ID_CAPTEUR;

  const uint16_t ID_1 = (MESSAGE_GROUPE << NBBITS_ID_CAPTEUR) | CAPTEUR1;
  const uint16_t ID_2 = (MESSAGE_GROUPE << NBBITS_ID_CAPTEUR) | CAPTEUR2;
  const uint16_t ID_3 = (MESSAGE_GROUPE << NBBITS_ID_CAPTEUR) | CAPTEUR3;

       /*  partie capteur virtuel  */     
    float t1 = 11.11 ;  // pour test
    float h1 = 51.11 ;
 
    float t2 = 22.22 ;  // pour test
    float h2 = 52.22 ;

    float t3 = 33.33 ;  // pour test
    float h3 = 63.33 ;
 
    float t4 = 44.44 ;  // pour test
    float h4 = 64.44 ;
       
    static uint32_t milliEnvoi = 0;   /* Tempo des messages CAN */

  void setup()  {     // -------------- Setup -------
  Serial.begin(9600);   /* com série */
  SPI.begin();          /* start du bus SPI */
 
  Serial.println("Configuration du MCP2515");
  /* création de l'objet ACAN2515Settings */
  ACAN2515Settings reglages(FREQUENCE_DU_QUARTZ, FREQUENCE_DU_BUS_CAN);
  /* objet nommer "reglages" dans l'exemple */

  reglages.mReceiveBufferSize = 0;    /*Nbr d'emplacement buffer*/
  reglages.mTransmitBuffer0Size = 3;  /*File d'attente d'emission*/
 
  /* Demarrage et control d'erreur du CAN */
  const uint16_t codeErreur = CAN.begin(reglages, [] { CAN.isr(); });
    if (codeErreur == 0) {
      Serial.println("Configuration ok"); }
    else {
      Serial.println("Probleme de connexion");
    while (1);
    }
     
  /* longueur des messages CAN */
  messageCANdht.len = 8; /*8 octets pour les 2 float (temp-humid)*/
  }

  void loop() //------------partie Loop --------------
 {
  uint16_t milliEncour = millis();          /* Tempo d'envoi ..*/
    if (milliEncour - milliEnvoi >= 4000)   /*..toutes les 4 secondes */
   
    { /* debut envoie des messages CAN  */
   messageCANdht.id = ID_1;     /*Numéro d'intentifiant*/
   messageCANdht.dataFloat[0] = t1;
   messageCANdht.dataFloat[1] = h1;
    if (CAN.tryToSend(messageCANdht)) {
    Serial.print(messageCANdht.id,HEX);
    Serial.print("  :Msg1 envoye:  ");
    Serial.println(messageCANdht.id,BIN);
    }
 
   messageCANdht.id = ID_2;
   messageCANdht.dataFloat[0] = t2;
   messageCANdht.dataFloat[1] = h2;
    if (CAN.tryToSend(messageCANdht)) {
    Serial.print(messageCANdht.id,HEX);
    Serial.print("  :Msg2 envoye:  ");
    Serial.println(messageCANdht.id,BIN);
    }
   
   messageCANdht.id = ID_3;     
   messageCANdht.dataFloat[0] = t3;
   messageCANdht.dataFloat[1] = h3;
    if (CAN.tryToSend(messageCANdht)) {
    Serial.print(messageCANdht.id,HEX);
    Serial.print("  :Msg3 envoye:  ");
    Serial.println(messageCANdht.id,BIN);
   
    Serial.println(" --------N° masque------");
    Serial.print(MASK,HEX);
    Serial.print("   ");
    Serial.println(MASK,BIN);
    Serial.println(" -----------------------");
    }
    /*
   messageCANdht.id = ID_4;
   messageCANdht.dataFloat[0] = t4;
   messageCANdht.dataFloat[1] = h4;
    if (CAN.tryToSend(messageCANdht)) {
    Serial.println("message 4 envoye");
    }
*/
  milliEnvoi = milliEncour;     /* reset de la tempo */
     }
  }
// ----------- Fin du pgm ------------------


Rec_ACAN2515_light.ino


/*     
 * Locoduino: 1er mai 2020
 * https://www.locoduino.org/spip.php?article268
 *
 * Envoi et Réception de valeur numerique a deux digit apres la virgule
 * (valeur positif ou négatif)
 *
 * sur une base de Locoduino (JL) et bricol par JeeLet
 *
 *    Libraries:
 * - ACAN2515 ver.2.0.4 de pierre Molinaro
 * - DHTNEW Ver:0.1.5 de Rob Tillaart's
 *
 *    Mofication:
 * -X- ver. 2.0.4 de ACAN2515 (ajout valeur float)
 * -X- Gestion des ID can pour multi capteurs (merci JL)
 * -X- Mis a plat de la terminologie, Groupes Eléments 
 * -X- un version  LIGHT de la V3
 * -o-
 * 
 */
// ------------- V3 Light -- Reception Msg CAN ----------------

 /* ----- inclusion des bibliothèques -------------*/
   #include <ACANBuffer16.h>           /* les buffers */
   #include <ACANBuffer.h>
   #include <ACAN2515Settings.h>       /* les reglages */
   #include <ACAN2515.h>               /* le controleur*/
   #include <CANMessage.h>             /* les messages */
 
  float  T1;  float   H1;  /*capteur 1 */
  float  T2;  float   H2;  /*capteur 2 */
  float  T3;  float   H3;  /*capteur 3 */


  /*  Module CAN MCP2515 */
   static const uint8_t MCP2515_CS  = 10;  /* pin SPI_CS */
   static const uint8_t MCP2515_INT = 2;   /* pin interruption */

    /* objet de type ACAN2515 est instancié pour gérer le MCP2515  */
   ACAN2515 CAN(MCP2515_CS, SPI, MCP2515_INT); /* pin CS,SPI ,pin INT */
   static const uint32_t FREQUENCE_DU_QUARTZ = 8ul * 1000ul * 1000ul; /*quartz du MCP2515*/
   static const uint32_t FREQUENCE_DU_BUS_CAN = 125ul * 1000ul;  /*fréquence du bus*/

   CANMessage message;     /* objets CAN pour les messages en réception */
 
   void receive1 (const CANMessage & message) 
  { /* ---- classement des messages CAN ----*/
    {
    const uint16_t capteurs = message.id & 0x8A; /* adresse capteur */
    Serial.print("numero capteurs: ");
    Serial.print(capteurs);
    T1 = message.dataFloat[0];
    H1 = message.dataFloat[1];
    }
   
    {
    const uint16_t capteurs = message.id & 0x8B;
    Serial.print(" : ");
    Serial.print(capteurs);
    T2 = message.dataFloat[0];
    H2 = message.dataFloat[1];
    }
 
    {
    const uint16_t capteurs = message.id & 0x8C;
    Serial.print(" : ");
    Serial.println(capteurs);
    T3 = message.dataFloat[0];
    H3 = message.dataFloat[1];
    }
  }
 
// ----- défini masques et filtres pour les messages  ------
  const ACAN2515Mask masque = standard2515Mask( 0, 0, 0);
  const ACAN2515AcceptanceFilter filtres[] =  { 
   { standard2515Filter( 0, 0, 0), receive1 }
    };
                 
  void setup()   /*--------- Setup --------------*/
  {
  Serial.begin(9600);           /* com série */
  SPI.begin();                  /* bus SPI */
 
  Serial.println("Configuration du MCP2515");
  ACAN2515Settings reglages(FREQUENCE_DU_QUARTZ, FREQUENCE_DU_BUS_CAN);

  reglages.mReceiveBufferSize = 4;      /* nbr d'emplacement buffer*/
  reglages.mTransmitBuffer0Size = 0;    /* file d'attente d'emission*/
 
  /* Demarrage et control d'erreur du CAN */
  const uint16_t codeErreur = CAN.begin(reglages,[] {CAN.isr(); }, masque, filtres, 1 );
     
  if (codeErreur == 0) {
    Serial.println("configuration ok"); }
    else {
    Serial.println("Probleme de connexion");
    while (1);
    }
  }
   
  void loop()  /* ------------ Loop ---------*/
  { 
  CAN.dispatchReceivedMessage();
 
  Serial.print(T1);
  Serial.print( " <--T1 --A-- H1--> ");
  Serial.println(H1);
 
  Serial.print(T2);
  Serial.print( " <--T2 --B-- H2--> ");
  Serial.println(H2);
 
  Serial.print(T3);
  Serial.print( " <--T3 --C-- H3--> ");
  Serial.println(H3);
  delay(2000); // pose de Delay et Serial.print pour test
  }
// -------------- fin Pgm -------------------


Re-Edit : modif du post, croquis en version Light

     
« Modifié: mai 14, 2020, 11:03:50 am par JeeLet »

JeeLet

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #20 le: mai 14, 2020, 11:29:09 am »
Bonjour

Modif des croquis du dessus, alléger pour plus de clarté
  (valeurs des capteurs température virtuel )
il me reste la partie masque et filtre ou toujours rien ne fonctionnent

le détail :

Partie Émission :
/*  CAN : numero des (éléments) capteurs pour les messages  */
  const uint16_t CAPTEUR1 = 10; /* le Capteur */
  .....

    /*  Nbr de Bits pour les poids fort et faible  */
  const uint16_t NBBITS_TYPE_MESSAGE = 6;   /* Groupe */
  const uint16_t NBBITS_ID_CAPTEUR = 5;     /* Element */

  const uint16_t MESSAGE_GROUPE = 4;  /*type de message (le Groupe 7,la clim)*/
  const uint16_t MASK = MESSAGE_GROUPE << NBBITS_ID_CAPTEUR;

  const uint16_t ID_1 = (MESSAGE_GROUPE << NBBITS_ID_CAPTEUR) | CAPTEUR1;
  ....

                 --------------------------
me donne sur le terminal
---------------------------
80   10000000  le masque  "MASK"
 ---------------------------
8A  :Msg1 envoye:  10001010  et les capteurs
8B  :Msg2 envoye:  10001011
8C  :Msg3 envoye:  10001100
                    -----------------------------

Pour la partie Réception:
...
const uint16_t capteurs = message.id & 0x8A;   le   capteur 1
const uint16_t capteurs = message.id & 0x8B;    2
const uint16_t capteurs = message.id & 0x8C;   3
...
et
..
  const ACAN2515Mask masque = standard2515Mask( 0, 0, 0);
  const ACAN2515AcceptanceFilter filtres[] =  { 
   { standard2515Filter( 0, 0, 0), receive1 }
.../
(masque mis à Zéro)

         ------------------------------
Visu sur le terminal des valeurs:
numero capteurs: 138 : 138 : 136
11.11 <--T1 --A-- H1--> 51.11
11.11 <--T2 --B-- H2--> 51.11
11.11 <--T3 --C-- H3--> 51.11
numero capteurs: 138 : 139 : 136
22.22 <--T1 --A-- H1--> 52.22
22.22 <--T2 --B-- H2--> 52.22
22.22 <--T3 --C-- H3--> 52.22
               ----------------------
c'est le fouillis  8)  :'(

Question:  quelles valeur Hexa a Changer / Ajouter ?????

j'ai tester toutes les combinaison possible depuis 3 jours, et rien de rien de valable
même crée un pdf sur la question  ;)

Voili Voila

merci

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1565
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #21 le: mai 14, 2020, 11:51:08 am »
Bonjour,

En réception, je ne comprends rien à ce que tu essayes de faire.

Quel est le sens de :

    const uint16_t capteurs = message.id & 0x8A; /* adresse capteur */

?

message.id c'est l'identifiant du message. Normalement le numéro du capteur étant dans les 5 bits de poids faible, il faut l'isoler en faisant :

    const uint16_t capteur = message.id & 0x1F;

Et c'est tout

Je ne comprends pas la triplication du code de réception. Pour « classer les message » il faudrait au moins faire des test !  :)
Cordialement

JeeLet

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #22 le: mai 14, 2020, 12:09:54 pm »
...... "faire des test !"

bonjour Jean-Luc

mais les Test c Ok

un exemple de recopie du terminal

la c'est modifiant les Numéro des Groupes :
pour Nbits Msg :6 / Nbits Capt:5
           Msg Groupe:
  0   0                  0
 20   100000         1
 40   1000000         2
 60   1100000         3
 80   10000000         4
 A0   10100000         5   
 C0   11000000         6   
 E0   11100000         7
100   100000000      8

la c les numéro des capteurs:
B5  :Msg1 envoye:  10110101   21
B6  :Msg2 envoye:  10110110   22
B7  :Msg3 envoye:  10110111   23

et des valeurs mis en Hexa coter réception

Rein ni fait, je cale et il me manque une cale 

 :-X





Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1565
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #23 le: mai 14, 2020, 12:23:48 pm »
Je ne parle pas de faire des tests du logiciel

Je parle de tester l'identifiant du message reçu pour savoir de quel message il s'agit !

switch (message.id & 0x1F) {
  case CAPTEUR1: ...
    break;
  case CAPTEUR2: ...
    break;

...

Tu devrais aller lire https://www.locoduino.org/spip.php?article70 parce que là il te manque pas mal de bases
« Modifié: mai 14, 2020, 12:27:00 pm par Jean-Luc »
Cordialement

JeeLet

  • Newbie
  • *
  • Messages: 18
    • Voir le profil
Re : Bus CAN et Décimal
« Réponse #24 le: mai 14, 2020, 12:49:05 pm »
... "là il te manque pas mal de bases"

 :)  Oui je commence dans le Monde de l'Arduino  (le C et Cplusplus)

mais avec la super Doc que vous avez bâti sur LocoDuino, j'avance à  grand  ... heu ... hic hic  :)

la c'est lecture de    : Calculer avec l’Arduino (2)
et le : switch ... case
 )

Bonne Ap Jean-Luc


« Modifié: mai 23, 2020, 11:19:33 am par JeeLet »