Anusha

 Hi this page is Anusha's Page

The following code is RKE implementation

The requirement for RKE is taken from


//RKE & BCM
//Created by Anusha__10/10/22

#define Alarm 4
#define Hazard 5

int beep,driver_door=1,Trunk_door=1,frnt_left=1,back_rght=1,back_left=1;
int Hood=1,driver_knob=1,inside=1,i,vehicle_armed,status;
int diver_door_act,frnt_lft_act,back_rght_act,trunk_lock_act,back_lft_act;
float speed=5;
long timer;
int RKE_ip = 2;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
 pinMode(Hazard,OUTPUT);
 pinMode(Alarm,OUTPUT);
 
//=========key inside cylinder or not=======================

int crash_signal=0;

if(inside == 1){

 if(driver_door && Trunk_door && frnt_left && back_rght && back_left && Hood == 1)
{
   Serial.println("All door closed");
    if(driver_knob == 1){
    door_lock();
     
    }
    if(RKE_ip == 2){                    //==>2 for door open
      int timer = millis();
      while(timer>3000){
        panic();
      }
     
    }
    if(speed > 20){
      door_lock();
    }

 }
if(crash_signal ==1){
  emergency_unlock();
}

 else if(driver_door == 0){
   Serial.println("Driver door open");
 }

 else if(Trunk_door == 0){
   Serial.println("Trunk open");
 }

 else if(frnt_left== 0){
   Serial.println("Front left door open");
 }

 else if(back_rght== 0){
   Serial.println("Back right door open");
 }

 else if(back_left== 0){
   Serial.println("Back left door open");
 }

 else if(Hood == 0){
   Serial.println("Hood is open");
 }

else if (driver_door && Trunk_door && frnt_left && back_rght && back_left && Hood != 1)
{
     Serial.println("Door is not closed");
  beep = 1;
  alarm(beep);
  }
 

  /*
  else {
   beep = 900;
  alarm();
  }*/
}


else if(inside==0){

switch(RKE_ip){
case 1:{                                                         // 1 ==> to lock the door
  if(driver_door && Trunk_door && frnt_left && back_rght && back_left && Hood == 1){
  door_lock();
  status = vehicle_status();
  if(status == 0){
     theft_alarm();
  }
  break;
 
}
 else {
    Serial.println("Door is not closed_special case");
    beep = 5;
    hazard_alarm(beep);
    break;
  }
}
                                                               //2==> to unlock
case 2:{  
                               
  int timer = millis();
  //RKE_ip = 2;
      while(timer>3000){
        if(RKE_ip == 2){
 
        search();
       
        }
      }
  door_unlock();
  break;
  while(timer>4500){
if(driver_door && Trunk_door && frnt_left && back_rght && back_left && Hood != 0){

door_lock();

}

}
}
case 3:{  
  if(RKE_ip == 3){                            //3==> to open the trunk
  trunk_open();
  break;
}
}
/*case 0 :{        // 0=====> theft case, no key pressed
 if( driver_door && Trunk_door && frnt_left && back_rght && back_left !=1){
 
  break;
 }
}*/

}

}
}

int vehicle_status(){

if(diver_door_act &&  frnt_lft_act &&  back_rght_act && back_lft_act == 1){
vehicle_armed = 1;

}
else{
vehicle_armed = 0;
}
return(vehicle_armed);
}


void door_lock(){
Serial.println("Door is locked");
diver_door_act =0;
frnt_lft_act = 1;
back_rght_act =1;
back_lft_act = 1;
trunk_lock_act = 1;
int beep = 1;
      hazard_alarm(beep);


return;
}

void door_unlock(){

  Serial.println("Door is unlocked");

diver_door_act =0;
frnt_lft_act = 0;
back_rght_act =0;
back_lft_act = 0;

int beep = 2;
hazard_alarm(beep);
/*hazard_lamp(beep);
alarm(beep);*/
return;
}

void theft_alarm(){
int i;
beep = 900;
Serial.println("Theft alarm");
RKE_ip == 0;
if(RKE_ip == 1){
  int timer = millis();
while(timer> 3000){
  beep = 0;
  return;
}
 
}
else {
for(i=0;i<beep;i++){
  Serial.println("hazard");
digitalWrite(Hazard,HIGH);
digitalWrite(Alarm,HIGH);
 delay(500);
digitalWrite(Hazard,LOW);
digitalWrite(Alarm,LOW);

}
 
}
}
// Function Declaration

void emergency_unlock(){

diver_door_act =0;
frnt_lft_act = 0;
back_rght_act =0;
back_lft_act = 0;
trunk_lock_act = 0;
beep = 900;
Serial.println("Emergency door unlock");
for(i=0;i<beep;i++){
digitalWrite(Hazard,HIGH);
digitalWrite(Alarm,HIGH);
Serial.println("Hazard lamp and alarm");
 delay(500);
digitalWrite(Hazard,LOW);
digitalWrite(Alarm,LOW);

}



}

void hazard_alarm(int beep){

for(i=0;i<beep;i++){
Serial.println("Hazard lamp blink");
Serial.println("Alarm");
digitalWrite(Hazard,HIGH);
digitalWrite(Alarm,HIGH);
 delay(500);
digitalWrite(Hazard,LOW);
digitalWrite(Alarm,LOW);

}
return;
}

void trunk_open(){
trunk_lock_act = 0;
Serial.println("Trunk open");
return;
}

void search(){
  Serial.println("Search");
  beep = 15;
  hazard_alarm(beep);
}

void panic(){
Serial.println("panic");  
beep= 15;
hazard_alarm(beep);
return;
}

