/**************************************************************************
 Торсиометр Дорохова. Для версии торсиометра 2.0. версия ПО-3.0. на lcd1602 
**************************************************************************/
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей адрес и строки
int pin6 = 6;                     // цифровой порт вход/выхода 6 для транзистора
int pin = 7;                      // вход 7 для замеров
int val[8];                      //создаём массив на 8 для переменных
int knop;                          // переменная для кнопок
int korr;                          // переменная для коррекции под разброс тиратронов

void setup()
{
  korr = 13600;  // присвоить значения коррекции для импульсов длительностью 15 ms
  lcd.init();                     
  pinMode(pin6, OUTPUT);     // устанавливается режим портов - выход
  digitalWrite(pin6, HIGH);    // подаем 1 на выход 6 начальное состояние
  pinMode(pin, INPUT);          // ножка 7 как вход
  pinMode(A0, INPUT);           // вход опроса кнопок
    lcd.setCursor(0, 1);              // Устанавливаем курсор на вторую строку и нулевой символ
    lcd.print("izm");
    lcd.setCursor(3, 1);              // Устанавливаем курсор на вторую строку и четвёртый символ
    lcd.print("0");                  // Выводим на экран значение 0
    
    lcd.setCursor(0, 0);              // Устанавливаем курсор на первую строку и нулевой символ
    lcd.print("fon");
    lcd.setCursor(3, 0);              // Устанавливаем курсор на первую строку и четвёртый символ
    lcd.print("0");                  // Выводим на экран значение 0
}
void loop()
{
    knop = analogRead(A0);                   // опрашиваем кнопки
    if ( knop >= 0 && knop <100 )          // нажата кнопка измерение
    {
    digitalWrite(pin6, LOW);                // подаем 0 на выход 6
    val[0] = pulseIn (pin, HIGH);
    val[1] = pulseIn (pin, HIGH);
    val[2] = pulseIn (pin, HIGH);
    val[3] = pulseIn (pin, HIGH);
    val[4] = ((val[0]-korr)+(val[1]-korr)+(val[2]-korr)+(val[3]-korr))/4;
    val[0] = pulseIn (pin, HIGH);
    val[1] = pulseIn (pin, HIGH);
    val[2] = pulseIn (pin, HIGH);
    val[3] = pulseIn (pin, HIGH);
    val[5] = ((val[0]-korr)+(val[1]-korr)+(val[2]-korr)+(val[3]-korr))/4;
    val[6] = max(val[4],val[5]);
    digitalWrite(pin6, HIGH);          // подаем 1 на выход 6
    lcd.setCursor(0, 1);              // Устанавливаем курсор на вторую строку и нулевой символ
    lcd.print("izm");
    lcd.setCursor(3, 1);              // Устанавливаем курсор на вторую строку и четвёртый символ
    lcd.print(val[6]);          // Выводим на экран значение измерения
    lcd.setCursor(10, 0);              // Устанавливаем курсор на первую строку и 11 символ
    lcd.print("R");
    
        if ( val[7] != 0 )
    {  
    lcd.setCursor(12, 0);              // Устанавливаем курсор на первую строку и 13 символ
    lcd.print(val[7]-val[6]);          // Выводим на экран значение разници
    }         
    delay(500);
    }
    
        if ( knop > 450 && knop <550 )          // нажата кнопка фон
    {
    digitalWrite(pin6, LOW);                // подаем 0 на выход 6
    val[0] = pulseIn (pin, HIGH);
    val[1] = pulseIn (pin, HIGH);
    val[2] = pulseIn (pin, HIGH);
    val[3] = pulseIn (pin, HIGH);
    val[4] = ((val[0]-korr)+(val[1]-korr)+(val[2]-korr)+(val[3]-korr))/4;
    val[0] = pulseIn (pin, HIGH);
    val[1] = pulseIn (pin, HIGH);
    val[2] = pulseIn (pin, HIGH);
    val[3] = pulseIn (pin, HIGH);
    val[5] = ((val[0]-korr)+(val[1]-korr)+(val[2]-korr)+(val[3]-korr))/4;
    val[7] = max(val[4],val[5]);
    digitalWrite(pin6, HIGH);          // подаем 1 на выход 6
    lcd.setCursor(0, 0);              // Устанавливаем курсор на первую строку и нулевой символ
    lcd.print("fon");
    lcd.setCursor(3, 0);              // Устанавливаем курсор на первую строку и четвёртый символ
    lcd.print(val[7]);          // Выводим на экран значение фона
    lcd.setCursor(10, 0);              // Устанавливаем курсор на первую строку и 11 символ
    lcd.print("R");
    
        if ( val[6] != 0 )
    {  
    lcd.setCursor(12, 0);              // Устанавливаем курсор на первую строку и 13 символ
    lcd.print(val[7]-val[6]);          // Выводим на экран значение разници
    } 
    delay(500);
    }  

} 
