PHP код:
#include <LiquidCrystalRus.h> //БИБЛИОТЕКА lcd экрана
#include <OneWire.h> //БИБЛИОТЕКА цифровой датчик
volatile unsigned long t0; //обороты
volatile unsigned long t1; //обороты
volatile unsigned long dt; //обороты
OneWire ds(7); //ЦИФРОВОЙ ДАТЧИК температуры на цифровом 7 пине
LiquidCrystalRus lcd(12, 11, 10, 5, 4, 3, 1); // вместо 2 поставил 1 пин
int rpm; //переменная оборотов
int volt; // ++++++++переделать переменная напряжения
String volt_str; // для разделения числа на составные числа
int temp; //переменная температуры аналогового датчика температуры
String temp_str; // ????? отладка ?????????????????????????
int obog; //просто переменная
int x = 0; //переменная ключ, для вывода времени в пути и температуры на улице
boolean pitanie = LOW; // переменная габаритов
boolean gabarit = LOW; // ключ переменная габаритов
int Temp2; //!!!!!!!!!!!!!!??????????????????1!!!!!!!!!!!!!!!???????????????
int times2 = 1; // для моргания подсветкой при предельных значениях
int cur_millis , lastTick = 0; // переменные времени в пути
int mins, hour = 0; // время в пути
//==============================================================================================================
void setup()
{
millis(); // Время пошло
lcd.begin(16, 2); // Инициализация экрана 16 х 2
attachInterrupt(0, blink, FALLING); //прерывания обороты
t1 = 0; //
dt = 0; //
pinMode(8, OUTPUT); // 8 пин определяем как выход
digitalWrite(8, LOW); // на 8 пине земля
obog = 1; //
pinMode (6, INPUT); // пин для ГАБАРИТОВ
pinMode(9, OUTPUT); // пин для управления подсветкой экрана
digitalWrite(9, LOW); // подсветка выключена
pinMode(13, OUTPUT); // пин для мигания подсветкой экрана при предельных значениях.
digitalWrite(13, LOW); // подсветка не мигает-выключена
//------------------------вывод начальной инфы
lcd.setCursor(0, 0);
lcd.print("Хозяин Т");
lcd.setCursor(0, 1);
lcd.print("ЕЛ");
delay (1000);
lcd.clear(); //очистка экрана
lcd.setCursor(0, 0);
lcd.print("91672345");
lcd.setCursor(0, 1);
lcd.print("67");
delay (3000);
lcd.clear(); //очистка экрана
}
//==========================================================================================================
void loop() {
//------------------------------- определение времени мин. в пути----------------------------------------
cur_millis = millis() / 1000 / 60;
if (cur_millis - lastTick >= 1) {
lastTick = cur_millis;
mins++;
}
//--------------------------------определение состояния габаритов------------------------------------
if (digitalRead(6) == HIGH && pitanie == LOW) { // ВОЗМОЖНО ПРОЩЕ
gabarit = !gabarit; //
pitanie = HIGH;
}
else { pitanie = digitalRead(6); }
//-----------------------------------включение подсветки-----------------
if (digitalRead(6) == HIGH) {
digitalWrite(9, HIGH);
digitalWrite(13, HIGH);
}
else { digitalWrite(9, LOW); }
//-----------------------------------цифровой датчик начало-----------
{
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
delay(750);
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
Temp2 = (data[1]<<8)+data[0];
Temp2 = Temp2>>4;
lcd.setCursor(14,1);
lcd.print(Temp2); // вывод цифрового датчика температуры
lcd.print(" "); // стераем старое лишнее
}
// -------------------------------цифровой датчик конец--------------
if (dt == 0) //
rpm = 0; //
else //
rpm = 60000000 / dt /50 * 50; // обороты
//----------------------------------------
volt = analogRead(4); //считывание вольт
volt = volt * 1.925; //вольты в нормальный вид, без запятой
volt_str = String(volt); //
if (volt_str.length() < 4) { volt_str = " " + volt_str; } //
//------------------------------------------
temp = analogRead(5); // считывание температуры
temp = temp * 0.48189 - 273; // температура в градусах цельсия
temp_str = String(temp); //
if (temp_str.length() < 2) { temp_str = " " + temp_str; } //
if (temp_str.length() < 3) { temp_str = " " + temp_str; } //
//------------------------------------------
if (temp < 40) // ЗАДАНИЕ ТЕМПЕРАТУРЫ ВКЛЮЧЕНИЯ...доп. оборудования
if (obog == 1) // !!!!!!!!!!!!!!!возможно упростить как с подсветкой lcd!!!!!!!!!!!!
{ //
digitalWrite(8, LOW); //
obog = 1 - obog; //
}
if (temp > 40) //ЗАДАНИЕ ТЕМПЕРАТУРЫ ВКЛЮЧЕНИЯ...
if (obog == 0) //
{
digitalWrite(8, HIGH); //
obog = 1 - obog; //
}
//++++++++++++++++++++++++ВЫВОД НА ЭКРАН++++++++++++++++++++++++++++++++++++++
if (rpm < 1000) { // мотор не заведен
lcd.setCursor(0,0);
lcd.print(temp);
lcd.print("c");
lcd.print(" ");
lcd.setCursor(5,0);
lcd.print(volt_str[0]);
lcd.print(volt_str[1]);
lcd.print(".");
lcd.setCursor(0,1);
lcd.print(volt_str[2]);
lcd.print(volt_str[3]);
// 1 3 9 c _ 1 2 . 3 4 пример, температура _ напряжение
delay(500);
}
// --------------------------------
if (gabarit == LOW && rpm > 1000) { // вкл...выкл и мотор работает
if(x == 0) {
lcd.clear(); //очистка экрана
if (mins >=60) { hour++; mins = 0; }
lcd.setCursor(0, 0);
lcd.print(hour); //вывод часов в пути
lcd.print(":");
if (mins < 10) {lcd.print("0");}
lcd.print(mins); // вывод минут в пути
lcd.print(" ");
lcd.print(Temp2); // вывод температуры на улице
lcd.print("c");
lcd.print(" ");
delay(2000);
lcd.clear(); //очистка экрана
x = 1; // изменяем ключ, чтоб только один раз использовался цикл
}
else
{
lcd.setCursor(0, 0);
lcd.print(rpm);
if (rpm <= 9999) { lcd.print(" "); }
lcd.setCursor(5, 0);
lcd.print(volt_str[0]);
lcd.print(volt_str[1]);
lcd.print(".");
lcd.setCursor(0,1);
lcd.print(volt_str[2]);
lcd.print(volt_str[3]);
// 9 9 9 9 _ 1 2 . 3 4 пример, обороты _ напряжение
delay(500);
}
}
//-------------------------------------------------
if (gabarit == HIGH && rpm > 1000) { // вкл...выкл мотор работает
if(x == 1) {
lcd.clear(); //очистка экрана
if (mins >=60) { hour++; mins = 0; }
lcd.setCursor(0, 0);
lcd.print(hour); //вывод часов в пути
lcd.print(":");
if (mins < 10) {lcd.print("0");}
lcd.print(mins); // вывод минут в пути
lcd.print(" ");
lcd.print(Temp2); // вывод температуры на улице
lcd.print("c");
lcd.print(" ");
delay(2000); // жде 2сек
lcd.clear(); //очистка экрана
x = 0; // изменяем ключ, чтоб только один раз использовался цикл
}
else
{
lcd.setCursor(0,0); //
lcd.print(rpm); //
lcd.print(" ");
if (rpm <= 9999) { lcd.print(" "); } // стераем лишнее
lcd.setCursor(6,0); //
lcd.print(temp_str[0]);
lcd.print(temp_str[1]);
lcd.setCursor(0,1);
lcd.print(temp_str[2]);
lcd.print("c");
// 9 9 9 9 _ _ 1 3 9 c пример, обороты _ температура
delay(500);
}
}
//--------------маргание подсветкой экрана при предельных значениях-------------
if (volt < 1150 || volt > 1450 || temp > 125) { // УСЛОВИЯ
if (millis() / 1000 >= times2 + 30) { // ИНТЕРВАЛ!!!!!!!!!!!
lcd.clear(); //очистка экрана
lcd.setCursor(0, 0);
//-------------------
float volt2; //переменная с запятой
volt2 = volt;
volt2 = volt2 / 100; // вольты в нормальном виде
if (volt < 1150) {lcd.print(volt2); lcd.print("v!");} //вывод предельных значений
if (volt > 1450) {lcd.print(volt2); lcd.print("v!");} //вывод предельных значений
if (temp > 125) {lcd.print(temp); lcd.print("c!!!"); } //вывод предельных значений
if (temp > 125 && (volt < 1150 || volt > 1450)) {lcd.setCursor(0, 0);
lcd.print(temp); lcd.print("c"); lcd.print(volt2);} //вывод предельных значений
//-------------------
digitalWrite(13, LOW); // цикл моргания подсветки
delay(200);
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH); //2
delay(100);
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH); //3
delay(100);
digitalWrite(13, LOW);
delay(300);
digitalWrite(13, HIGH); //3
delay(100);
lcd.clear(); //очистка экрана
times2 = millis() / 1000; // переменная для цикла
}
}
}
//++++++++++++++++++++++++++++++ПРЕРЫВАНИЯ. ОБОРОТЫ ДВИЖКА+++++++++++++++++++++
void blink()
{
noInterrupts();
t0 = t1;
t1 = micros();
if (t0 > 0)
if (t0 < t1)
if (t1 - t0 > 5000)
{
dt = t1 - t0;
if (dt > 500000) dt = 0;
}
else
t1 = 0;
interrupts();
}
А может и TX и RX оба через делитель пустить???