void hazard_lamp(int beep){
  int i;

  for(i=0;i<beep;i++){
      Serial.println("Lamp");
    digitalWrite(Hazard,HIGH);
    delay(500);
    digitalWrite(Hazard,LOW);
  }
return;
}

void alarm(int beep){
 
  int i;

  for(i=0;i<beep;i++){
      Serial.println("Alarm_beep");
    digitalWrite(Alarm,HIGH);
    delay(500);
    digitalWrite(Alarm,LOW);
  }
return;
}

RKE with CAN Implementation

#include <SPI.h>
#include <mcp2515.h>

struct can_frame canMsg1;
struct can_frame canMsg2;
struct can_frame canMsg3;
struct can_frame canMsg4;
struct can_frame canMsg5;
struct can_frame canMsg6;
struct can_frame canMsg7;
struct can_frame canMsg8;
struct can_frame canMsg9;
struct can_frame canMsg10;
struct can_frame canMsg11;
struct can_frame canMsg12;

struct can_frame canMsg;
MCP2515 mcp2515(53);

int byte_data[8];

void setup() {
   Serial.begin(115200);
   canMsg1.can_id  = 0x050;
   canMsg1.can_dlc = 8;

  canMsg2.can_id  = 0x055;
  canMsg2.can_dlc = 8;
     
  canMsg3.can_id  = 0x065;
  canMsg3.can_dlc = 8;

  canMsg4.can_id  = 0x070;
  canMsg4.can_dlc = 8;

  canMsg5.can_id  = 0x075;
  canMsg5.can_dlc = 8;

  canMsg6.can_id  = 0x080;
  canMsg6.can_dlc = 8;

  canMsg7.can_id  = 0x085;
  canMsg7.can_dlc = 8;

  canMsg8.can_id  = 0x060;
  canMsg8.can_dlc = 8;

  canMsg9.can_id  = 0x098;
  canMsg9.can_dlc = 8;

  canMsg10.can_id  = 0x090;
  canMsg10.can_dlc = 8;
   

  canMsg11.can_id  = 0x095;
  canMsg11.can_dlc = 8;  

  canMsg12.can_id  = 0x099;
  canMsg12.can_dlc = 8;  
 
  mcp2515.reset();
  mcp2515.setBitrate(CAN_500KBPS,MCP_8MHZ);
  mcp2515.setNormalMode();

  pinMode(13,OUTPUT);
 
  Serial.println("------- CAN Read ----------");
  Serial.println("ID  DLC   DATA");
}

//====================NORMAL_LED BLINK ====================
void normal_blink(){    
  for(int i=0;i<2;i++){
          digitalWrite(13,HIGH);
          delay(5000);
          digitalWrite(13,LOW);
          }
          return;
}

//======================FAULTY LED BLINK======================================
void faulty_blink(){  
 for(int i=0;i<3;i++){
          digitalWrite(13,HIGH);
          delay(250);
          digitalWrite(13,LOW);
          }
    return;
}

