Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Подключаем библиотеки
- #include <Wire.h> // Библиотека I2C
- #include <SPI.h> // Библиотека SPI
- //#include <can.h> // Библиотера CAN
- #include <mcp2515.h>
- #include <LiquidCrystal.h> // Библиотека дисплея
- //#include <LiquidCrystal_I2C.h> // Библиотера дисплея I2C
- struct can_frame canMsg;
- MCP2515 mcp2515(10);
- const int rs = 7, en = 6, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- //LiquidCrystal_I2C lcd(0x27,16,2);
- //Переменные
- int tempExternal; //Внешняя температура
- int tempEngine; //Температура двигателя
- int tempOil; //Температура масла
- int autoRpm; //Обороты двигателя
- int autoSpeed; //Скорость
- //Часы из CAN шины
- int year;
- int month;
- int day;
- int hour;
- int minutes;
- int isIgnitionEnable;
- int canIlluminationBrightness;
- int canIlluminationEnable;
- int levelBrightness[16] = {5,10,15,20,25,30,60,90,120,200,210,220,230,240,250,255};
- char lineDisplayOne[17];
- char lineDisplayTwo[17];
- int displayBrightness = 255;
- unsigned long timingDelayPrint = 0;
- void setup(){
- Serial.begin(115200);
- //Инициализация CAN
- SPI.begin();
- mcp2515.reset();
- mcp2515.setBitrate(CAN_125KBPS);
- mcp2515.setFilterMask(MCP2515::MASK0, false, 0xFFFFFFFF);
- mcp2515.setFilterMask(MCP2515::MASK1, false, 0xFFFFFFFF);
- mcp2515.setFilter(MCP2515::RXF0, false, 0x0F6);
- mcp2515.setFilter(MCP2515::RXF1, false, 0x0B6);
- mcp2515.setFilter(MCP2515::RXF2, false, 0x161);
- mcp2515.setFilter(MCP2515::RXF3, false, 0x276);
- mcp2515.setFilter(MCP2515::RXF4, false, 0x036);
- mcp2515.setFilter(MCP2515::RXF5, false, 0x000);
- mcp2515.setNormalMode();
- pinMode(9, OUTPUT);
- //pinMode(8, OUTPUT);
- //Инициализация дисплея
- lcd.begin(16, 2);
- analogWrite(9, displayBrightness);
- lcd.setCursor(4,0);
- lcd.print("Welcome");
- lcd.setCursor(2,1);
- lcd.print("to Citroen C4");
- delay (3000);
- lcd.clear();
- }
- void loop(){
- if(mcp2515.readMessage(&canMsg) == MCP2515::ERROR_OK) {
- if(canMsg.can_id == 0x0F6) isIgnitionEnable = (canMsg.data[0]&0x08), tempEngine = (canMsg.data[1] - 41), tempExternal = (canMsg.data[6]/2 - 40);
- else if (canMsg.can_id == 0x0B6) autoRpm = ((canMsg.data[0]*256 + canMsg.data[1])>>3), autoSpeed = ((canMsg.data[2]*256 + canMsg.data[3])/100);
- else if (canMsg.can_id == 0x161) tempOil = (canMsg.data[2] - 41);
- 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);
- else if (canMsg.can_id == 0x036) canIlluminationBrightness = (canMsg.data[3]&0x0F), canIlluminationEnable = (canMsg.data[3]&0x20>>5);
- //else return;
- }
- if (isIgnitionEnable){
- displayBrightness = levelBrightness[canIlluminationBrightness];
- }
- else {
- displayBrightness = 0;
- }
- if (millis() - timingDelayPrint > 500){
- timingDelayPrint = millis();
- analogWrite(9, displayBrightness);
- sprintf(lineDisplayOne,"%02d %02d %3d %3d\xDF\C", canIlluminationEnable, canIlluminationBrightness, autoSpeed, tempExternal);
- //sprintf(sauto,"%02d:%02d %02d-%02d-%04d",hour,minutes,day,month,year);
- //sprintf(sauto,"Ext%3d %3dkm/h",t_ext,auto_speed);
- lcd.setCursor(0,0);
- lcd.print(lineDisplayOne);
- sprintf(lineDisplayTwo,"%3d\xDF\C %3d\xDF\C%4d", tempEngine, tempOil, autoRpm);
- //sprintf(stemp,"c%3do%3d %4drpm",t_engine,t_oil,auto_rpm);
- lcd.setCursor(0,1);
- lcd.print(lineDisplayTwo);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement