CAN.ino 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. Description: insert CAN Unit to PORT-B,Press buttonA or buttonB to Send message
  3. if received message, screen will display
  4. */
  5. #include <M5Stack.h>
  6. #include "ESP32CAN.h"
  7. #include "CAN_config.h"
  8. #define TX GPIO_NUM_26
  9. #define RX GPIO_NUM_36
  10. CAN_device_t CAN_cfg; // CAN Config
  11. int i = 0;
  12. void header(const char *string, uint16_t color)
  13. {
  14. M5.Lcd.fillScreen(color);
  15. M5.Lcd.setTextSize(1);
  16. M5.Lcd.setTextColor(TFT_WHITE, TFT_BLACK);
  17. M5.Lcd.fillRect(0, 0, 320, 30, TFT_BLACK);
  18. M5.Lcd.setTextDatum(TC_DATUM);
  19. M5.Lcd.drawString(string, 160, 3, 4);
  20. }
  21. void setup() {
  22. M5.begin(true, false, true);
  23. M5.Power.begin();
  24. Serial.println("CAN Unit Send&Received");
  25. header("CAN-Bus Send&Received", BLACK);
  26. M5.Lcd.setCursor(0, 60, 4);
  27. CAN_cfg.speed = CAN_SPEED_125KBPS;
  28. CAN_cfg.tx_pin_id = TX;
  29. CAN_cfg.rx_pin_id = RX;
  30. CAN_cfg.rx_queue = xQueueCreate(10,sizeof(CAN_frame_t));
  31. // Init CAN Module
  32. ESP32Can.CANInit();
  33. }
  34. void loop() {
  35. CAN_frame_t rx_frame;
  36. if(M5.BtnA.wasPressed()){
  37. rx_frame.FIR.B.FF = CAN_frame_std;
  38. rx_frame.MsgID = 1;
  39. rx_frame.FIR.B.DLC = 8;
  40. rx_frame.data.u8[0] = 'H';
  41. rx_frame.data.u8[1] = 'e';
  42. rx_frame.data.u8[2] = 'l';
  43. rx_frame.data.u8[3] = 'l';
  44. rx_frame.data.u8[4] = 'o';
  45. rx_frame.data.u8[5] = 'C';
  46. rx_frame.data.u8[6] = 'A';
  47. rx_frame.data.u8[7] = 'N';
  48. ESP32Can.CANWriteFrame(&rx_frame);
  49. M5.Lcd.println("Send Message");
  50. }
  51. if(M5.BtnB.wasPressed()){
  52. rx_frame.FIR.B.FF = CAN_frame_std;
  53. rx_frame.MsgID = 1;
  54. rx_frame.FIR.B.DLC = 8;
  55. rx_frame.data.u8[0] = 'M';
  56. rx_frame.data.u8[1] = '5';
  57. rx_frame.data.u8[2] = 'S';
  58. rx_frame.data.u8[3] = 'T';
  59. rx_frame.data.u8[4] = 'A';
  60. rx_frame.data.u8[5] = 'C';
  61. rx_frame.data.u8[6] = 'K';
  62. rx_frame.data.u8[7] = ' ';
  63. ESP32Can.CANWriteFrame(&rx_frame);
  64. M5.Lcd.println("Send Message");
  65. Serial.println("B");
  66. }
  67. if(xQueueReceive(CAN_cfg.rx_queue,&rx_frame, 3*portTICK_PERIOD_MS)==pdTRUE){
  68. M5.Lcd.fillRect(0, 60, 320, 180, BLACK);
  69. M5.Lcd.setCursor(0, 60, 4);
  70. //do stuff!
  71. if(rx_frame.FIR.B.FF==CAN_frame_std){
  72. printf("New standard frame");
  73. M5.Lcd.printf("New standard frame");
  74. } else{
  75. printf("New extended frame");
  76. M5.Lcd.printf("New extended frame");
  77. }
  78. if(rx_frame.FIR.B.RTR==CAN_RTR){
  79. printf(" RTR from 0x%08x, DLC %d\r\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
  80. M5.Lcd.printf(" RTR from 0x%08x, DLC %d\r\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
  81. } else{
  82. printf(" from 0x%08x, DLC %d\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
  83. M5.Lcd.printf(" from 0x%08x, DLC %d\r\n",rx_frame.MsgID, rx_frame.FIR.B.DLC);
  84. for(int i = 0; i < 8; i++){
  85. printf("%c\t", (char)rx_frame.data.u8[i]);
  86. M5.Lcd.printf("%c\t", (char)rx_frame.data.u8[i]);
  87. }
  88. printf("\n");
  89. }
  90. }
  91. M5.update();
  92. delay(200);
  93. }