void loop() {
  /*
  if (mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
    //  Serial.print("CAN ID IS   ");
    //  Serial.println(canMsg.can_id, HEX); // print ID
    // Serial.print(" ");
    // Serial.print(canMsg.can_dlc, HEX); // print DLC
    // Serial.print(" ");
 //==============Extracting signal from BCM_1____CANID= 0x045==================
  if (canMsg.can_id==0x045){
    byte  receive_1st_byte;
     byte receive_2nd_byte;
     
     byte hazard_signal,turn_left_signal,turn_right_signal,bcm_rain_sensor;
byte battery_charge_systm_warn;
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
      if(i==0)
      receive_1st_byte = canMsg.data[0];
      if(i==1)
      receive_2nd_byte = canMsg.data[1];
     
      hazard_signal = receive_1st_byte & 0b11;
      turn_left_signal = receive_1st_byte & 0b1100;
      turn_right_signal =  receive_1st_byte & 0b110000;
      bcm_rain_sensor = receive_1st_byte & 0b11000000;
      battery_charge_systm_warn =receive_1st_byte & 0b11;
//======hazard_signal =======================================
      Serial.print("hazard_signal  ");
      Serial.println(hazard_signal, HEX);
      switch (hazard_signal){

        case 0b00:
          digitalWrite(13,LOW);
          break;

        case 0b01:
          Serial.print("hazard_signal NORMAL");
          normal_blink();
          break;

        case 0b10:
          Serial.print("hazard_signal FAULTY BLINK");
          faulty_blink();
          break;


        case 0b11:
          Serial.print("hazard_signal RESERVED");
          digitalWrite(13,HIGH);

      }
   
//=============turn_left_signal=============================
      turn_left_signal = turn_left_signal>>2;
      Serial.print("turn_left_signal ");
      Serial.println(turn_left_signal, HEX);
      switch (turn_left_signal){

        case 0b00:
          digitalWrite(13,LOW);
          break;

        case 0b01:
          Serial.print("turn_left_signal NORMAL");
          normal_blink();
          break;

        case 0b10:
          Serial.print("turn_left_signal FAULTY BLINK");
          faulty_blink();
          break;


        case 0b11:
          Serial.print("turn_left_signal RESERVED");
          digitalWrite(13,LOW);
      }

//=========== turn_right_signal==========================
      turn_right_signal = turn_right_signal>>4;
      Serial.print("turn_right_signal ");
      Serial.println(turn_right_signal, HEX);

      switch (turn_right_signal){

        case 0b00:
          digitalWrite(13,LOW);
          break;
        case 0b01:
          Serial.print("turn_right_signal NORMAL");
          normal_blink();
          break;
        case 0b10:
          Serial.print("turn_right_signal FAULTY BLINK");
          faulty_blink();
          break;
        case 0b11:
          Serial.print("turn_right_signal RESERVED");
          digitalWrite(13,LOW);

      }
//=========== bcm_rain_sensor====================================
      bcm_rain_sensor = bcm_rain_sensor>>6;
      Serial.print("bcm_rain_sensor ");
      Serial.println(bcm_rain_sensor, HEX);

      switch (bcm_rain_sensor){
        case 0b00:
          digitalWrite(13,LOW);
          Serial.print("bcm_rain_sensor OFF");
          break;
        case 0b01:
          Serial.print("bcm_rain_sensor WIPER ON");
          normal_blink();
          break;
        case 0b10:
          Serial.print("bcm_rain_sensor LIGHT ON");
          faulty_blink();
         
          break;
        case 0b11:
          Serial.print("bcm_rain_sensor RESERVED");
          digitalWrite(13,LOW);

      }
//===========================battery_charge_systm_warn===========================
      Serial.print("battery_charge_systm_warn ");
      Serial.println(battery_charge_systm_warn, HEX);
      switch (battery_charge_systm_warn){

        case 0b00:
          digitalWrite(13,LOW);
          break;
        case 0b01:
          Serial.print("battery_charge_systm_warn NORMAL");
          normal_blink();
          break;
        case 0b10:
          Serial.print("battery_charge_systm_warn FAULTY BLINK");
          faulty_blink();
          break;
        case 0b11:
          Serial.print("battery_charge_systm_warn RESERVED");
          digitalWrite(13,LOW);
      }
    }

  }

//======Extracting signals__BCM_2 ___CAN ID =0X 46 ======================
 if (canMsg.can_id==0x046){
    byte  receive_46_1st_byte;
    byte low_fuel_level,vehicle_armed_status,park_brake_lamp,rear_fog_lamp;
byte frnt_fog_lamp;
   
 for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if (i= 0)
          receive_46_1st_byte = canMsg.data[0];
   
        frnt_fog_lamp = receive_46_1st_byte & 1;
        rear_fog_lamp = receive_46_1st_byte & 2;
        park_brake_lamp = receive_46_1st_byte & 4;
        vehicle_armed_status = receive_46_1st_byte & 8;
        low_fuel_level = receive_46_1st_byte & 16;
//====================frnt_fog_lamp===============================
    Serial.print("frnt_fog_lamp  ");
    Serial.println(frnt_fog_lamp,HEX);
    switch (frnt_fog_lamp){
      case 0:
       Serial.print("frnt_fog_lamp OFF ");
       digitalWrite(13,LOW);
       break;
      case 1:
      Serial.print("frnt_fog_lamp ON");
      digitalWrite(13,HIGH);
    }
//=============rear_fog_lamp=======================
    rear_fog_lamp = rear_fog_lamp>>1;
    Serial.print("rear_fog_lamp  ");
    Serial.println(rear_fog_lamp,HEX);
    switch (rear_fog_lamp){
      case 0:
       Serial.print("rear_fog_lamp OFF ");
       digitalWrite(13,LOW);
       break;
      case 1:
      Serial.print("rear_fog_lamp ON");
      digitalWrite(13,HIGH);
    }

//=====================park_brake_lamp=====================
    park_brake_lamp = park_brake_lamp>>2;
    Serial.print("park_brake_lamp  ");
    Serial.println(park_brake_lamp,HEX);
    switch (park_brake_lamp){
      case 0:
       Serial.print("park_brake_lamp OFF ");
       digitalWrite(13,LOW);
       break;
      case 1:
      Serial.print("park_brake_lamp ON");
      digitalWrite(13,HIGH);
    }
//===vehicle_armed_status============================================
    vehicle_armed_status = vehicle_armed_status>>3;
    Serial.print("vehicle_armed_status  ");
    Serial.println(vehicle_armed_status,HEX);
    switch (vehicle_armed_status){
      case 0:
       Serial.print("vehicle_armed_status OFF ");
       digitalWrite(13,LOW);
       break;
      case 1:
      Serial.print("vehicle_armed_status ON");
      digitalWrite(13,HIGH);
    }

//===========low_fuel_level==========
    low_fuel_level = low_fuel_level>>4;
    Serial.print("low_fuel_level  ");
    Serial.println(low_fuel_level,HEX);
    switch (low_fuel_level){
      case 0:
       Serial.print("low_fuel_level OFF ");
       digitalWrite(13,LOW);
       break;
      case 1:
      Serial.print("low_fuel_level ON");
      digitalWrite(13,HIGH);
    }
 }

 }

//================BCM_3__CAN_ID 0x047_Extracting signals=====  
   if (canMsg.can_id==0x047){
    byte  receive_47_1st_byte;
    byte fuel_level,head_lamp;
 for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
         if(i == 0)
            receive_47_1st_byte = canMsg.data[0];

        head_lamp = receive_47_1st_byte & 0b11;
        fuel_level = receive_47_1st_byte & 0b1111100;

//=================Head lamp========================

    Serial.print("head_lamp  ");
    Serial.println(head_lamp,HEX);

    fuel_level = fuel_level>>2;
    Serial.print("fuel_level  ");
    Serial.println(fuel_level,HEX);
    }
   }


//   }

    if (canMsg.can_id==0x048){

        byte  receive_48_1st_byte;
        byte  ampient_temperature;
   
  for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
         if(i == 0)
            receive_48_1st_byte = canMsg.data[0];

        ampient_temperature = receive_48_1st_byte;
        Serial.print("ampient_temperature  ");
        Serial.println(ampient_temperature,HEX);


   }

  }

  if (canMsg.can_id==0x049){

    byte  receive_49_1st_byte;
    byte trunk_door_status, rear_rgt_door_status,rear_lft_door_status,fuel_lid_status;
byte driver_door_status,passngr_door_status;
   
 for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");

      if(i == 0)
       receive_49_1st_byte = canMsg.data[0];

    passngr_door_status = receive_49_1st_byte & 1;
    driver_door_status = receive_49_1st_byte & 2;
    fuel_lid_status = receive_49_1st_byte & 4;
    rear_lft_door_status = receive_49_1st_byte & 8;
    rear_rgt_door_status = receive_49_1st_byte & 16;
    trunk_door_status = receive_49_1st_byte & 32;


    Serial.print("passngr_door_status  ");
    Serial.println(passngr_door_status,HEX);
 
    driver_door_status = driver_door_status >>1;
    Serial.print("driver_door_status  ");
    Serial.println(driver_door_status,HEX);

    fuel_lid_status = fuel_lid_status >>2;
    Serial.print("fuel_lid_status  ");
    Serial.println(fuel_lid_status,HEX);


    rear_lft_door_status = rear_lft_door_status >>3;
    Serial.print("rear_lft_door_status  ");
    Serial.println(rear_lft_door_status,HEX);

    rear_rgt_door_status = rear_rgt_door_status >>4;
    Serial.print("rear_rgt_door_status  ");
    Serial.println(rear_rgt_door_status,HEX);

    trunk_door_status = trunk_door_status>> 5;
    Serial.print("trunk_door_status  ");
    Serial.println(trunk_door_status,HEX);


     }

   }


   if (canMsg.can_id==0x025){

     byte receive_49_1st_byte;
     byte start_stop,check_engine,engine_oil_pressure,water_in_fuel;
byte ect_warn_lamp,glow_plug;

   
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if (i== 0)
        receive_49_1st_byte = canMsg.data[0];

      glow_plug = receive_49_1st_byte & 1;
      ect_warn_lamp = receive_49_1st_byte & 2;
      water_in_fuel = receive_49_1st_byte & 4;
      engine_oil_pressure = receive_49_1st_byte & 8;
      check_engine = receive_49_1st_byte & 16;
      start_stop = receive_49_1st_byte & 32;

      Serial.print("glow_plug  ");
      Serial.println(glow_plug,HEX);

      ect_warn_lamp = ect_warn_lamp >>1;
      Serial.print("ect_warn_lamp  ");
      Serial.println(ect_warn_lamp,HEX);

      water_in_fuel = water_in_fuel>>2;
      Serial.print("water_in_fuel  ");
      Serial.println(water_in_fuel,HEX);

      engine_oil_pressure = engine_oil_pressure>>3;
      Serial.print("engine_oil_pressure  ");
      Serial.println(engine_oil_pressure,HEX);

      check_engine = check_engine >>4;
      Serial.print("check_engine  ");
      Serial.println(check_engine,HEX);

      start_stop = start_stop >>5;
      Serial.print("start_stop  ");
      Serial.println(start_stop,HEX);

    }
   }

  if (canMsg.can_id==0x030){

    byte receive_30_1st_byte;
  byte OBD_check,cruise_indicator;
   
 for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if (i ==0)
        receive_30_1st_byte =canMsg.data[0];

      cruise_indicator = receive_30_1st_byte & 1;
      OBD_check = receive_30_1st_byte & 2;

      Serial.print("cruise_indicator  ");
      Serial.println(cruise_indicator,HEX);

      OBD_check = OBD_check >> 1;
      Serial.print("OBD_check  ");
      Serial.println(OBD_check ,HEX);
       

 }
}


   if (canMsg.can_id==0x32){
     byte receive_32_1st_byte,receive_32_2nd_byte;

     int engine_speed;
   
 for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");

      if (i== 0)
      receive_32_1st_byte = canMsg.data[0];

      if (i== 1)
      receive_32_2nd_byte = canMsg.data[1];

      engine_speed = receive_32_2nd_byte;
      engine_speed = engine_speed <<8;
      engine_speed = engine_speed | receive_32_1st_byte;

       Serial.print("engine_speed  ");
      Serial.println(engine_speed ,HEX);
 }
   }



  if (canMsg.can_id==0x35){
    byte receive_35_1st_byte;
    byte EPS_warn_lamp;
   
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
      if(i == 0)
      receive_35_1st_byte = canMsg.data[0];

      EPS_warn_lamp = receive_35_1st_byte & 1;
      Serial.print("EPS_warn_lamp  ");
      Serial.println(EPS_warn_lamp ,HEX);

    }

  }


  if (canMsg.can_id==0x020){
      byte receive_20_1st_byte;
      byte receive_20_3rd_byte;
      byte receive_20_4th_byte;

   byte  ESP_warn_lamp,ESP_OFF,ABS_malfunctn;
   int vehicle_speed;
   
    for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");

      if(i == 0)
      byte receive_20_1st_byte = canMsg.data[0];

       if(i == 2)
       byte receive_20_3rd_byte = canMsg.data[2];

        if(i == 3)
        byte receive_20_4th_byte = canMsg.data[4];

      ESP_warn_lamp = receive_20_1st_byte & 0b11;
      ESP_OFF = receive_20_1st_byte & 0b100;
      ABS_malfunctn = receive_20_1st_byte & 0b1000;
      vehicle_speed = receive_20_4th_byte;
      vehicle_speed = vehicle_speed << 8;
     
      vehicle_speed = vehicle_speed |receive_20_3rd_byte;
     
      Serial.print("ESP_warn_lamp  ");
      Serial.println(ESP_warn_lamp ,HEX);

      ESP_OFF = ESP_OFF >>2;
      Serial.print("ESP_OFF  ");
      Serial.println(ESP_OFF,HEX);

      ABS_malfunctn = ESP_OFF >>3;
      Serial.print("ABS_malfunctn ");
      Serial.println(ABS_malfunctn,HEX);

      Serial.print("vehicle_speed ");
      Serial.println(vehicle_speed,HEX);

    }

  }

  if (canMsg.can_id==0x021){

    byte receive_21_1st_byte;
    byte receive_21_2nd_byte;
    byte receive_21_3rd_byte;
    byte receive_21_4th_byte;
    byte receive_21_5th_byte;
    byte receive_21_6th_byte;
    byte receive_21_7th_byte;
    byte receive_21_8th_byte;

    int frnt_left_wheel_speed,frnt_rght_wheel_speed,rear_left_wheel_speed;
int rear_rght_wheel_speed;

   
 for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
      if(i == 0)
        receive_21_1st_byte = canMsg.data[0];
      if(i == 1)
        receive_21_2nd_byte = canMsg.data[1];
      if(i == 2)
        receive_21_3rd_byte = canMsg.data[2];
      if(i == 3)
        receive_21_4th_byte = canMsg.data[3];
      if(i == 4)
        receive_21_5th_byte = canMsg.data[4];
      if(i == 5)
        receive_21_6th_byte = canMsg.data[5];
      if(i == 6)
        receive_21_7th_byte = canMsg.data[6];
      if(i == 7)
        receive_21_8th_byte = canMsg.data[7];

    frnt_left_wheel_speed = receive_21_2nd_byte;
    frnt_left_wheel_speed = frnt_left_wheel_speed << 8;
    frnt_left_wheel_speed = frnt_left_wheel_speed | receive_21_1st_byte;

    frnt_rght_wheel_speed = receive_21_4th_byte;
    frnt_rght_wheel_speed = frnt_rght_wheel_speed << 8;
    frnt_rght_wheel_speed = frnt_rght_wheel_speed | receive_21_3rd_byte;

    rear_left_wheel_speed = receive_21_6th_byte;
    rear_left_wheel_speed = rear_left_wheel_speed << 8;
    rear_left_wheel_speed = rear_left_wheel_speed | receive_21_5th_byte;

    rear_rght_wheel_speed = receive_21_8th_byte;
    rear_rght_wheel_speed = rear_rght_wheel_speed << 8;
    rear_rght_wheel_speed = rear_rght_wheel_speed | receive_21_7th_byte;

    Serial.print("frnt_left_wheel_speed ");
    Serial.println(frnt_left_wheel_speed,HEX);

    Serial.print("frnt_rght_wheel_speed ");
    Serial.println(frnt_rght_wheel_speed,HEX);

    Serial.print("rear_left_wheel_speed ");
    Serial.println(rear_left_wheel_speed,HEX);

    Serial.print("rear_rght_wheel_speed ");
    Serial.println(rear_rght_wheel_speed,HEX);



   }

  }


  if (canMsg.can_id==0x042){

    byte receive_42_1st_byte;
    byte RKE_unlock,RKE_trunk_open,RKE_search,RKE_panic,RKE_mute_unmute;
byte RKE_lock,RKE_fuel_lid_open;
   
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");

        if(i == 0)
        receive_42_1st_byte =canMsg.data[0];

      RKE_fuel_lid_open = receive_42_1st_byte & 1;
      RKE_lock = receive_42_1st_byte & 2;
      RKE_mute_unmute = receive_42_1st_byte & 4;
      RKE_panic = receive_42_1st_byte & 8;
      RKE_search = receive_42_1st_byte & 16;
      RKE_trunk_open = receive_42_1st_byte & 32;
      RKE_unlock = receive_42_1st_byte & 64;


      Serial.print("RKE_fuel_lid_open ");
      Serial.println(RKE_fuel_lid_open,HEX);

      RKE_lock = RKE_lock >>1;
      Serial.print("RKE_lock ");
      Serial.println(RKE_lock,HEX);

      RKE_mute_unmute = RKE_mute_unmute >>2;
      Serial.print("RKE_mute_unmute");
      Serial.println(RKE_mute_unmute,HEX);

      RKE_panic= RKE_panic >>3;
      Serial.print("RKE_panic ");
      Serial.println(RKE_panic,HEX);

      RKE_search = RKE_search >>4;
      Serial.print("RKE_search");
      Serial.println(RKE_search,HEX);

      RKE_trunk_open = RKE_trunk_open >>5;
      Serial.print("RKE_trunk_open ");
      Serial.println(RKE_trunk_open,HEX);

      RKE_unlock =  RKE_unlock >>6;
      Serial.print(" RKE_unlock ");
      Serial.println( RKE_unlock,HEX);

     }

 }

  if (canMsg.can_id==0x040){

     byte receive_40_1st_byte;
     byte RPASS_sensor;
   
  for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");

        if(i = 0)
        receive_40_1st_byte = canMsg.data[0];

        RPASS_sensor = receive_40_1st_byte & 0b11111;
        Serial.print(" RPASS_sensor ");
        Serial.println( RPASS_sensor,HEX);

    }

  }

  if (canMsg.can_id==0x010){

    byte receive_10_1st_byte;
    byte SRS_Belt_Warn;
   
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if(i == 0)
        receive_10_1st_byte = canMsg.data[0];

      SRS_Belt_Warn = receive_10_1st_byte & 1;
      Serial.print(" SRS_Belt_Warn ");
      Serial.println( SRS_Belt_Warn,HEX);


    }

  }


  if (canMsg.can_id==0x015){
    byte receive_15_1st_byte;
    byte SRS_Airbag_Warn_lamp;
   
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if(i == 0)
        receive_15_1st_byte = canMsg.data[0];

      SRS_Airbag_Warn_lamp = receive_15_1st_byte & 1;
      Serial.print(" SRS_Airbag_Warn_lamp ");
      Serial.println( SRS_Airbag_Warn_lamp,HEX);



    }

  }

  if (canMsg.can_id==0x038){
    byte receive_38_1st_byte;
    byte Gear_position_sensor;
   
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if(i == 0)
        receive_38_1st_byte = canMsg.data[0];

      Gear_position_sensor = receive_38_1st_byte & 0b11;
      Serial.print(" Gear_position_sensor ");
      Serial.println(Gear_position_sensor,HEX);

    }

  }

 
  if (canMsg.can_id==0x039){
    byte receive_39_1st_byte;
    byte receive_39_2nd_byte;
    byte receive_39_3rd_byte;
    byte receive_39_4th_byte;
    byte receive_39_5th_byte;
    byte receive_39_6th_byte;
    byte receive_39_7th_byte;
    byte receive_39_8th_byte;

byte tyre_press_left_frnt,tyre_press_left_bck,tyre_press_rght_bck;
byte tyre_press_rght_frnt,tyre_temp_back_left,tyre_temp_bck_rght,tyre_temp_frnt_left,
byte tyre_temp_frnt_rght;
   
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");

        if(i == 0)
        receive_39_1st_byte = canMsg.data[0];

        if(i == 1)
        receive_39_2nd_byte = canMsg.data[1];

        if(i == 2)
        receive_39_3rd_byte = canMsg.data[2];

        if(i == 3)
        receive_39_4th_byte = canMsg.data[3];

        if(i == 4)
        receive_39_5th_byte = canMsg.data[4];

        if(i == 5)
        receive_39_6th_byte = canMsg.data[5];

        if(i == 6)
        receive_39_7th_byte = canMsg.data[6];

        if(i == 7)
        receive_39_8th_byte = canMsg.data[7];

      tyre_press_left_frnt = receive_39_1st_byte & 0b11111111;
      tyre_press_left_bck  = receive_39_2nd_byte & 0b11111111;
      tyre_press_rght_bck  = receive_39_3rd_byte & 0b11111111;
      tyre_press_rght_frnt = receive_39_4th_byte & 0b11111111;
      tyre_temp_back_left  = receive_39_5th_byte & 0b11111111;
      tyre_temp_bck_rght   = receive_39_6th_byte & 0b11111111;
      tyre_temp_frnt_left  = receive_39_7th_byte & 0b11111111;
      tyre_temp_frnt_rght  = receive_39_8th_byte & 0b11111111;

      Serial.print(" tyre_press_left_frnt ");
      Serial.println(tyre_press_left_frnt,HEX);

      Serial.print(" tyre_press_left_bck ");
      Serial.println(tyre_press_left_bck,HEX);

      Serial.print(" tyre_press_rght_bck ");
      Serial.println(tyre_press_rght_bck,HEX);

      Serial.print(" tyre_press_rght_frnt ");
      Serial.println(tyre_press_rght_frnt,HEX);

      Serial.print(" tyre_temp_back_left ");
      Serial.println(tyre_temp_back_left,HEX);

      Serial.print(" tyre_temp_bck_rght ");
      Serial.println(tyre_temp_bck_rght,HEX);

      Serial.print(" tyre_temp_frnt_left ");
      Serial.println(tyre_temp_frnt_left,HEX);

      Serial.print(" tyre_temp_frnt_rght ");
      Serial.println(tyre_temp_frnt_rght,HEX);
 

    }

  }


  if (canMsg.can_id==0x041){
    byte receive_41_1st_byte;
    byte Tiretronics;
   
for (int i = 0; i<canMsg.can_dlc; i++)  {  // print the data
//       Serial.println(canMsg.data[i],HEX);
//       Serial.print(" ");
        if(i == 0)
        receive_41_1st_byte = canMsg.data[0];

      Tiretronics = receive_41_1st_byte & 0b11;
      Serial.print(" Tiretronics ");
      Serial.println(Tiretronics,HEX);

    }

  }

}*/

//=====CAN Message - Transmitting signal==========


byte Turn_lft,Turn_rgt,Hazard,Vehicle_Arm_status,Rear_FOG;
byte Frnt_Fog_lamp,Park_Engine_lamp,LOW_fuel_level,Door_frnt_left_status;
byte Door_Trunk_Status,Door_frnt_Right_status,Door_lid_status;
byte Door_Rear_Lft_status,Door_Rear_Rgt_status;
byte Head_Lamp,Battery_Charge_Warning,Rain_Light_Sensor
byte Ampient_Temperature,Glow_Plug_indicator,Cruise_Indicator;
byte Water_in_Fuel_Pump,LOW_EOP_Warn,OBD_Chck_LAMP,Start_Stop_Lamp,Engine_check;
byte DPF_Warn_Lamp;

//==================BCM_1 __0x050===================

Turn_lft = 0b01;
Turn_rgt = 0b01;
Hazard = 0b01;
Vehicle_Arm_status = 0b1;
 Rear_FOG = 0b1;

Turn_rgt = Turn_rgt << 2;
Hazard = Hazard << 4;
Vehicle_Arm_status = Vehicle_Arm_status <<6;
Rear_FOG = Rear_FOG << 7;


canMsg1.data[0] = Rear_FOG | Vehicle_Arm_status | Hazard |Turn_rgt | Turn_lft;

Serial.println("Message sent");

Frnt_Fog_lamp = 0b1;
Park_Engine_lamp = 0b1;
LOW_fuel_level = 0b01011;
Door_frnt_left_status = 0b1;

canMsg1.data[1] = Frnt_Fog_lamp | Park_Engine_lamp<<1 |LOW_fuel_level<<2
|Door_frnt_left_status <<7 ;

Door_Trunk_Status = 0b1;
Door_frnt_Right_status = 0b1;
Door_lid_status = 0b1;
Door_Rear_Lft_status = 0b1;
Door_Rear_Rgt_status = 0b1;
Head_Lamp = 0b01;
Battery_Charge_Warning = 0b1;

canMsg1.data[2] = Door_Trunk_Status |Door_frnt_Right_status <<1
| Door_lid_status << 2 |Door_Rear_Lft_status << 3 | Door_Rear_Rgt_status<<4
|Head_Lamp <<5 | Battery_Charge_Warning << 7 ;

Rain_Light_Sensor = 0b101;
canMsg1.data[3] = Rain_Light_Sensor & 0b111;
delay(100);
mcp2515.sendMessage(&canMsg1);

//===========CAN_ID_ 0x055=================
Ampient_Temperature = 0x85;
canMsg2.data[0] = Ampient_Temperature & 0xFF;
mcp2515.sendMessage(&canMsg2);
delay(50);

//===========CAN_ID_ 0x065============================

Glow_Plug_indicator = 0b1;
Cruise_Indicator = 0b1;
Water_in_Fuel_Pump = 0b1;
LOW_EOP_Warn =0b1;
OBD_Chck_LAMP = 0b1;
DPF_Warn_Lamp = 0b1;
Start_Stop_Lamp = 0b1;
Engine_check = 0b1;
canMsg3.data[0] = Glow_Plug_indicator | Cruise_Indicator << 1
|Water_in_Fuel_Pump << 2 | LOW_EOP_Warn << 3 |OBD_Chck_LAMP << 4 |DPF_Warn_Lamp<< 5
| Start_Stop_Lamp << 6 | Engine_check << 7 ;

byte Reduced_Power_Warn = 0b1;
byte DEF_idicator = 0b1;
byte ECT_lamp = 0b1;

canMsg3.data[1] = ECT_lamp| DEF_idicator << 1 |Reduced_Power_Warn << 2;
mcp2515.sendMessage(&canMsg3);
delay(50);

//==============CAN_ID_ 0x070====================================================
int Engine_speed = random(0,3000);
canMsg4.data[0] = Engine_speed & 0xFF;
canMsg4.data[1] = (Engine_speed>>8) & 0xFF;

mcp2515.sendMessage(&canMsg4);
delay(50);

//=====================CAN_ID 0x75=================================

byte EPS_WARN = 0b1;
canMsg5.data[0] = EPS_WARN & 0b1;

mcp2515.sendMessage(&canMsg5);
delay(50);

//================CAN_ID 0x80===============================
byte EPS_Warn_Lamp = 0b01;
byte ESP_OFF = 0b1;
byte Over_Speed_Warning = 0b1;
byte ABS_Malfunction_Lamp =0b1;
int Vehicle_Speed = random(0,120);
canMsg6.data[0] = EPS_Warn_Lamp | ESP_OFF <<2 |Over_Speed_Warning <<3
|ABS_Malfunction_Lamp <<4 ;

canMsg6.data[1] = Vehicle_Speed & 0xFF;
canMsg6.data[2] = (Vehicle_Speed>>8) & 0xFF;

mcp2515.sendMessage(&canMsg6);
delay(50);

//======================CAN_ID 0x085===========================
int Front_Right_Wheel =random (0,120);
int Front_Left_Wheel =random (0,120);
int Rear_Left_Wheel =random (0,120);
int Rear_Right_Wheel =random (0,120);

canMsg7.data[0] = Front_Right_Wheel & 0xFF;
canMsg7.data[1] = (Front_Right_Wheel>>8) & 0xFF;

canMsg7.data[2] = Front_Left_Wheel & 0xFF;
canMsg7.data[3] = (Front_Left_Wheel>>8) & 0xFF;

canMsg7.data[4] = Rear_Left_Wheel & 0xFF;
canMsg7.data[5] = (Rear_Left_Wheel>>8) & 0xFF;

canMsg7.data[6] = Rear_Right_Wheel & 0xFF;
canMsg7.data[7] = (Rear_Right_Wheel>>8) & 0xFF;

mcp2515.sendMessage(&canMsg7);

delay(50);

//============CAN_ID 0x060=======================================

byte SRS_WARN_Lamp = 0b1;
byte Seat_Belt = 0b1;

canMsg8.data[0] = Seat_Belt |SRS_WARN_Lamp << 1;
mcp2515.sendMessage(&canMsg8);
delay(50);

//================CAN_ID 0x098========================

byte Transfer_CASE_ECU = 0b1;
canMsg9.data[0] = Transfer_CASE_ECU & 0xFF;

mcp2515.sendMessage(&canMsg9);
delay(50);
//======================CAN_ID 0x090=====================
byte RKE_UNLOCK =0b1;
byte RKE_TRUNK_OPEN = 0b1;
byte RKE_SEARCH = 0b1;
byte RKE_PANIC = 0b1;
byte RKE_MUTE_UNMUTE = 0b1;
byte RKE_LOCK = 0b1;
byte RKE_FUEL_LID_OPEN = 0b1;

canMsg10.data[0] = RKE_FUEL_LID_OPEN | RKE_LOCK<<1 |RKE_MUTE_UNMUTE <<2
|RKE_PANIC <<3|RKE_SEARCH << 4 |RKE_TRUNK_OPEN << 5|RKE_UNLOCK <<6;
mcp2515.sendMessage(&canMsg10);
delay(50);

//=====================CAN_ID 0x095================
byte GEAR_POSITION_SENSOR = 0b01;

canMsg11.data[0] = GEAR_POSITION_SENSOR & 0x03;
mcp2515.sendMessage(&canMsg11);
delay(50);

//========================CAN_ID 0x099=============================
byte TIREtronics= 0b1;;
int Tyre_Pressure_Frnt_Lft = random(0,49);
int Tyre_Pressure_Frnt_Right = random(0,49);
int Tyre_Pressure_Rear_Lft = random(0,49);
int Tyre_Pressure_Rear_Right =random(0,49);
int Tyre_Temp_Frnt_Lft = random(-11,90);;
int Tyre_Temp_Frnt_Right = random(-11,90);
int Tyre_Temp_Rear_Lft = random(-11,90);;
int Tyre_Temp_Rear_Right = random(-11,90);;

canMsg12.data[0] =TIREtronics<<7|Tyre_Pressure_Frnt_Lft & 0x7F;
canMsg12.data[1] =Tyre_Pressure_Frnt_Right & 0xFF;
canMsg12.data[2] = Tyre_Pressure_Rear_Lft & 0xFF;
canMsg12.data[3] = Tyre_Pressure_Rear_Right & 0xFF;
canMsg12.data[4] = Tyre_Temp_Frnt_Lft & 0xFF;
canMsg12.data[5] = Tyre_Temp_Frnt_Right & 0xFF;
canMsg12.data[6] = Tyre_Temp_Rear_Lft & 0xFF;
canMsg12.data[7] = Tyre_Temp_Rear_Right & 0xFF;

mcp2515.sendMessage(&canMsg12);
delay(50);

}


