Advertisement
Technics66

CAN_Trip_v0.1

Nov 23rd, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.83 KB | None | 0 0
  1. //Подключаем библиотеки
  2. #include <Wire.h>               // Библиотека I2C
  3. #include <SPI.h>                // Библиотека SPI
  4. //#include <can.h>                // Библиотера CAN
  5. #include <mcp2515.h>
  6. #include <LiquidCrystal.h>      // Библиотека дисплея
  7. //#include <LiquidCrystal_I2C.h>  // Библиотера дисплея I2C
  8.  
  9. struct can_frame canMsg;
  10. MCP2515 mcp2515(10);
  11.  
  12. const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
  13. LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
  14. //LiquidCrystal_I2C lcd(0x27,16,2);
  15. //Переменные
  16. int tempExternal;               //Внешняя температура
  17. int tempEngine;                 //Температура двигателя
  18. int tempOil;                    //Температура масла
  19. int autoRpm;                    //Обороты двигателя
  20. int autoSpeed;                  //Скорость
  21. //Часы из CAN шины
  22. int year;
  23. int month;
  24. int day;
  25. int hour;
  26. int minutes;
  27. int isIgnitionEnable;
  28. int canIlluminationBrightness;
  29. int canIlluminationEnable;
  30. int levelBrightness[16] = {5,10,15,20,25,30,60,90,120,200,210,220,230,240,250,255};
  31. char lineDisplayOne[17];
  32. char lineDisplayTwo[17];
  33. int displayBrightness = 255;
  34. unsigned long timingDelayPrint = 0;
  35.  
  36.  
  37. void setup(){
  38.   Serial.begin(115200);
  39.   //Инициализация CAN
  40.   SPI.begin();
  41.  
  42.   mcp2515.reset();
  43.   mcp2515.setBitrate(CAN_125KBPS);
  44.   mcp2515.setFilterMask(MCP2515::MASK0, false, 0xFFFFFFFF);
  45.   mcp2515.setFilterMask(MCP2515::MASK1, false, 0xFFFFFFFF);
  46.   mcp2515.setFilter(MCP2515::RXF0, false, 0x0F6);
  47.   mcp2515.setFilter(MCP2515::RXF1, false, 0x0B6);
  48.   mcp2515.setFilter(MCP2515::RXF2, false, 0x161);
  49.   mcp2515.setFilter(MCP2515::RXF3, false, 0x276);
  50.   mcp2515.setFilter(MCP2515::RXF4, false, 0x036);
  51.   mcp2515.setFilter(MCP2515::RXF5, false, 0x000);
  52.   mcp2515.setNormalMode();
  53.  
  54.   pinMode(9, OUTPUT);
  55.   //pinMode(8, OUTPUT);
  56.  
  57. //Инициализация дисплея
  58.   lcd.begin(16, 2);
  59.   analogWrite(9, displayBrightness);
  60.   lcd.setCursor(4,0);
  61.   lcd.print("Welcome");
  62.   lcd.setCursor(2,1);
  63.   lcd.print("to Citroen C4");
  64.   delay (3000);
  65.   lcd.clear();
  66. }
  67.  
  68. void loop(){
  69.     if(mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
  70.       if(canMsg.can_id == 0x0F6) isIgnitionEnable = (canMsg.data[0]&0x08), tempEngine = (canMsg.data[1] - 41), tempExternal = (canMsg.data[6]/2 - 40);
  71.       else if (canMsg.can_id == 0x0B6) autoRpm = ((canMsg.data[0]*256 + canMsg.data[1])>>3), autoSpeed = ((canMsg.data[2]*256 + canMsg.data[3])/100);
  72.       else if (canMsg.can_id == 0x161) tempOil = (canMsg.data[2] - 41);
  73.       else if (canMsg.can_id == 0x276) year = ((canMsg.data[0]&0x7F)+2000), month = (canMsg.data[1]&0x0F), day = (canMsg.data[2]&0x1F), hour = (canMsg.data[3]&0x1F), minutes = (canMsg.data[4]&0x3F);
  74.       else if (canMsg.can_id == 0x036) canIlluminationBrightness = (canMsg.data[3]&0x0F), canIlluminationEnable = (canMsg.data[3]&0x20>>5);
  75.       //else return;
  76.     }
  77.    
  78.     if (isIgnitionEnable){
  79.       displayBrightness = levelBrightness[canIlluminationBrightness];
  80.       }
  81.       else {
  82.         displayBrightness = 0;
  83.         }
  84.    
  85.     if (millis() - timingDelayPrint > 500){
  86.       timingDelayPrint = millis();
  87.       analogWrite(9, displayBrightness);
  88.       sprintf(lineDisplayOne,"%02d %02d %3d %3d\xDF\C", canIlluminationEnable, canIlluminationBrightness, autoSpeed, tempExternal);
  89.       //sprintf(sauto,"%02d:%02d %02d-%02d-%04d",hour,minutes,day,month,year);
  90.       //sprintf(sauto,"Ext%3d   %3dkm/h",t_ext,auto_speed);
  91.       lcd.setCursor(0,0);
  92.       lcd.print(lineDisplayOne);
  93.       sprintf(lineDisplayTwo,"%3d\xDF\C %3d\xDF\C%4d", tempEngine, tempOil, autoRpm);
  94.       //sprintf(stemp,"c%3do%3d %4drpm",t_engine,t_oil,auto_rpm);
  95.       lcd.setCursor(0,1);
  96.       lcd.print(lineDisplayTwo);
  97.       }
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement