// Подключим используемые в скетче библиотеки
#include <Arduino.h>
#include <array>
// Используемые пины
#define LED_PIN 39
// Иницилизируем переменную для хранения передаваемой на диод мощности
int power = 255; //(2^8)-1
// Создадим массив для хранения 4х команд, каждая из которых может быть до 10 символов
std::array<std::array<char, 10>, 4> commands;
// Инициализируем переменную для хранения порядка команд
int commandIndex = 0;
void setup()
{
pinMode(LED_PIN, OUTPUT); // Инициализируем пин диода ( подается напряжение на выход с пина )
Serial.begin(9600); // Инициализируем серийный порт
}
void loop()
{
std::array<int, 4> powerValues;
if (Serial.available() > 0)
{
int messageIndex = 0;
while (Serial.available() > 0 && messageIndex < 10)
{
commands[commandIndex][messageIndex] = Serial.read();
messageIndex++;
delay(10);
powerValues[commandIndex] = power;
float avgPower = mean(powerValues);
/////////////////////////////////////////////////////////////////
Serial.print("Cреднее значение: ");
Serial.println(avgPower);
analogWrite(LED_PIN, avgPower);
delay(10);
}
commandIndex++;
if (commandIndex > 3)
{
commandIndex = 0;
}
}
if (millis() % 5000 == 0)
{
Serial.println("Last 4 commands:");
for (int i = 0; i < 4; i++)
{
Serial.println(commands[(commandIndex + i) % 4].data());
}
}
}
// Функция для вычисления среднего арифметического
// Принимает ссылку на массив целочисленных значений и возвращает среднее значение
float mean(std::array<int, 4>& values) {
int sum = 0; // Переменная для суммирования значений из массива
for (int i = 0; i < values.size(); i++) {
sum += values.at(i); // Суммируем все значения из массива с проверкой на корректность индекса
}
return sum / values.size(); // Возвращаем среднее значение
}