Seat Belt Reminder Logic:
//SEATBELT
//Anusha M S___26/10/22
The requirement for seat belt logic is taken from

float vehicle_speed=6;
bool Driver_sw =0,Passenger_sw=0,Pod_dr=1,Pod_ps= 0,state,status;
int ignition_key_cylinder =3,beep,timer;
bool seat_belt_warn_lamp,Buzzer;

//=============================
int initialarm(int b){
Buzzer = 1;
for(int i = 0;i< b;i++){
seat_belt_warn_lamp = 1;
Serial.println("Seatbelt indicator and buzzer on");
delay(20);
Buzzer = 0;
delay(280);
seat_belt_warn_lamp = 0;
delay(300);
}
return;
}

//=====================================================

int alarm_off(){
 seat_belt_warn_lamp = Buzzer = 0;
 Serial.println("Buzzer and Warn_Lamp OFF");
}

//================================================================================================
int slow_beep(){

  do{
   
    seat_belt_warn_lamp = Buzzer = 1;
    Serial.println("Slow Beep");
    delay(650);
    seat_belt_warn_lamp = Buzzer = 0;
    delay(350);
    if(vehicle_speed >5)
      break;
   

  }while ( Driver_sw & Passenger_sw == 0);


}

int fast_beep(){

  do{
   
    seat_belt_warn_lamp = Buzzer = 1;
    Serial.println("Fast Beep");
    delay(220);
    seat_belt_warn_lamp = Buzzer = 0;
    delay(110);

  }while ( Driver_sw & Passenger_sw == 0);

}

