Problème d'affichage dans le moniteur série

Bonjour à tous, je suis en BTS en période de stage, mon projet porte sur la lecture d'un bus can étendu sur un camping car fiat DUCATO tout cela à l'aide d'une carte arduino teensy 4.0 ainsi que d'une carte d'alimentation joy-it sbc-pow-bb et d'un transceiver sn65hvd230, tout les branchements sont bons approuvés par des personnes qualifiées et des test au multimètre on été effectuer, donc côté branchement et soudure tout est ok, mais j'ai un petit problème mon programme n'as aucun problème à s'exécuter mais rien ne s'affiche dans le moniteur série. J'ai donc fais quelque test avec des Serial.print pour voir jusqu'à ou le programme allait et il semblerait que il s'arrête car il ne reçois pas de message:

#include <circular_buffer.h>
#include <FlexCAN_T4.h>
#include <imxrt_flexcan.h>
#include <isotp.h>
#include <isotp_server.h>
#include <kinetis_flexcan.h>

#include <Arduino_JSON.h>


#include <circular_buffer.h>
#include <FlexCAN_T4.h>
#include <imxrt_flexcan.h>
#include <isotp.h>
#include <isotp_server.h>
#include <kinetis_flexcan.h>


FlexCAN_T4<CAN1, RX_SIZE_256, TX_SIZE_16> can1; // on instancie la variable can1 en spécifiant qu'elle se connecte sur les broches CAN1 de la teensy
FlexCAN_T4<CAN2, RX_SIZE_256, TX_SIZE_16> can2; // on crée une seconde variable can pour en utiliser deux en parallèle
CAN_message_t msg; // variable qui va venir stocker un message reçu

void setup(void) {
  can1.begin(); // on initialise le bus can
  can1.setBaudRate(500000); // et on spécifie la vitesse de connexion
  can2.begin(); // idem pour l'autre bus
  can2.setBaudRate(500000);
}

void loop() {


  if ( can1.read(msg) ) {// si un message est reçu sur le bus can1
    Serial.print("CAN1 ");
    Serial.print("MB: "); Serial.print(msg.mb);                 // on affiche la valeur mb, la mailbox (en principe tu ne t'en occupe pas)
    Serial.print("  ID: 0x"); Serial.print(msg.id, HEX );       // on affiche l'identifiant de la trame CAN en hexa
    Serial.print("  EXT: "); Serial.print(msg.flags.extended ); // on indique la trame est standard ou étendue
    Serial.print("  LEN: "); Serial.print(msg.len);             // on indique la taille du message (0 <-> 8 octets)
    Serial.print(" DATA: ");                                    // on affiche le contenu de la trame (les données)
    for ( uint8_t i = 0; i < 8; i++ ) {
      Serial.print(msg.buf[i]); Serial.print(" ");              // on a donc les données dans msg.buf si on doit les utiliser (ce que tu dois sans doute faire)
    }
    Serial.print("  TS: "); Serial.println(msg.timestamp);      // on affiche le timestamp, c'est à dire le "moment" où est arrivée la trame
  }
  else if ( can2.read(msg) ) {    // idem pour le second
    Serial.print("CAN2 ");
    Serial.print("MB: "); Serial.print(msg.mb);
    Serial.print("  ID: 0x"); Serial.print(msg.id, HEX );
    Serial.print("  EXT: "); Serial.print(msg.flags.extended );
    Serial.print("  LEN: "); Serial.print(msg.len);
    Serial.print(" DATA: ");
    for ( uint8_t i = 0; i < 8; i++ ) {
      Serial.print(msg.buf[i]); Serial.print(" ");
    }
    Serial.print("  TS: "); Serial.println(msg.timestamp);
  }
}

Pourtant j'ai bien mis la bonne vitesse de transmission dans le programme et le moniteur série qui a été vérifier, je fais tourner le moteur pour qu'il puisse me donner les informations, j'utilise une prise OBD2 ppour lire les informations et je ne prend que les broches 4(GND), 6(Canh) et 14(Canl) de cele-ci, je suis un peu embêter et bloquer si quelqu'un serait me guider, il se pourrait que j'ai oublié certaine chose n'hésiter pas à me redire si il faut plus d'information c'est mon premier message ici, voilà voilà, merci.

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour
pas de Serial.begin() dans Setup () ?

Bonjour al1fch
J'ai trouver ce programme sur internet je pense que la partie dans le void setup remplace le Serial.begin car on définit déjà la vitesse dans can1.setBaudRate(500000); mais je vais essayer d'ajouter quand même un Serial.begin au cas où

J'ai essayer de mettre un
Serial.begin();
mais il m'affiche l'erreur suivante

Arduino : 1.8.12 (Windows 10), TD: 1.56, Carte : "Teensy 4.0, Serial, 600 MHz, Faster, US English"

test: In function 'void setup()':
test:9: error: no matching function for call to 'usb_serial_class::begin()'
   Serial.begin();

                ^

In file included from C:\Users\xxxxxxxx\Documents\arduino-1.8.12-windows\hardware\teensy\avr\cores\teensy4/WProgram.h:51:0,

                 from C:\Users\xxxxxxxx\AppData\Local\Temp\arduino_build_431203\pch\Arduino.h:6:

C:\Users\xxxxxxxx\Documents\arduino-1.8.12-windows\hardware\teensy\avr\cores\teensy4/usb_serial.h:75:14: note: candidate: void usb_serial_class::begin(long int)

         void begin(long) {

              ^

C:\Users\xxxxxxxx\Documents\arduino-1.8.12-windows\hardware\teensy\avr\cores\teensy4/usb_serial.h:75:14: note:   candidate expects 1 argument, 0 provided

no matching function for call to 'usb_serial_class::begin()'

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

je pense que la où on définit les can remplace le serial.begin()

Salut.
Comme pour un ARDUINO, la méthode a besoin d'un paramètre (le baudrate) :
Serial::begin(long);
Donc : Serial.begin(115200); si cette vitesse te convient.
Bien entendu, régler le moniteur série sur la même vitesse.

Bonjour hbachetti
J'ai bien mis un Serial.begin(500000) l'entreprise travaille avec cette vitesse de transmission
mais rien ne change pourtant j'ai bien vérifier la vitesse de transmission dans le moniteur série elle est de 500000 aussi.

La vitesse du CAN et la vitesse de Serial peuvent être différentes. Essaie 115200 pour Serial.

hello
je ne connais pas la carte teensy. en regardant le pinout, je vois qu'il y a de nombreuses possibilités pour la com série.
ton transceiver doit être branché sur le bus par les borniers bleus et sur la teensy à un des RX/TX ,disons le 2.
ton transceiver envoie les infos au teensy par le Serial2 en 500000 bauds.
ta carte teensy envoie le msg au moniteur par le Serial1 en 115200 bauds ( ou 500000 comme tu veux, l'essentiel est que le moniteur soit réglé à la même vitesse).

donc pour moi il manque
Serial1.begin(115200);
Serial2.begin(500000);
et si en teensy, le Serial du moniteur est bien Serial1, toutes tes instructions d'affichage sur le moniteur doivent commencer par Serial1.print.

voilà, c'est ce qui me chagrine, mais je te rappelle que je ne connais pas teensy. donc tu prends ou tu laisses.

Ça pourrait être une explication.

Idem.

Serial c'est le port virtuel qui passe par l'USB.
Les autre ports série (UART matérielles) c'est Serial1, Serial2, ....
Un peu de lecture
https://www.pjrc.com/store/teensy40.html
en particulier
https://www.pjrc.com/teensy/td_uart.html

hello fdufnews
merci pour ces liens, toujours utile de s'instruire, meme s'il n'y aura pas de suite. ( cavale quand meme très vite ce teensy)

Merci hbachetti de ta proposition j'ai essayer mais cela ne marche pas non plus.

Ce qui m'enbête le plus c'est comment on initialise le BUS au début parce que dans mon programme au début pour initialiser les can la ligne de code suivante est proposée:

FlexCAN_T4<CAN1, RX_SIZE_256, TX_SIZE_32> can1

Je comprend pas à quoi servent le RX SIZE et le TX SIZE

Deux tailles de buffer je suppose (réception et émission).

Essayer ce qui est dit ici, cela semble très basique.

j'ai carrément changer le programme maintenant ça donne ça:

#include <FlexCAN_T4>;

const int ledPin = 13 ;

FlexCAN_T4<CAN1, RX_SIZE_256, TX_SIZE_16> can1 ;
FlexCAN_T4<CAN2, RX_SIZE_256, TX_SIZE_16> can2 ;
FlexCAN_T4<CAN3, RX_SIZE_256, TX_SIZE_16> can3 ;

void setup() {
  // placez votre code d'installation ici, à exécuter une fois :
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  
can1.begin();
can2.begin();
can3.begin();
can1.setBaudRate(250*1000);
can2.setBaudRate(250*1000);
can3.setBaudRate(250*1000);

}

void programme() {
  // placez votre code principal ici, pour qu'il s'exécute à plusieurs reprises :
CAN_message_t msg, rmsg ;
msg.len=8 ;
msg.id=1 ;
msg.buf[0]=1 ;
msg.buf[1]=2 ;
msg.buf[2]=3 ;
msg.buf[3]=4 ;
msg.buf[4]=5 ;
msg.buf[5]=6 ;
msg.buf[6]=7 ;
msg.buf[7]=8 ;

can1.write(msg);
msg.id=2 ;
can2.write(msg);
msg.id=3 ;
can3.write(msg);

 if ( can1.read(rmsg) )
 {
 Serial.print("CAN1 ");
 Serial.print(" ID : 0x"); Serial.print(rmsg.id, HEX );
 }
 if ( can2.read(rmsg) )
 {
 Serial.print("CAN2 ");
 Serial.print(" ID : 0x"); Serial.print(rmsg.id, HEX );
 }
 Serial.println ("Salut !");

digitalWrite(ledPin, !digitalRead(ledPin));
delay (500);
}

mais l'erreur suivante s'affiche

C:\Users\xxxxxxxx\Documents\Arduino\test\test2\test2.ino:1:23: fatal error: FlexCAN_T4: No such file or directory

compilation terminated.

Erreur de compilation pour la carte Teensy 4.0

alors je sais que l'erreur est dû au fait qu'il me manque la librairie FlexCAN_T4 mais j'ai vu sur des forum que normalement elle est intégrer directement sur la carte T 4.0
Pourrait t'on peut être repartir sur des bonnes bases? retrouver un programme tester approuver que je pourrais utiliser avec les librairies qu'il me faut puis voir ce que cela donne car cela peut être aussi un problème matérielle. Je vais chercher de mon côté un programme sur "je ne dis pas que les autres n'était pas sur" mais j'aimerais bien réussir au moin à lire mon CAN, il me reste 1 semaine de stage si quelqu'un à du temps à perdre et veut bien m'aider pour les recherches et résolutions des problèmes je prends, voilà merci.

Il manque le .h

oui, le .h et pas de ";"

un lien qui traite du même problème que le tien .
il devrait t’intéresser
ICI

Merci dfgh pour ce lien j'ai donc utiliser ce programme

// ------------------------------------------------ --------------
// CANtest ​​pour Teensy 4.0 utilisant les bus CAN2 et CAN2
#include <FlexCAN_T4.h>

#define debug(msg) Serial.print("["); Serial.print(__FILE__); Serial.print("::"); Serial.print(__LINE__); Serial.print("::"); Serial.print(msg); Serial.println("]");
annuler debug_pause (annuler)
{
  Serial.print("Pause...");
  tandis que (!Serial.available());
  while (Serial.available()) Serial.read();
  Serial.println("Redémarré.");
}

FlexCAN_T4<CAN1, RX_SIZE_256, TX_SIZE_16> Can1 ;
FlexCAN_T4<CAN2, RX_SIZE_256, TX_SIZE_16> Can2 ;

message CAN_message_t statique ;
statique uint8_t hex[17] = "0123456789abcdef" ;

// ------------------------------------------------ --------------
void setup (uint8_t dumpLen, uint8_t *bytePtr)
{
  uint8_t fonctionne ;
  tandis que( dumpLen-- ) {
    travail = *bytePtr++ ;
    Serial.write( hex[ travail>>4 ] );
    Serial.write( hex[ travail&15 ] );
  }
  Serial.write('\r');
  Serial.write('\n');
}


// ------------------------------------------------ --------------
annuler la configuration (annuler)
{
  Serial.begin(115200);
  int iSerialTimeout = 1000000 ;
  retard(100);
  while (!Serial && (iSerialTimeout-- != 0));  
  déboguer (F("démarrer la configuration"));

  Can1.begin();  
  Can2.begin();
  Can1.setBaudRate(1000000);   // J'aime définir les débits en bauds juste pour être du bon côté
  Can2.setBaudRate(1000000);

  // t4 manquant msg.ext = 0;
  msg.id = 0x100 ;
  msg.len = 8 ;
  msg.flags.extended = 0 ;
  msg.flags.remote = 0 ;
  msg.flags.overrun = 0 ;
  msg.flags.reserved = 0 ;
  msg.buf[0] = 10 ;
  msg.buf[1] = 20 ;
  msg.buf[2] = 0 ;
  msg.buf[3] = 100 ;
  msg.buf[4] = 128 ;
  msg.buf[5] = 64 ;
  msg.buf[6] = 32 ;
  msg.buf[7] = 16 ;
  débogage (F("configuration terminée"));
  //debug_pause();
}


// ------------------------------------------------ --------------
void loop 
{
  msg.buf[0]++ ;      //puisque vous êtes dans une boucle, je viens d'incrémenter à chaque fois au lieu de le faire 5 fois 
  Can1.write(msg);   // vous pouvez aussi le faire à votre façon
  Serial.println("T4.0cantest - Répéter : Lire bus2, Ecrire bus1");
  CAN_message_t dansMsg ;
  if (Can2.read(inMsg)!=0)      // Changé en if par opposition à while - la façon dont vous l'aviez reste bloquée puisque vous n'avez même pas encore envoyé de message 
  {
    Serial.print("W RD bus 2 : "); hexDump(8, inMsg.buf);
  }
  retard(20);
}

mais il m'affiche ça comme erreur

Arduino : 1.8.12 (Windows 10), TD: 1.56, Carte : "Teensy 4.0, Serial, 600 MHz, Faster, US English"

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:41:3: error: stray '\303' in program

   déboguer (F("démarrer la configuration"));

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:41:3: error: stray '\251' in program

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:63:3: error: stray '\303' in program

   débogage (F("configuration terminée"));

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:63:3: error: stray '\251' in program

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:6:1: error: 'annuler' does not name a type

 annuler debug_pause (annuler)

 ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:35:1: error: 'annulerla' does not name a type

 annuler la configuration (annuler)

 ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:6:1: error: 'annuler' does not name a type

 annuler debug_pause (annuler)

 ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:17:1: error: 'message' does not name a type

 message CAN_message_t statique ;

 ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:18:1: error: 'statique' does not name a type

 statique uint8_t hex[17] = "0123456789abcdef" ;

 ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino: In function 'void setup(uint8_t, uint8_t*)':

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:24:3: error: 'tandis' was not declared in this scope

   tandis que( dumpLen-- ) {

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:23:11: warning: unused variable 'fonctionne' [-Wunused-variable]

   uint8_t fonctionne ;

           ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino: At global scope:

C:\Users\\Documenxxxxxxxxts\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:35:1: error: 'annuler' does not name a type

 annuler la configuration (annuler)

 ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:69:6: error: variable or field 'loop' declared void

 void loop 

      ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:71:3: error: 'msg' was not declared in this scope

   msg.buf[0]++ ;      //puisque vous êtes dans une boucle, je viens d'incrémenter à chaque fois au lieu de le faire 5 fois 

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:71:16: error: expected '}' before ';' token

   msg.buf[0]++ ;      //puisque vous êtes dans une boucle, je viens d'incrémenter à chaque fois au lieu de le faire 5 fois 

                ^

C:\Users\cchevallier\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:72:3: error: 'Can1' does not name a type

   Can1.write(msg);   // vous pouvez aussi le faire à votre façon

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:73:3: error: 'Serial' does not name a type

   Serial.println("T4.0cantest - Répéter : Lire bus2, Ecrire bus1");

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:75:3: error: expected unqualified-id before 'if'

   if (Can2.read(inMsg)!=0)      // Changé en if par opposition à while - la façon dont vous l'aviez reste bloquée puisque vous n'avez même pas encore envoyé de message 

   ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:79:9: error: expected constructor, destructor, or type conversion before '(' token

   retard(20);

         ^

C:\Users\xxxxxxxx\Documents\Arduino\test_forum_sur_une_T_4.0\test_forum_sur_une_T_4.0.ino:80:1: error: expected declaration before '}' token

 }

 ^

Erreur de compilation pour la carte Teensy 4.0

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

une idée?
PS: dsl je ne suis pas très fort en programmation