Advertisement
Technics66

CAN_Trip_v0.1_SwithCase

Nov 23rd, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.34 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. int autoVoltage;
  22. int autoVoltageInt;
  23. int autoVoltageDec;
  24. //Часы из CAN шины
  25. int year;
  26. int month;
  27. int day;
  28. int hour;
  29. int minutes;
  30. int isIgnitionEnable;
  31. int canIlluminationBrightness;
  32. int canIlluminationEnable;
  33. int levelBrightness[16] = {5,7,10,13,19,24,30,35,60,80,120,150,190,220,240,255};
  34. int rightKey;
  35. int rightKeyFlag = 0;
  36. char lineDisplayOne[17];
  37. char lineDisplayTwo[17];
  38. int displayBrightness = 255;
  39. int screenDisplay = 1;
  40. unsigned long timingDelayPrint = 0;
  41.  
  42.  
  43. void setup(){
  44.   Serial.begin(115200);
  45.   //Инициализация CAN
  46.   SPI.begin();
  47.  
  48.   mcp2515.reset();
  49.   mcp2515.setBitrate(CAN_125KBPS);
  50.   mcp2515.setFilterMask(MCP2515::MASK0, false, 0x0000000F); //mcp2515.setFilterMask(MCP2515::MASK0, false, 0xFFFFFFFF);
  51.   mcp2515.setFilterMask(MCP2515::MASK1, false, 0xFFFFFFFF);
  52.   mcp2515.setFilter(MCP2515::RXF0, false, 0x006); //mcp2515.setFilter(MCP2515::RXF0, false, 0x0F6);
  53.   mcp2515.setFilter(MCP2515::RXF1, false, 0x000); //mcp2515.setFilter(MCP2515::RXF1, false, 0x0B6);
  54.   mcp2515.setFilter(MCP2515::RXF2, false, 0x161);
  55.   mcp2515.setFilter(MCP2515::RXF3, false, 0x221); //mcp2515.setFilter(MCP2515::RXF3, false, 0x276);
  56.   mcp2515.setFilter(MCP2515::RXF4, false, 0x000); //mcp2515.setFilter(MCP2515::RXF4, false, 0x036);
  57.   mcp2515.setFilter(MCP2515::RXF5, false, 0x000);
  58.   mcp2515.setNormalMode();
  59.  
  60.   pinMode(9, OUTPUT);
  61.  
  62. //Инициализация дисплея
  63.   lcd.begin(16, 2);
  64.   analogWrite(9, displayBrightness);
  65.   lcd.setCursor(4,0);
  66.   lcd.print("Welcome");
  67.   lcd.setCursor(2,1);
  68.   lcd.print("to Citroen C4");
  69.   delay (3000);
  70.   lcd.clear();
  71. }
  72.  
  73. void loop(){
  74.  
  75.   if(mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK){
  76.     switch (canMsg.can_id){
  77.       case 0x0F6:
  78.         isIgnitionEnable = (canMsg.data[0]&0x08);
  79.         tempEngine = (canMsg.data[1] - 41);
  80.         tempExternal = (canMsg.data[6]/2 - 40);
  81.         break;
  82.       case 0x0B6:
  83.         autoRpm = ((canMsg.data[0]*256 + canMsg.data[1])>>3);
  84.         autoSpeed = ((canMsg.data[2]*256 + canMsg.data[3])/100);
  85.         break;
  86.       case 0x161:
  87.         tempOil = (canMsg.data[2] - 41);
  88.         break;
  89.       case 0x276:
  90.         year = ((canMsg.data[0]&0x7F)+2000);
  91.         month = (canMsg.data[1]&0x0F);
  92.         day = (canMsg.data[2]&0x1F);
  93.         hour = (canMsg.data[3]&0x1F);
  94.         minutes = (canMsg.data[4]&0x3F);
  95.         break;
  96.       case 0x036:
  97.         canIlluminationBrightness = (canMsg.data[3]&0x0F);
  98.         canIlluminationEnable = (canMsg.data[3]&0x20>>5);
  99.         break;
  100.       case 0x221:
  101.         rightKey = (canMsg.data[0]&0x01);
  102.         break;
  103.       case 0x0E6:
  104.         autoVoltage = ((canMsg.data[5]+144)/2);
  105.         break;
  106.     }
  107.   }
  108. // <<Обработка кнопки>>
  109.   if (rightKey&&!rightKeyFlag){
  110.     rightKeyFlag=1;
  111.     screenDisplay = ++screenDisplay % 3;    
  112.   }
  113.   if (!rightKey&&rightKeyFlag){
  114.     rightKeyFlag=0;
  115.   }
  116.  
  117. //<<управление подсветкой>>    
  118.     if (isIgnitionEnable){
  119.       displayBrightness = levelBrightness[canIlluminationBrightness];
  120.       }
  121.       else {
  122.         displayBrightness = 0;
  123.         }
  124.    
  125.     if (millis() - timingDelayPrint > 250){
  126.       timingDelayPrint = millis();
  127.       analogWrite(9, displayBrightness);
  128.       switch (screenDisplay){
  129.         case 0: // Дата время
  130.           sprintf(lineDisplayOne,"%02d:%02d %02d-%02d-%04d", hour, minutes, day, month, year);
  131.           lcd.setCursor(0,0);
  132.           lcd.print(lineDisplayOne);
  133.           sprintf(lineDisplayTwo,"%3d\xDF\C    %3dkm/h", tempExternal, autoSpeed);
  134.           lcd.setCursor(0,1);
  135.           lcd.print(lineDisplayTwo);
  136.           break;
  137.         case 1: //Прогрев
  138.           sprintf(lineDisplayOne,"c:%3d\xDF\C  e:%3d\xDF\C", tempEngine, tempExternal);
  139.           lcd.setCursor(0,0);
  140.           lcd.print(lineDisplayOne);
  141.           sprintf(lineDisplayTwo,"%02d.%01dv    %4drpm",autoVoltage/10, autoVoltage%10, autoRpm);
  142.           lcd.setCursor(0,1);
  143.           lcd.print(lineDisplayTwo);
  144.           break;
  145.         case 2: //Температуры
  146.           sprintf(lineDisplayOne,"%3d\xDF  %3d\xDF  %3d\xDF", tempEngine, tempOil, tempExternal);
  147.           lcd.setCursor(0,0);
  148.           lcd.print(lineDisplayOne);
  149.           sprintf(lineDisplayTwo,"%02d         %02d.%01dv", canIlluminationBrightness, autoVoltage/10, autoVoltage%10);
  150.           lcd.setCursor(0,1);
  151.           lcd.print(lineDisplayTwo);
  152.           break;
  153.         }
  154.       }
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement