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 заменить на что тодругое?