Salve a tutti,
ho due Arduino ethernet con due shield Can Bus (mcp2515) collegati tra loro. Devo inviare dati 8byte alla volta in maniera sequenziale, ma non riesco.
Ho usato queste librerie GitHub - McNeight/Canbus: Code from SK Pang Electronics Canbus ECU Reader Project Arduino sketch.
Questo è il codice del arduino che invia il messaggio
#include <SPI.h>
#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
void setup()
{
Serial.begin(115200);
if(Canbus.init(CANSPEED_500))
Serial.println("CAN Init ok");
else
Serial.println("Can't Init CAN");
delay(1000);
}
void loop()
{
tCAN message;
message.id = 0x631; //formatted in HEX
message.header.rtr = 0;
message.header.length = 16; //formatted in DEC
message.data[0] = 0x40;
message.data[1] = 0x05;
message.data[2] = 0x30;
message.data[3] = 0xFF; //formatted in HEX
message.data[4] = 0x00;
message.data[5] = 0x40;
message.data[6] = 0x00;
message.data[7] = 0x00;
mcp2515_bit_modify(CANCTRL, (1<<REQOP2)|(1<<REQOP1)|(1<<REQOP0), 0);
mcp2515_send_message(&message);
delay(1000);
}
Questo invece è il codice dell'arduino che riceve
#include <SPI.h>
#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>
unsigned char Flag_Recv = 0;
unsigned char len = 16;
unsigned char buf[16];
void setup()
{
Serial.begin(115200);
if(Canbus.init(CANSPEED_500))
Serial.println("CAN Init ok");
else
Serial.println("Can't Init CAN");
delay(1000);
}
void loop()
{
tCAN message;
if (mcp2515_check_message())
{
if (mcp2515_get_message(&message))
{
if(message.id == 0x631) //Filtra in base all'ID
{
Serial.print("ID: ");
Serial.print(message.id,HEX);
Serial.print(", ");
Serial.print("Data: ");
for(int i=0;i<message.header.length;i++)
{
Serial.print(message.data[i],HEX);
Serial.print(" ");
}
Serial.println("");
}}}
}
In questo modo i due Arduino comunicano tranquillamente, il problema sorge quando voglio inviare un numero indefinito di pacchetti da 8byte in modo sequenziale.
Come faccio a comunicare al "sender" che ho ricevuto i primi 8 byte e fargli inviare altri 8 byte?