Arduino Uno R4 Minima, problema con Tx Msg Can Bus

Buongiorno a tutti,
sto provando la comunicazione seriale Can Bus dell'Arduino R4 Minima ( sia Connessioni Hardware che Prog. Software ), secondo documentazione fornita dal sito ufficiale: https://docs.arduino.cc/tutorials/uno-r4-minima/can.

Una volta compilato e caricato il progetto su Aduino, la trasmissione del messaggio Can non avviene fintantoché non si avvia il Serial Monitor dall' IDE di Arduino ( sto usando la versione 2.2.1 ). Ho provato a creare uno Sketch con sending time generato da Timer Interrupt ma non cambia, la trasmissione dei messaggi Can avvengono solo dopo aver avviato il Serial Monitor dall'IDE.

Lo sketch è il seguente:

/*
  CANWrite

  Write and send CAN Bus messages

  See the full documentation here:
  https://docs.arduino.cc/tutorials/uno-r4-wifi/can
*/

/**************************************************************************************
 * INCLUDE
 **************************************************************************************/

#include <Arduino_CAN.h>

/**************************************************************************************
 * CONSTANTS
 **************************************************************************************/

static uint32_t const CAN_ID = 0x20;

/**************************************************************************************
 * SETUP/LOOP
 **************************************************************************************/

void setup()
{
  Serial.begin(115200);
  while (!Serial) { }

  if (!CAN.begin(CanBitRate::BR_250k))
  {
    Serial.println("CAN.begin(...) failed.");
    for (;;) {}
  }
}

static uint32_t msg_cnt = 0;

void loop()
{
  /* Assemble a CAN message with the format of
   * 0xCA 0xFE 0x00 0x00 [4 byte message counter]
   */
  uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
  memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
  CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data);

  /* Transmit the CAN message, capture and display an
   * error core in case of failure.
   */
  if (int const rc = CAN.write(msg); rc < 0)
  {
    Serial.print  ("CAN.write(...) failed with error code ");
    Serial.println(rc);
    for (;;) { }
  }

  /* Increase the message counter. */
  msg_cnt++;

  /* Only send one message per second. */
  delay(1000);
}

Come mai accade questo ?

Grazie, un saluto a tutti.

Buongiorno e benvenuto nella sezione Italiana del forum,

cortesemente, come prima cosa, leggi attentamente il REGOLAMENTO di detta sezione, (... e, per evitare future possibili discussioni/incomprensioni, prestando molta attenzione al punto 15), dopo di che, come da suddetto regolamento (punto 16.7), fai la tua presentazione NELL'APPOSITA DISCUSSIONE spiegando bene quali esperienze hai in elettronica e programmazione, affinché noi possiamo conoscere la tua esperienza ed esprimerci con termini adeguati.

Grazie,

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti), quindi ti consiglio di farla al più presto. :wink:

... hai provato a studiare sul reference cosa fa quel (!Serial) ?

Perché, la UNO R4 ha la seriale nativa e quindi Serial NON è ignorata come sulla UNO R3 (che non ha una USB nativa), ma viene valutata e il programma si comporta di conseguenza.

Guglielmo

Grazie mille, non lo avevo considerato.

Un saluto.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.