int slow_chime(){

seat_belt_warn_lamp = Buzzer = 1;
Serial.println("Slow chime");
delay(650);
seat_belt_warn_lamp = Buzzer = 0;
delay(554);

}

//===========================================
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);


}

void loop() {
  // put your main code here, to run repeatedly:

if (ignition_key_cylinder == 2){

  beep= 2;
  initialarm(beep);
  }


else if(ignition_key_cylinder == 3 ){
    status = check_seat();

 

  if (status == 0){

    millis();
    while (millis() < 6000){
      slow_chime();

    }
 

    if (millis() > 6000){
      if(vehicle_speed < 5){
   
        slow_beep();
      }

      else if(vehicle_speed > 5){
   
    fast_beep();
    }
  }
  }
  else if (status == 1){
    alarm_off();

  }
  }
/*
  if( Driver_sw==1 & Passenger_sw ==1 & Rear_lft_blt_sw == 1 & Rear_lft_blt_sw == 1 & Rear_middle_sw == 1){
    Serialprintln("Seatbelt_buckled");
    alarm_off();
   
  }*/

}



int check_seat(){
if (Pod_dr & Pod_ps == 1){
  if (Driver_sw & Passenger_sw == 1) {

  int state = 1;
  return(state);
  }
  else
  int state = 0;
  return(state);
}
else if (Pod_dr & Pod_ps == 0){
  if (Pod_dr & Driver_sw == 1 ){
  int state = 1;
  return(state);

  }
  else if (Pod_dr & Driver_sw == 0 ){
    int state = 0;
    return(state);

  }

}

}



CAN Communication Matrix

CAN Communication Matrix is prepared using CANdB++