#include <Wire.h>
#include <HMC5883L.h>
#include "TM1637.h"   // Подключаем библиотеку для работы с модулем

#define CLK 3
#define DIO 2

TM1637 tm1637(CLK, DIO);
 
HMC5883L compass;

int vol[18];  //создаём массив на 19.
 
void setup()
{
    
  tm1637.init(); //Инициализация модуля
  tm1637.set(0); //Установка яркости горения сегментов от 0 до 7
  
  // Установка диапазона измерения
  // +/- 0.88 Ga: HMC5883L_RANGE_0_88GA
  // +/- 1.30 Ga: HMC5883L_RANGE_1_3GA (по умолчанию)
  // +/- 1.90 Ga: HMC5883L_RANGE_1_9GA
  // +/- 2.50 Ga: HMC5883L_RANGE_2_5GA
  // +/- 4.00 Ga: HMC5883L_RANGE_4GA
  // +/- 4.70 Ga: HMC5883L_RANGE_4_7GA
  // +/- 5.60 Ga: HMC5883L_RANGE_5_6GA
  // +/- 8.10 Ga: HMC5883L_RANGE_8_1GA
  compass.setRange(HMC5883L_RANGE_0_88GA);
 
  // Установка режима работы
  // Спящий режим: HMC5883L_IDLE
  // Единое измерение: HMC5883L_SINGLE
  // Непрерывное измерение: HMC5883L_CONTINOUS (по умолчанию)
  compass.setMeasurementMode(HMC5883L_CONTINOUS);
 
  // Установка частоты измерения
  //  0.75Hz: HMC5883L_DATARATE_0_75HZ
  //  1.50Hz: HMC5883L_DATARATE_1_5HZ
  //  3.00Hz: HMC5883L_DATARATE_3HZ
  //  7.50Hz: HMC5883L_DATARATE_7_50HZ
  // 15.00Hz: HMC5883L_DATARATE_15HZ (по умолчанию)
  // 30.00Hz: HMC5883L_DATARATE_30HZ
  // 75.00Hz: HMC5883L_DATARATE_75HZ
  compass.setDataRate(HMC5883L_DATARATE_30HZ);
 
  // Число усредненных выборок
  // 1 probka:  HMC5883L_SAMPLES_1 (по умолчанию)
  // 2 probki: HMC5883L_SAMPLES_2
  // 4 probki: HMC5883L_SAMPLES_4
  // 8 probki: HMC5883L_SAMPLES_8
  compass.setSamples(HMC5883L_SAMPLES_1);
  
    tm1637.display(0, "P");              // выводим raf
    tm1637.display(1, 10);
    tm1637.display(2, 15);
    delay(3000);
}
 
void loop()
{
label1:                     //метка начала программы
    
    for (int i = 0; i <= 14; i++) {
    
    Vector raw = compass.readRaw();  // Поучение необработанных значений
    vol[i] = (raw.XAxis);
    vol[15] = (raw.XAxis); 
    delay(66);
    if ( vol[15] > 1900 || vol[15] < -950 )               // если значение больше 1900 или меньше 950
 {   
    tm1637.display(0, 15);                  //выводим FUUL - полный
    tm1637.display(1, ">");
    tm1637.display(2, ">");
    tm1637.display(3, "8");
    delay(3000);
    goto label1;
 }
    }
  
    vol[16] = (vol[0]+vol[1]+vol[2]+vol[3]+vol[4]+vol[5]+vol[6]+vol[7])/8;
    vol[17] = (vol[8]+vol[9]+vol[10]+vol[11]+vol[12]+vol[13]+vol[14])/7;
    vol[18] = max(vol[16],vol[17]);
    


    tm1637.display(vol[18]);

    
}
