Содержание

Диетолог

Что это?

Код программы

// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с часами реального времени
#include "TroykaRTC.h"
// библиотека для работы с RGB-матрицей
#include <Adafruit_NeoPixel.h>

// библиотека для работы с датчиком освещённости (Troyka-модуль)
#include <TroykaLight.h>

// номер пина, к которому подключена RGB-матрица
#define MATRIX_PIN  A2

// пин сенсора освещённости
#define LIGHT_PIN   A1

// пин зуммера
#define BUZZER_PIN  4

// количество светодиодов в матрице
#define LED_COUNT   16

bool state = false;
// создаём объект для работы с часами реального времени
RTC clock;
// создаём объект класса Adafruit_NeoPixel
Adafruit_NeoPixel matrix = Adafruit_NeoPixel(LED_COUNT, MATRIX_PIN, NEO_GRB + NEO_KHZ800);

// создаём объект для работы с датчиком освещённости
// и передаём ему номер пина выходного сигнала
LIGHT sensorLight(LIGHT_PIN);

void setup() 
{
  // открываем последовательный порт
  Serial.begin(9600);
  // инициализация RGB-матрицы
  matrix.begin();
}

void loop()
{
  int sensorLightValue = sensorLight.readLight();
  Serial.println(sensorLightValue);
  if (sensorLightValue > 5) {
    tone(BUZZER_PIN, 1000, 400);
    // заполняем RGB-матрицу по сегментам «бегущий огонь» красного цвета
    state = !state;
    if(state)
    colorWipe(matrix.Color(255, 0, 0), 10);
    else
    colorWipe(matrix.Color(0, 0, 255), 10);
  } else {
    // гасим RGB-матрицу по сегментам «бегущая тень»
    colorWipe(matrix.Color(0, 0, 0), 10);
  }
  delay(500);
}

// функция заполнения каждого сегмента
void colorWipe(uint32_t c, uint8_t wait)
{
  for (uint16_t i = 0; i < matrix.numPixels(); i++) {
    // заполняем текущий сегмент выбранным цветом
    matrix.setPixelColor(i, c);
    matrix.show();
    // ждём
    delay(wait);
  }
}