Показать сообщение отдельно
Старый 26.01.2016, 07:17   #765
Ruster 2.0
Участник клуба
 
Аватар для Ruster 2.0
Подробнее

Онлайн: Ruster 2.0 вне форума
Был(а): 2021-12-14 07:12
Имя: Рустам
Адрес: Ижевск
Автомобиль: Duster Adventure 2.0 4x4
По умолчанию Re: Установка термометра в Дастер

Выкладываю скетч, на несоответствие некоторых комментарии прошу не обращать внимание.
Меняя некоторые значения можно корректировать показания а также их добавлять/убирать , изменять дизайн шрифтов и размеры.
Прежде чем залить скетч скачайте из инета бесплатные библиотеки "U8glib.h",<OneWire.h>, <DallasTemperature.h>


Во всех вольтметрах дополнительно подключаемых в автомобиле есть проблемка! не учитывается падение напряжения на проводах, в результате отображаемое значение занижено на 0,1-0,5в. Для исключения этого в своем вольтметре добавил "1.58- коэф. коррекции вольтметра" его можно подбирать конкретно под каждый автомобиль предварительно замеряя напряжение на АКБ цифровым вольтметром


#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 10 on the Arduino
#define ONE_WIRE_BUS 10
#define TEMPERATURE_PRECISION 9


// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device addresses
DeviceAddress insideThermometer, outsideThermometer, motorThermometer;

U8GLIB_PCD8544 u8g(3, 4, 7, 5, 6);

//акб пустой
#define u8g_logo_width 24
#define u8g_logo_height 13

static unsigned char u8g_logo_bits[] U8G_PROGMEM =
{ B01111100, B00000000, B00111110,
B01111100, B00000000, B00111110,
B11111111, B11111111, B11111111,
B00000001, B00000000, B10000000,
B00000001, B00000000, B10001000,
B00000001, B00000000, B10001000,
B01111101, B00000000, B10111110,
B00000001, B00000000, B10001000,
B00000001, B00000000, B10001000,
B00000001, B00000000, B10000000,
B00000001, B00000000, B10000000,
B00000001, B00000000, B10000000,
B11111111, B11111111, B11111111,
};

//акб полный
#define u8g_log_width 24
#define u8g_log_height 13

static unsigned char u8g_log_bits[] U8G_PROGMEM =
{ B01111100, B00000000, B00111110,
B01111100, B00000000, B00111110,
B11111111, B11111111, B11111111,
B11111111, B11111111, B11111111,
B11111111, B11111111, B11110111,
B11111111, B11111111, B11110111,
B10000011, B11111111, B11000001,
B11111111, B11111111, B11110111,
B11111111, B11111111, B11110111,
B11111111, B11111111, B11111111,
B11111111, B11111111, B11111111,
B11111111, B11111111, B11111111,
B11111111, B11111111, B11111111,
};

//знак ремня
#define u8g_belt_width 16
#define u8g_belt_height 17

static unsigned char u8g_belt_bits[] U8G_PROGMEM =
{ B10000000, B00000000,
B11000000, B00000001,
B11000000, B00010011,
B11000000, B00011011,
B10000000, B00001101,
B11100000, B00000111,
B11110000, B00000100,
B01110000, B00001110,
B00110000, B00001111,
B11011000, B00011111,
B11001000, B00011111,
B00001100, B00111000,
B11101110, B00111111,
B00111011, B01101100,
B00011000, B00001100,
B00110000, B00001100,
B01110000, B00000110
};
// вольтметр
const int analogInPin = A0; // Analog input pin
float sensorValue = 0; // value read from the pot
float outputValue = 0;

struct {
int temperature_inside;
int temperature_outside;
int temperature_motor;


} var;

void setup(void) {
pinMode(9, INPUT_PULLUP);

// Start ds18b20 up the library
sensors.begin();
// locate devices on the bus
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
sensors.setResolution(motorThermometer, 10);

#ifdef DEBUG
#else
sensors.getAddress(insideThermometer, 2);
sensors.getAddress(outsideThermometer, 0);
sensors.getAddress(motorThermometer, 1);
#endif

// set the resolution to 9 bit
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(motorThermometer, TEMPERATURE_PRECISION);
}
char* formatTemp(char* buf, int temp) {
// "%d.%d" количество знаков после запятой
sprintf(buf, "%d", temp / 10, abs(temp) % 10);
return buf;
}

void draw(void) {
char buf[20];

// улица температура
u8g.setFont(u8g_font_gdb20r);
u8g.setPrintPos(0, 20);
u8g.print(formatTemp(buf, var.temperature_inside));
u8g.setFont(u8g_font_7x14Br);
u8g.print("c");
// салона температура
u8g.setFont(u8g_font_timB14r);
u8g.setPrintPos(2, 34);
u8g.print(formatTemp(buf, var.temperature_outside));
u8g.setFont(u8g_font_7x14Br);
u8g.print("c");
// температура двигателя
u8g.setFont(u8g_font_timB14r);
u8g.setPrintPos(2, 48);
u8g.print(formatTemp(buf, var.temperature_motor));
u8g.setFont(u8g_font_7x14Br);
u8g.print("c");
// вольтметр
u8g.setFont(u8g_font_timB14r);
u8g.setPrintPos(45, 48);
u8g.print(outputValue, 1);
u8g.setFont(u8g_font_7x14Br);
u8g.print("v");

// акб graphic commands to redraw the complete screen should be placed here
if ( outputValue <= 12 ) // если напряжение меньше или равно 12в показывать "пустой акб"
{
u8g.drawXBMP( 60, 21, u8g_logo_width, u8g_logo_height, u8g_logo_bits);
}
else
{
u8g.drawXBMP( 60, 21, u8g_log_width, u8g_log_height, u8g_log_bits);
}

// знак ремня graphic commands to redraw the complete screen should be placed here
int sensorVal = digitalRead(9);
if (sensorVal == LOW) {
u8g.drawXBMP( 64, 2, u8g_belt_width, u8g_belt_height, u8g_belt_bits);
}
else {

}

}

void loop(void) {

// измеряем температуру
sensors.requestTemperatures();
var.temperature_inside = (sensors.getTempC(insideThermometer) + 0.05) * 10;
var.temperature_outside = (sensors.getTempC(outsideThermometer) + 0.05) * 10;
var.temperature_motor = (sensors.getTempC(motorThermometer) + 0.05) * 10;
// read the analog in value:
sensorValue = analogRead(analogInPin);
outputValue = map(sensorValue, 0, 1023, 0, 20)*1.58; // 1.58- коэф. коррекции вольтметра


// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );

// rebuild the picture after some delay
delay(50);
}
__________________
Русские называют дорогой то место, где собираются проехать

Последний раз редактировалось Ruster 2.0; 26.01.2016 в 10:15.
  Ответить с цитированием

Это может быть интересно

Дастершоп77.ру - всё для Рено Дастер!