Mega + w5100 и rgb, скорость обработки

akefa
Offline
Зарегистрирован: 29.05.2015

К меге подключены две 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 = ""; // очистить строку
}

 

akefa
Offline
Зарегистрирован: 29.05.2015

Есть ли смысл заменить мегу на дуе или w5100 заменить на что тодругое?