#include #include #include #include #include #include #include #include #include // подключим стандартную библиотеку I2C #include // термодатчики гидропривода и электродвигателя #include // термодатчики гидропривода и электродвигателя #include "MPU6050.h" #include "I2Cdev.h" #include "Wire.h" #include "Math.h" #include #define addr 0x1E // I2C адрес цифрового компаса HMC5883L #define ONE_WIRE_BUS 9 //адрес onewire термодатчиков #define TEMPERATURE_PRECISION 9 //точность определения температуры (бит-мс-LSB C град., 12-750-0,0625, 11-375-0,125, 10-187,5-0,25, 9-93,75-0,5) OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); Servo myservo; Adafruit_PCD8544 display = Adafruit_PCD8544(8, 7, 6, 5, 4); MPU6050 accelgyro; GyverBME280 bme; int16_t ax, ay, az; int16_t gx, gy, gz; int analogPin = 1; // номер порта к которому подключен потенциометр int val = 0; // переменная для хранения считываемого значения int srvpin = 2; //вывод сервы int i = 0; //счетчик float summa = 0; // переменная суммирования значений резистора float delitel = 20; // кол-во считываний резистора float itog=0; //итоговая переменная float ugol=0;// переменная угла float maxugol = 50; //максимальный угол поворота сервопривода тнвд int schetchik=0; // счетчик для событий, по нажатию кнопки в лог отправляется строка "метка №___" а на видео или в записке записать условия данных int sersp=19200;// скорость сериал int lcdrezim=1; //вариант экранчика с клавы, по умолчанию 1 String zametka=(""); //переменная заметки при нажатии кнопок ABCD для внесения заметок в лог int schetchikzametok=0; //переменная для нумерации заметок int schetchiktestov=0; //переменная для нумерации тестов int dieselproc=0; //процент использования дизеля long presspa=0; //давление воздуха в паскалях int powerproc=0; //лимит дизеля в % unsigned long currentTimeMillis=0; //переменная хранения милисекунд с начала работы программы long hours; long minutes; long seconds; // переменные часов минут и секунд long totalSeconds = 0; //переменная секунд общего времени - мс переводим в секунды long remainingSeconds = 0; //остаток от деления общего колва секунд на 3600, остаток, колво секунд не вошедших в полные часы int encoderPinA = 30; // пин а энкодера int encoderPinB = 28; // пимн Б энкодера float rpmkolesa = 0.0; // обороты колеса в минуту int direction = 0; // движение - 1 = вперед, 0 = назад unsigned long pulseDuration = 0; // длительность импульса энкодера int aState = 0; // состояние вывода А int bState = 0; // состояние вывода Б float maxpower=55; //итоговый ограничитель мощности дизеля float speed=0; // переменная скорости //настройка клавиатуры const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; //подключения клавиатуры byte rowPins[ROWS] = {40,38,36,32}; byte colPins[COLS] = {48,46,44,42}; Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //подключения радиоконтроля int signala = 49; int signalb = 53; int signalc = 47; int signald = 51; //конец подключений радио //переменные со старой версии программы, некоторые могут быть неиспользуемыми. String a; float aaa=0; float xugol=0; float yugol=0; float zugol=0; float temper=0; float vlazn=0; float pressure=0; int schetchika=0; int schetchikb=0; int flagtemps=0; int maslo =0; int eldvig = 0; unsigned long pozition=0; int razr=0; unsigned long impuls; String posylka; unsigned long flaga=0; unsigned long counter=0; unsigned long timme =0; int amps =0; float ampfact=0; //начало лого const unsigned char PROGMEM smileBmp[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x03, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x30, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x18, 0x70, 0x00, 0x80, 0x00, 0x1c, 0x30, 0x0f, 0x80, 0x00, 0x00, 0x38, 0x60, 0x01, 0xc0, 0x00, 0x3c, 0x30, 0x1d, 0x80, 0x00, 0x00, 0x30, 0xe0, 0x01, 0x80, 0xe0, 0x7c, 0x30, 0x19, 0xc0, 0x00, 0x01, 0x30, 0xc0, 0x03, 0x83, 0xe0, 0xec, 0x30, 0x18, 0xc0, 0x00, 0x03, 0xf0, 0xc0, 0x03, 0x07, 0xc1, 0xdc, 0x70, 0x38, 0xe0, 0x00, 0x07, 0xf0, 0xc0, 0x07, 0x1e, 0xc3, 0x98, 0xf0, 0x33, 0xf0, 0x00, 0x06, 0x7f, 0xc0, 0x06, 0x3d, 0xc7, 0x19, 0xf0, 0x3f, 0xb8, 0x00, 0x0e, 0x1f, 0xc0, 0x0e, 0x71, 0x8e, 0x1f, 0xb0, 0x7e, 0x1c, 0x00, 0x0c, 0x03, 0xf0, 0x1d, 0xe3, 0x9e, 0x1f, 0x30, 0x60, 0x0e, 0x00, 0x1c, 0x00, 0x7c, 0x1f, 0xc3, 0x18, 0x1c, 0x30, 0x60, 0x07, 0x00, 0x18, 0x00, 0x1c, 0x3f, 0x07, 0x38, 0x00, 0x30, 0xe0, 0x03, 0x80, 0x00, 0x00, 0x18, 0x3c, 0x0e, 0x70, 0x00, 0x30, 0xc0, 0x01, 0xc0, 0x00, 0x00, 0x38, 0x38, 0x0c, 0x60, 0x00, 0x30, 0xc0, 0x00, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x1c, 0x00, 0x00, 0x38, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; //конец лого void setup() { // инициализация и очистка дисплея display.begin(); display.clearDisplay(); display.display(); display.setContrast(55); // установка контраста delay(100); display.setTextSize(1); // установка размера шрифта display.setTextColor(BLACK); // установка цвета текста display.setCursor(0,0); // установка позиции курсора display.drawBitmap(0, 0, smileBmp, 84, 44, BLACK); display.display(); delay(5000); display.clearDisplay(); display.println("System - on"); display.display(); delay(500); display.clearDisplay(); display.display(); //настройка коммуникаций display.print("Serial - "); display.display(); Serial.begin(sersp); // инициализация последовательного порта display.println(sersp); delay(100); display.display(); display.print("i2c - "); display.display(); Wire.begin(); // инициализация I2C display.println("OK"); display.display(); delay(100); // Задаём режим работы датчика HMC5883: display.print("HMC5883 - "); display.display(); Wire.beginTransmission(addr); Wire.write(0x00); // выбираем регистр управления CRA (00) Wire.write(0x70); // записываем в него 0x70 [усреднение по 8 точкам, 15 Гц, нормальные измерения] Wire.write(0xA0); // записываем в регистр CRB (01) 0xA0 [чувствительность = 5] Wire.write(0x00); // записываем в регистр Mode (02) 0x00 [бесконечный режим измерения] Wire.endTransmission(); display.println(addr); display.display(); delay(100); //настройка сервопривода display.print("servo pin "); display.display(); myservo.attach(srvpin); display.println(srvpin); display.display(); delay(100); //настройка гироскопа display.print("gyro - "); display.display(); accelgyro.initialize(); accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_16); //максимум ускорение -8 g, есть варики 2,4,8,16 (+-) accelgyro.setFullScaleGyroRange(MPU6050_GYRO_FS_2000);//максимум угловая скорость градусов в секунду, тут 1000, есть варианты 250 500 1000 2000 bme.begin(0x76); display.println("OK"); display.display(); delay(100); //настройка датчиков температуры масла и двигателя display.print("Temppin-"); display.display(); sensors.begin(); display.println("9"); display.display(); //подтягивающие резисторы энкодера pinMode(encoderPinA, INPUT); pinMode(encoderPinB, INPUT); delay(2500); } void loop() { currentTimeMillis = millis();//считываем время работы текущее pozition = pozition+1; //счетчик проходов //начало чтения радиомодуля - лимит сервы if (digitalRead(signala)==1){ maxpower=maxugol*0; } if (digitalRead(signalb)==1){ maxpower=maxugol/10*3; } if (digitalRead(signalc)==1){ maxpower=maxugol/10*6; } if (digitalRead(signald)==1){ maxpower=maxugol*1; } //конец чтения радиомодуля - лимит сервы //работа с серво for (int i = 0; i < (delitel+1); i++) { val = analogRead(analogPin); // считываем значение summa=summa+val; delay(1); // Небольшая задержка между измерениями } itog=summa/delitel; ugol = map(itog, 0, 1080, 0, maxugol); if (ugol>maxpower){ ugol=maxpower; } myservo.write(ugol); powerproc = map(maxpower, 0, 55, 0, 100); dieselproc = map(ugol, 0, maxugol, 0, 100); // конец работы с серво //работа с компасом Wire.beginTransmission(addr); Wire.write(0x03); // переходим к регистру 0x03 Wire.endTransmission(); Wire.requestFrom(addr, 6); // запрашиваем 6 байтов int h = Wire.read(); // старший байт значения по оси X int l = Wire.read(); // младший байт значения по оси X int x = word(h, l); // объединяем в двухбайтовое число int y = Wire.read(); // старший байт значения по оси Y y = y << 8; // сдвигаем влево на 8 битов y = y | Wire.read(); // объединяем с младшим байтом по OR int z = Wire.read() << 8; // читаем байт и сдвигаем влево на 8 битов z |= Wire.read(); // сокращённый синтаксис операции OR - судя по всему результат вывода компаса //конец работы с компасом //работа с гироскопом accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); //перевод значений АЦП датчика в ускорения в g, перевод это в углы наклона и обороты в секунду //для перемещений gx gy gz aaa=ax; float aax=aaa/32768*16;//ускорение по Х, 16 - это максимум разрешение по ускорению из сетапа гироскопа aaa=ay; float aay=aaa/32768*16;//ускорение по У aaa=az; float aaz=aaa/32768*16;//Ускорение по Z xugol= atan(aax/(sqrt((aay*aay)+(aaz*aaz))))*57,3; yugol= atan(aay/(sqrt((aax*aax)+(aaz*aaz))))*57,3; zugol= atan(aaz/(sqrt((aax*aax)+(aay*aay))))*57,3; aaa=gx; float ggx=(aaa/32768*2000)*0.0027777; // обороты в секунду по Х aaa=gy; float ggy=aaa/32768*2000*0.0027777;// обороты в секунду по У aaa=gz; float ggz=aaa/32768*2000*0.0027777;// обороты в секунду по Z //конец работы с гироскопом //начало работы с метеодатчиком temper=bme.readTemperature(); vlazn=bme.readHumidity(); a=bme.readPressure(); pressure=(a.toInt())/133.3219; //переводим ПА в мм рт столба //конец работы с метеодатчиком //начало работы с датчиками температуры электропривода и гидравлического масла if (schetchika<601){ //цикл замера температуры - каждый 601 подход, хоть время и уменьшено битностью в начале, но на прошивке висит серва дросселя, чтобы небыло задержек управления делаем с большим таймером~20 секунд schetchika=schetchika+1; flagtemps=0; } else{ schetchika=0; flagtemps=1; sensors.requestTemperatures(); maslo = sensors.getTempCByIndex(0); eldvig = sensors.getTempCByIndex(1); } //конец работы с датчиками температуры электропривода и гидравлического масла //работа с энкодером на колесе старт //чтение пинов // Измерение длительности импульса LOW на пине A pulseDuration = pulseIn(encoderPinA, LOW, 12000); if (pulseDuration > 0) { // Чтение состояния пина B в момент обнаружения импульса на пине A aState = digitalRead(encoderPinA); bState = digitalRead(encoderPinB); // Определение направления вращения if (bState == 1) { direction = 1; // Вперед } else { direction = 0; // Назад } // Вычисление rpmkolesa rpmkolesa = 60000000.0 / (pulseDuration * 600.0); // 60000000 мкс в 1 минуте } else { rpmkolesa = 0.0; // Если импульс не обнаружен, rpmkolesa = 0 direction = 2; // Неизвестное направление } speed =rpmkolesa*0.785*60/1000; //скорость в кмч //работа с энкодером на колесе конец char key = keypad.getKey();// считываем показания клавиатуры //работа с клавиатурой по кнопкам начало if (key=='A'){ schetchikzametok=schetchikzametok+1; zametka.concat("t!"); // символ старта строки zametka.concat(pozition); // номер прохода программы zametka.concat("!"); zametka.concat("zametka_N_"); zametka.concat(schetchikzametok); Serial.println(zametka); zametka=(""); display.clearDisplay(); display.println("Zametka N"); display.println(schetchikzametok); display.display(); delay(150); } if (key=='B'){ schetchiktestov=schetchiktestov+1; zametka.concat("t!"); // символ старта строки zametka.concat(pozition); // номер прохода программы zametka.concat("!"); zametka.concat("test_N_"); zametka.concat(schetchiktestov); Serial.println(zametka); zametka=(""); display.clearDisplay(); display.println("Test N"); display.println(schetchiktestov); display.display(); delay(800); } if (key=='C'){ lcdrezim=10; } if (key=='D'){ } if (key=='1'){ lcdrezim=1; } if (key=='2'){ lcdrezim=2; } if (key=='3'){ lcdrezim=3; } if (key=='4'){ lcdrezim=4; } if (key=='5'){ lcdrezim=5; } if (key=='6'){ lcdrezim=6; } if (key=='7'){ lcdrezim=7; } if (key=='8'){ //lcdrezim=8; } if (key=='9'){ //lcdrezim=9; } //работа с клавиатурой по кнопкам конец // вывод на lcd if (schetchika %5 ==0){//проверяем, если счетчик термодатчиков делится без остатка на 30 - остаток деления равен 0, то делаем вывод на экранчик //1 экранчик - заслонка ТНВД, температуры дизеля и масла if (lcdrezim==1){ display.clearDisplay(); display.println("Diesel power"); display.print(dieselproc); display.println(" %"); display.println("Diesel temp:"); display.print(eldvig); display.println(" C"); display.println("Transm. temp"); display.print(maslo); display.println(" C"); display.display(); } //конец 1 экранчика //2 экранчик if (lcdrezim==2){ presspa = pressure*133.3219; display.clearDisplay(); display.println("Meteosensor:"); display.print("Temp: "); display.print(temper); display.println(" C "); display.println("Pressure: "); display.print(pressure); display.println(" mmHg "); display.print(presspa); display.println(" Pa"); display.display(); } //конец 2 экранчика //3 экранчик if (lcdrezim==3){ display.clearDisplay(); display.println("Ugli naklona:"); display.print("X: "); display.println(xugol); display.print("Y: "); display.println(yugol); display.print("X: "); display.println(zugol); display.display(); } //конец 3 экранчика //4 экранчик if (lcdrezim==4){ display.clearDisplay(); display.println("Compass:"); display.print("X: "); display.println(x); display.print("Y: "); display.println(y); display.print("X: "); display.println(z); display.display(); } //конец 4 экранчика //5 экранчик if (lcdrezim==5){ display.clearDisplay(); display.println("Limit diselya:"); display.print(powerproc); display.println(" %"); display.println("Ispolsuetsya:"); display.print(dieselproc); display.println(" %"); display.display(); } //конец 5 экранчика //6 экранчик if (lcdrezim==6){ display.clearDisplay(); display.println("Temp's:"); display.print("Diesel: "); display.println(eldvig); display.print("Transm: "); display.println(maslo); display.print("Vozduh: "); display.println(temper); display.display(); } //конец 6 экранчика //Экранчик С - время работы самописца начало if (lcdrezim==10){ // Переводим миллисекунды в секунды totalSeconds = currentTimeMillis / 1000; // Вычисляем часы и остаток от деления hours = totalSeconds / 3600; remainingSeconds = totalSeconds % 3600; // Вычисляем минуты и секунды minutes = remainingSeconds / 60; seconds = remainingSeconds % 60; display.clearDisplay(); display.println("Zamer nomer:"); display.println(pozition); display.println(" Uptime:"); display.print("Chasy:"); display.println(hours); display.print("Minuti:"); display.println(minutes); display.print("Secundi: "); display.println(seconds); display.display(); } //Экранчик С - время работы самописца конец //7 экранчик - скорость движения и обороты дизеля if (lcdrezim==7){ display.clearDisplay(); display.println("Skorost kmh:"); display.println(speed); display.println("Rpm kolesa:"); display.println(rpmkolesa); display.println("Napravlenie:"); if (direction==1){ display.println("D"); } if (direction==0){ display.println("R"); } if (direction==2){ display.println("Stop"); } display.display(); } //конец 7 экранчика } //конец вывода на lcd //тут общий вывод в сериал posylka.concat("s!"); // символ старта строки posylka.concat(pozition); // номер прохода программы posylka.concat("!"); posylka.concat(currentTimeMillis); // время работы программы в мс posylka.concat("!"); posylka.concat(rpmkolesa); // обороты колеса в минуту posylka.concat("!"); posylka.concat(direction); // направление движения posylka.concat("!"); posylka.concat(speed); // скорость кмч posylka.concat("!"); posylka.concat(pulseDuration); // длительность импульса энкодера колеса posylka.concat("!"); posylka.concat(temper); // температура воздуха posylka.concat("!"); posylka.concat(pressure); //атмосферное давление posylka.concat("!"); posylka.concat(x); //компас по х posylka.concat("!"); posylka.concat(y); //компас по у posylka.concat("!"); posylka.concat(z); //компас по z posylka.concat("!"); posylka.concat(aax); //ускорение х posylka.concat("!"); posylka.concat(aay); //ускорение у posylka.concat("!"); posylka.concat(aaz); //ускорение z posylka.concat("!"); posylka.concat(xugol); //угол х posylka.concat("!"); posylka.concat(yugol); //угол у posylka.concat("!"); posylka.concat(zugol); //угол z posylka.concat("!"); posylka.concat(ggx); //вращение по х обороты в минуту posylka.concat("!"); posylka.concat(ggy); //вращение по у обороты в минуту posylka.concat("!"); posylka.concat(ggz); //вращение по z обороты в минуту posylka.concat("!"); posylka.concat(flagtemps); //флаг прохода с замером температуры posylka.concat("!"); posylka.concat(maslo); //температура гидросистемы posylka.concat("!"); posylka.concat(eldvig); //температура двигателя posylka.concat("!"); posylka.concat(itog); //итоговое значение переменника газа posylka.concat("!"); posylka.concat(ugol); //угол отклонения сервы posylka.concat("!"); posylka.concat(dieselproc); //процент использования дизеля posylka.concat("!"); posylka.concat(maxpower); //ограничитель мощности дизеля posylka.concat("!"); posylka.concat(lcdrezim); //страница экранчика posylka.concat("!"); posylka.concat(aState); posylka.concat("!"); posylka.concat(bState); posylka.concat("!"); posylka.concat("e");//символ конца строки Serial.println(posylka); posylka=(""); //обнуление переменных при необходимости itog=0; summa=0; }