Sorry!! here codes:
CONTROLLER:
#include <CAN.h>
int Received_CANBUS_ID;
int CANBUS_Scan_Enable = 1;
char CANBUS_Message_Char[8] = " ";
String CANBUS_Message_String;
int Device_ID_Memory[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int m;
void setup() {
Serial.begin(115200);
while (!Serial) {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
Serial.println("STARTING CANBUS INITIALIZE...");
if (!CAN.begin(125E3)) {
Serial.println("Starting CANBUS failed!");
while (1)
;
}
Serial.println("CANBUS STARTED SUCCESSFUL.");
Serial.println("CONTROLLER IS READY.");
}
void CANBUS_Read(int Expected_ID) {
if (CAN.parsePacket()) {
Received_CANBUS_ID = CAN.packetId();
while (CAN.available()) {
for (int i = 0; i <= 7; i++) {
CANBUS_Message_Char[i] = (char)CAN.read();
}
if (Expected_ID == 0 || Expected_ID == Received_CANBUS_ID) {
CANBUS_Message_String = CANBUS_Message_Char;
if (CANBUS_Message_String.length() >= 9) {
CANBUS_Message_String.remove(8, 100);
}
Serial.print("Received Data> ID:");
Serial.print(Received_CANBUS_ID);
Serial.print(" - Message:");
Serial.println(CANBUS_Message_String);
}
}
}
}
void CANBUS_Write(char Create_Message[8], int Create_ID) {
CAN.beginPacket(Create_ID);
for (int i = 0; i <= 7; i++) {
CAN.write(Create_Message[i]);
}
CAN.endPacket();
Serial.print("CANBUS Wrote> ID:");
Serial.print(Create_ID);
Serial.print(" - Message:");
Serial.println(Create_Message);
}
void CANBUS_Scan() {
m = 0;
Serial.println("Started to scan devices...");
for (int s = 1; s <= 255; s++) {
CANBUS_Write("SENDPING", s);
delay(75);
CANBUS_Read(s);
if (CANBUS_Message_String == "PINGBACK") {
m++;
Device_ID_Memory[m] = s;
CANBUS_Message_String = "";
}
}
Serial.println("");
for (int b = 1; b <= m; b++) {
Serial.print("ID:");
Serial.print(int(Device_ID_Memory[b]));
Serial.println(" Detected");
}
Serial.print("Total ");
Serial.print(m);
Serial.println(" devices found");
}
void loop() {
if (CANBUS_Scan_Enable == 1) {
CANBUS_Scan();
CANBUS_Scan_Enable = 0;
}
CANBUS_Read(0);
delay(100);
}
DEVICES:
#include <CAN.h>
int Received_CANBUS_ID;
char CANBUS_Message_Char[8] = " ";
String CANBUS_Message_String;
int This_Device_ID = 10;
void setup() {
pinMode(5, INPUT_PULLUP);
Serial.begin(115200);
while (!Serial)
;
Serial.println("STARTING CANBUS INITIALIZE...");
if (!CAN.begin(125E3)) {
Serial.println("Starting CANBUS failed!");
while (1)
;
}
Serial.println("CANBUS STARTED SUCCESSFUL.");
Serial.println("");
}
void CANBUS_Read(int Expected_ID) {
if (CAN.parsePacket()) {
Received_CANBUS_ID = CAN.packetId();
while (CAN.available()) {
for (int i = 0; i <= 7; i++) {
CANBUS_Message_Char[i] = (char)CAN.read();
}
if (Expected_ID == 0 || Expected_ID == Received_CANBUS_ID) {
CANBUS_Message_String = CANBUS_Message_Char;
if (CANBUS_Message_String.length() >= 9) {
CANBUS_Message_String.remove(8, 100);
}
Serial.print("Received Data> ID:");
Serial.print(Received_CANBUS_ID);
Serial.print(" - Message:");
Serial.println(CANBUS_Message_String);
}
}
}
}
void CANBUS_Write(char Create_Message[8], int Create_ID) {
CAN.beginPacket(Create_ID);
for (int i = 0; i <= 7; i++) {
CAN.write(Create_Message[i]);
}
CAN.endPacket();
Serial.print("CANBUS Wrote> ID:");
Serial.print(Create_ID);
Serial.print(" - Message:");
Serial.println(Create_Message);
}
void loop() {
CANBUS_Read(This_Device_ID);
if (CANBUS_Message_String == "SENDPING" && Received_CANBUS_ID == This_Device_ID) {
CANBUS_Write("PINGBACK", This_Device_ID);
delay(100);
}
if (digitalRead(5) == 0) {
CANBUS_Write(" HELLO ", This_Device_ID);
}
}
enjoy.