Как подобное реализуется? Либо что изучить? По сериал приходят строки типа : 'lamp1_255' / 'lamp2_128' , откуда я должен извлечь номер лампы и сигнал ШИМ.
Если по сериал приходит что - то, то это значит что, что то загрузили в плату. “что то” в предыдущем предложении означает что ТС не понимает, что делает . Поэтому нужно разобраться что нужно и что грузится.
Нет. Везде есть правила. Если этим правилам не следовать, то получится бардак. Пример - HTML. В принципе, там можно передавать любой текст. Но чтобы его грамотно отобразить, его необходимо поместить в ОПРЕДЕЛЕННЫЕ СТАНДАРТОМ ТЕГИ. Если этого не делать, то ничего передать не получится - приемная сторона просто не сможет распарсить.
Тогда вам надо рассмотреть все возможные варианты и описать поиск нужного вам элемента строки для всех случаев.
все "элегантные решения" основаны на том же принципе - сначала надо в строчке найти букву "l", потом за ней букву "a" и далее все буквы слова. За ними должна идти цифра, потом подчеркивание... На больших компах для этого сущесвтвуют специальные библиотеки поиска, например с регулярными выражениями (погуглите) Но в ардуину эти библиотеки не влезут, здесь придется писать вручную. Ну или почти вручную ... Поэтому советую отказаться от "понятных человеку" символьных сообщений, а перейти на цифровые коды. Код программы существенно упростится
Справочник Ардуины. Раздел String - объект. Код (C++): void loop() { // put your main code here, to run repeatedly: if (stringComplete) { // Если строка получена полностью if (inputString.substring(0, 6) == "A-o-L ") { // Если строка начинается с "A-o-L " Command = inputString.substring(6, 9); // Выделяем команду PinNum = inputString.substring(9, 12); // Выделяем номер пина текстовый I = PinNum.toInt(); // Номер пина в виде переменной if (Command == "On ") { // Если на позиции стоит "On " digitalWrite(I, HIGH); } if (Command == "Off") { // Если на позиции стоит "Off" digitalWrite(I, LOW); } if (Command == "PWM") { // Если на позиции стоит "PWM" PinVol = inputString.substring(16); L= PinVol.toInt(); analogWrite(I, L); } Serial.print(Command); // print the string when a newline arrives: Serial.println(I); inputString = ""; // clear the string: stringComplete = false; } } } // Бесконечный цикл //========================================================================= /* ПС. Без поллитра сразу не вьедешь в это substring(6, 9); 6 - позиция начала искомой строки, если считаешь с нуля - 0, 1, 2... 9 - позиция, следующая ЗА окончанием искомой строки, т.е. уже НЕ нужная инфа. Круто !