Реализую свой проект, подключил к ардуино уно Ethernet shield, к шилду подключил адресную светодиодную ленту. При помощи шилда подключаю ардунино к wi-fi.
Пользователь отправляет на ардуино json файл в котором указаны диоды которые должны быть подсвечены. Но почему-то лента не хочет работать
Помогите разобраться в чем проблема
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <ArduinoJson.h>
#include <FastLED.h>
// Настройки Ethernet
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 1, 177);
EthernetServer server(80);
// Настройки LED
#define LED_PIN 6
#define LED_COUNT 40
CRGB leds[LED_COUNT];
// Размер буфера для JSON
const int CONFIG_SIZE = 512;
void setup() {
// Инициализация Ethernet
Serial.begin(9600);
while (!Serial) { ; }
Ethernet.begin(mac, ip);
Serial.println("Ethernet подключен");
Serial.print("IP address: ");
Serial.println(Ethernet.localIP());
// Запускаем сервер
server.begin();
Serial.println("Сервер запущен");
// Инициализация LED
FastLED.addLeds<NEOPIXEL, LED_PIN>(leds, LED_COUNT);
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CRGB::Black;
}
FastLED.show();
}
void loop() {
EthernetClient client = server.available();
if (client) {
Serial.println("Новый клиент подключен");
String currentLine = "";
String requestBody = "";
boolean isPostRequest = false;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLine.length() == 0 && isPostRequest) {
while (client.available()) {
requestBody += client.read();
}
break;
}
if (c == '\n') {
if (currentLine.startsWith("POST")) {
isPostRequest = true;
}
currentLine = "";
} else if (c != '\r') {
currentLine += c;
}
}
}
if (isPostRequest && requestBody.length() > 0) {
Serial.println("Получено тело POST-запроса:");
Serial.println(requestBody);
DynamicJsonDocument doc(CONFIG_SIZE);
DeserializationError error = deserializeJson(doc, requestBody);
if (error) {
Serial.print(F("Ошибка парсинга JSON: "));
Serial.println(error.f_str());
client.println("HTTP/1.1 400 Bad Request");
client.println("Content-Type: text/plain");
client.println();
client.println("Invalid JSON");
} else {
processLEDCommands(doc);
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/plain");
client.println();
client.println("LED command processed");
}
} else {
client.println("HTTP/1.1 405 Method Not Allowed");
client.println("Content-Type: text/plain");
client.println();
client.println("Only POST method is allowed");
}
client.stop();
Serial.println("Клиент отключен");
}
}
// Функция для обработки команд управления светодиодами
void processLEDCommands(DynamicJsonDocument& doc) {
for (int i = 1; i <= 4; i++) {
String key = "op" + String(i);
if (doc.containsKey(key)) {
JsonArray array = doc[key];
for (JsonVariant value : array) {
String command = value.as<String>();
if (command.startsWith("A-1-")) {
int ledIndex = command.substring(4).toInt() - 1;
if (ledIndex >= 0 && ledIndex < LED_COUNT) {
switch (i) {
case 1:
leds[ledIndex] = CRGB::White;
break;
case 2:
leds[ledIndex] = CRGB::Red;
break;
case 3:
leds[ledIndex] = CRGB::Blue;
break;
case 4:
leds[ledIndex] = CRGB::Green;
break;
}
}
}
}
}
}
if (doc.containsKey("off")) {
JsonArray array = doc["off"];
bool allOff = false;
for (JsonVariant value : array) {
String command = value.as<String>();
if (command == "ALL") {
allOff = true;
break;
}
if (command.startsWith("A-1-")) {
int ledIndex = command.substring(4).toInt() - 1;
if (ledIndex >= 0 && ledIndex < LED_COUNT) {
leds[ledIndex] = CRGB::Black;
}
}
}
if (allOff) {
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CRGB::Black;
}
}
}
if (doc.containsKey("on")) {
JsonArray array = doc["on"];
bool allOn = false;
for (JsonVariant value : array) {
String command = value.as<String>();
if (command == "ALL") {
allOn = true;
break;
}
}
if (allOn) {
for (int i = 0; i < LED_COUNT; i++) {
leds[i] = CRGB::White;
}
}
}
FastLED.show();
}