/**************************************************************************
 Торсиометр Дорохова. Для версии торсиометра 2.5. версия ПО-2.0. на SSD1306 
**************************************************************************/

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 // Пин сброса 

/* Создаем объект дисплея SSD1306, подключенного к I2C (выводы SDA, SCL)*/
Adafruit_SSD1306 display(OLED_RESET);

int pin6 = 6;                     // цифровой порт вход/выхода 6 для транзистора
int pin = 7;                      // вход 7 для замеров
int val[8];                      //создаём массив на 8 для переменных
int knop;                          // переменная для кнопок
int korr;                          // переменная коррекции

void setup()
{
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Инициализирует дисплей. Адрес 0x3C для 128x32                    
  pinMode(pin6, OUTPUT);     // устанавливается режим портов - выход
  digitalWrite(pin6, HIGH);    // подаем 1 на выход 6 начальное состояние
  pinMode(pin, INPUT);          // ножка 7 как вход
  pinMode(A0, INPUT);           // вход опроса кнопки
  korr = 13600;                 // присвоить значение коррекции
 

}
void loop()
{
     display.clearDisplay(); //очищаем дисплей
     display.setTextSize(2); //размер букв        
     display.setTextColor(WHITE); //цвет букв
     display.setCursor(0,0); //координаты текста          
     display.println("dimension"); //текст измерение
     display.display(); //выводим на дисплей все, что было задано
     
 label1:
    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
    delay(250);
    goto label2;   
    }
    
    goto label1;
    
label2:
        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[7] = max(val[4],val[5]);
     digitalWrite(pin6, HIGH);          // подаем 1 на выход 6
     display.clearDisplay(); //очищаем дисплей
     display.setTextSize(2); //размер букв        
     display.setTextColor(WHITE); //цвет букв
     display.setCursor(0,0); //координаты текста          
     display.println("b"); //текст
     display.setCursor(13,0); //координаты текста          
     display.println(val[6]); //значение фона
     display.setCursor(0,18); 
     display.println("f");
     display.setCursor(13,18); 
     display.println(val[7]); //значение измерений
     display.setCursor(66,0);
     display.println("d");
     display.setCursor(80,0);
     display.println(val[7]-val[6]);
     display.display(); //выводим на дисплей все, что было задано
     delay(250);
     goto label3;
     }
    goto label2;
        
label3:
    knop = analogRead(A0);                   // опрашиваем кнопки
    if ( knop > 0 && knop <100 )          // нажата кнопка измерение
    {
     display.clearDisplay(); //очищаем дисплей
     display.setTextSize(2); //размер букв        
     display.setTextColor(WHITE); //цвет букв
     display.setCursor(0,0); //координаты текста          
     display.println("dimension"); //текст измерение
     display.display(); //выводим на дисплей все, что было задано
    goto label1; 
    }
    goto label3;
   
} 
