Mega + w5100 и rgb, скорость обработки
- Войдите на сайт для отправки комментариев
Пт, 26/02/2016 - 12:05
К меге подключены две RGB ленты, коммандная строка передается с планшета вида liv,255,255,255.
Ардуина принимает и парсит строку и через analogWrite включает нужные цвета в нужной комнате.
Если ползуно медлено двигать цвет меняется плавно и без рывков, но если более бытро двигать ползнок смены цвета начинаются рывки, и хаотическая смена цвета, походу планшет наотправлял строк и ардуина не успевает их обрабатывать, так ли это и можно ли как то оптимизировать работу?
И еще одна проблема, ардуина обрабатывает только перпоследнюю поступившую строку, то есть последння не доходит хотя была отправлена.
Скетч следующий:
void loop() { EthernetClient client = server.available(); if (client.available()) { char c = client.read(); indata += c; if (indata.indexOf("livlig") >= 0) { Serial.println("Light is on"); indata = ""; } else if (indata.indexOf("livcol") >= 0) { parseColor(indata, 3, 5, 6); } else if (indata.indexOf("get") >= 0) { getTemp(); } } } void parseColor(String input, int pin1, int pin2, int pin3) { int boundLow; int boundHigh; boundLow = input.indexOf(delimiter); boundHigh = input.indexOf(delimiter, boundLow+1); int r = input.substring(boundLow+1, boundHigh).toInt(); boundLow = input.indexOf(delimiter, boundHigh+1); int g = input.substring(boundHigh+1, boundLow).toInt(); int b = input.substring(boundLow+1).toInt(); analogWrite(pin1, r); analogWrite(pin2, g); analogWrite(pin3, b); indata = ""; // очистить строку }
Есть ли смысл заменить мегу на дуе или w5100 заменить на что тодругое?