Плата
Скетч
#include "U8glib.h"
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 4
// 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);
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
const int buttonPin = 12;
const int AlcoOnPin = 13; //Цифровой выход на включение датчика MQ-3
const int AlcoReadPin = A0; //Аналоговый вход на прием данных с датчика MQ-3
const int analogBat = A1; // Аналоговий вхід для заміра напруги бортової мережі
int buttonState = 0;
void setup() {
Serial.begin(9600);
sensors.begin(); // Запускаем библиотеку измерения температуры
pinMode(buttonPin, INPUT);
pinMode(AlcoOnPin, OUTPUT);
digitalWrite(AlcoOnPin, LOW);
analogReference(EXTERNAL);
u8g.firstPage();
do {
u8g.setFont(u8g_font_10x20);
u8g.drawStr(30, 24, "F I A T");
} while( u8g.nextPage());
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
VoltTemp();
} else {
AlcoTest();
}
}
void VoltTemp() {
float RawValue = 0; // Зчитане значення напруги з аналогового входу
for (byte i=0; i<20; i++){
RawValue = RawValue + analogRead(analogBat); // Зчитуем значення напруги
delay(100);
}
RawValue = RawValue / 20;
float Vin = (RawValue * 2.5) / 1023.0; // Розрааховуем заначення напруги делителя
float Vbat = Vin / (14.8 / (14.8 + 101.8)); // Рсчитываем заначение напряжения борт. сети (R2 / (R1 + R2)
if (Vbat < 12.00) tone(10, 3000, 1000); // Включаем сигнал если напряжение на бортсети меньше 11.5В
sensors.requestTemperatures(); // Запрос на измерение темпенатурі
float Temp = sensors.getTempCByIndex(0); // Получение значения температурі
u8g.firstPage();
do {
// graphic commands to redraw the complete screen should be placed here
u8g.setFont(u8g_font_9x15);
u8g.setPrintPos(20, 10);
u8g.print(Vbat);
u8g.drawStr( 100, 10, "V");
u8g.setPrintPos(20, 30);
u8g.print(Temp);
u8g.drawStr( 100, 30, "C");
} while( u8g.nextPage());
}
void AlcoTest() {
digitalWrite(AlcoOnPin, HIGH); // Включаем MQ-3
// Выдержка времени для прогрева датчика
int timer = 30;
for (int i=0; i <= 30; i++){
u8g.firstPage();
do {
u8g.setFont(u8g_font_10x20);
u8g.setPrintPos(55, 24);
u8g.print(timer);
} while( u8g.nextPage());
timer=timer-1;
delay(1000);
}
// Подаем звуковой сигнал после прогрева MQ-3
u8g.firstPage();
do {
u8g.setFont(u8g_font_10x20);
u8g.drawStr(20, 24, "S T A R T");
} while( u8g.nextPage());
delay (1000);
tone(10, 3000, 400);
delay(1000);
tone(10, 3000, 400);
delay(1000);
tone(10, 3000, 400);
delay(1000);
// Дуем
buttonState = 0;
while (buttonState == LOW){ // Крутим цикл пока не нажата кнопка
buttonState = digitalRead(buttonPin);
int sensorValue = analogRead(AlcoReadPin);
int AlcoTester = map(sensorValue, 350, 1023, 0, 100);
u8g.firstPage();
do {
u8g.setFont(u8g_font_10x20);
u8g.setPrintPos(50, 24);
u8g.print(AlcoTester);
} while( u8g.nextPage());
delay (100);
}
u8g.firstPage();
do {
u8g.setFont(u8g_font_10x20);
u8g.drawStr(25, 24, "E X I T");
} while( u8g.nextPage());
delay (1000); // Задержка для нажатия кнопки для выхода из режима алкотестера
digitalWrite(AlcoOnPin, LOW); // Вsключаем MQ-3
}
Комментарии
Отправить комментарий