Помогите разобраться с непонятным кодом

На сайте Описание работы с TFT Nextion экранами (первый запуск, создание интерфейса, обработчик для arduino) - Описания, примеры, подключение к Arduino нашел урок по работе

с кнопками, управлением ШИМ и прочей периферией Nextion.

Я попытался начать с одной кнопкой - заработало нормально

но подключить вторую не смог. Правда с Си++ знаком очень

поверхностно. Если не сложно посмотрите код ,как подключить вторую кнопку.

‘’’
#include <SoftwareSerial.h> // Подключаем библиотеку
//SoftwareSerial для работы с программным UART
const uint8_t pinRX = 4;
const uint8_t pinTX = 5;
const uint8_t pinVD1 = 6;
const uint8_t pinVD2 = 7;
const uint8_t pinR = A0;
SoftwareSerial softSerial(pinRX,pinTX);

void setup(){

softSerial.begin(9600);                    // Инициируем передачу данных по программному UART на 
                                                                           //скорости 9600 бит/сек
pinMode(pinVD1, OUTPUT);                  // вывод pinVD1 как выход
pinMode(pinVD2, OUTPUT);                //  вывод pinVD2 как выход

// Устанавливаем состояние первого светодиода:

softSerial.print((String) "print h0.val"+char(255)+char(255)+char(255));                   // Отправляем 
                                             //команду дисплею: print h0.val заканчивая её тремя байтами 0xFF

while(!softSerial.available()){}                                                       
// Ждём ответа. Дисплей должен вернуть состояние слайдера h0, отправив 4 байта данных

analogWrite(pinVD1, softSerial.read());          delay(10);                            
// Устанавливаем на выводе pinVD1 сигнал ШИМ с коэффициентом заполнения равным 
   //значению первого принятого байта ответа дисплея

while(softSerial.available()){softSerial.read(); delay(10);}                               // Читаем остальные 3 

//байта ответа ничего с ними не делая, так как установленный диапазон значений слайдера
//от 0 до 255 уместился в первом байте данных

// Устанавливаем состояние второго светодиода:

softSerial.print((String) "print bt0.val"+char(255)+char(255)+char(255));                  // Отправляем 

//команду дисплею: «print bt0.val» заканчивая её тремя байтами 0xFF

while(!softSerial.available()){}                                                      
 // Ждём ответа. Дисплей должен вернуть состояние кнопки bt0, отправив 4 байта данных, 
   //где 1 байт равен 0x01 или 0x00, а остальные 3 равны 0x00

digitalWrite(pinVD2, softSerial.read());         delay(10);                                // Устанавливаем на 

//выводе pinVD2 состояние в соответствии с первым принятым байтом ответа дисплея

while(softSerial.available()){softSerial.read(); delay(10);}                           
// Читаем остальные 3 байта ответа ничего с ними не делая, так как состояние кнопки было 
 //передано в первом байте

}

void loop(){
if(softSerial.available()>0){

    String str;                                                             // Объявляем строку для получения этих данных

    while(softSerial.available()){str+=char(softSerial.read()); delay(10);}           
 // Читаем принятые от дисплея данные побайтно в строку str

    for(int i=0; i<str.length(); i++){                                                  
  // Проходимся по каждому символу строки str

        if(memcmp(&str[i],"h0" ,2)==0){i+=5; analogWrite (pinVD1, str[i-3]);}else      
// Если в строке str //начиная с символа i находится текст "h0",  значит после него следует 4 
                 // символа (байта) 
             //данных слайдера, первый из который следует указать как ШИМ для вывода pinVD1

        if(memcmp(&str[i],"ON" ,2)==0){i+=1; digitalWrite(pinVD2, HIGH);    }else       
             // Если в строке 
            //str начиная с символа i находится текст "ON",  значит кнопка дисплея была включена, 
            //устанавливаем высокий уровень на выводе pinVD2

        if(memcmp(&str[i],"OFF",3)==0){i+=2; digitalWrite(pinVD2, LOW);     }           
              // Если в строке str 
           //начиная с символа i находится текст "OFF", значит кнопка дисплея была выключена, 
            //устанавливаем низкий уровень на выводе pinVD2
    }                                                                                    
}                                                                                        
if(millis()%500<=5){delay(5);    
   // Следующее действие 
     //выполняем каждые пол секунды

softSerial.print((String)"t0.txt=\""+analogRead(pinR)+"\""+char(255)+char(255)+char(255));  
    //Отправляем команду дисплею: «t0.txt="текст"» заканчивая её тремя байтами 0xFF. Эта 
                                                             //команда устанавливает значение для текстового поля t0
}                                                                                          // В качестве текста передаётся значение в 
                                                                 //аналогового входа pinR считанное функцией analogRead

}

‘’’

Вставьте ВЕСЬ код правильно !!!

И, кроме кода, погоняйте свой прожект в дебаггере некстиона, внимательно посмотрев на формат пакета, который он отдаёт МК.

#include       <SoftwareSerial.h>                                                              // Подключаем библиотеку SoftwareSerial для работы с программным UART
const uint8_t  pinRX   = 4;                                                                    // Определяем константу хранящую номер вывода Arduino RX программного UART, подключается к выводу TX дисплея
const uint8_t  pinTX   = 5;                                                                    // Определяем константу хранящую номер вывода Arduino TX программного UART, подключается к выводу RX дисплея
const uint8_t  pinVD1  = 6;                                                                    // Определяем константу хранящую номер вывода Arduino к которому подключён первый светодиод
const uint8_t  pinVD2  = 7;                                                                    // Определяем константу хранящую номер вывода Arduino к которому подключён второй светодиод
const uint8_t  pinR    = A0;                                                                   // Определяем константу хранящую номер вывода Arduino к которому подключён потенциометр
SoftwareSerial softSerial(pinRX,pinTX);                                                        // Объявляем объект softSerial с указанием выводов RX и TX по которым общаемся с дисплеем
                                                                                               //
void setup(){                                                                                  //
//  Подготовка:                                                                                //
    softSerial.begin(9600);                                                                    // Инициируем передачу данных по программному UART на скорости 9600 бит/сек
    pinMode(pinVD1, OUTPUT);                                                                   // Конфигурируем вывод pinVD1 как выход
    pinMode(pinVD2, OUTPUT);                                                                   // Конфигурируем вывод pinVD2 как выход
//  Устанавливаем состояние первого светодиода:                                                //
    softSerial.print((String) "print h0.val"+char(255)+char(255)+char(255));                   // Отправляем команду дисплею: print h0.val заканчивая её тремя байтами 0xFF
    while(!softSerial.available()){}                                                           // Ждём ответа. Дисплей должен вернуть состояние слайдера h0, отправив 4 байта данных
    analogWrite(pinVD1, softSerial.read());          delay(10);                                // Устанавливаем на выводе pinVD1 сигнал ШИМ с коэффициентом заполнения равным значению первого принятого байта ответа дисплея
    while(softSerial.available()){softSerial.read(); delay(10);}                               // Читаем остальные 3 байта ответа ничего с ними не делая, так как установленный диапазон значений слайдера от 0 до 255 уместился в первом байте данных
//  Устанавливаем состояние второго светодиода:                                                //
    softSerial.print((String) "print bt0.val"+char(255)+char(255)+char(255));                  // Отправляем команду дисплею: «print bt0.val» заканчивая её тремя байтами 0xFF
    while(!softSerial.available()){}                                                           // Ждём ответа. Дисплей должен вернуть состояние кнопки bt0, отправив 4 байта данных, где 1 байт равен 0x01 или 0x00, а остальные 3 равны 0x00
    digitalWrite(pinVD2, softSerial.read());         delay(10);                                // Устанавливаем на выводе pinVD2 состояние в соответствии с первым принятым байтом ответа дисплея
    while(softSerial.available()){softSerial.read(); delay(10);}                               // Читаем остальные 3 байта ответа ничего с ними не делая, так как состояние кнопки было передано в первом байте
}                                                                                              //
                                                                                               //
void loop(){                                                                                   //
    if(softSerial.available()>0){                                                              // Если есть данные принятые от дисплея, то ...
        String str;                                                                            // Объявляем строку для получения этих данных
        while(softSerial.available()){str+=char(softSerial.read()); delay(10);}                // Читаем принятые от дисплея данные побайтно в строку str
        for(int i=0; i<str.length(); i++){                                                     // Проходимся по каждому символу строки str
            if(memcmp(&str[i],"h0" ,2)==0){i+=5; analogWrite (pinVD1, str[i-3]);}else          // Если в строке str начиная с символа i находится текст "h0",  значит после него следует 4 символа (байта) данных слайдера, первый из который следует указать как ШИМ для вывода pinVD1
            if(memcmp(&str[i],"ON" ,2)==0){i+=1; digitalWrite(pinVD2, HIGH);    }else          // Если в строке str начиная с символа i находится текст "ON",  значит кнопка дисплея была включена, устанавливаем высокий уровень на выводе pinVD2
            if(memcmp(&str[i],"OFF",3)==0){i+=2; digitalWrite(pinVD2, LOW);     }              // Если в строке str начиная с символа i находится текст "OFF", значит кнопка дисплея была выключена, устанавливаем низкий уровень на выводе pinVD2
        }                                                                                      //
    }                                                                                          //
    if(millis()%500<=5){delay(5);                                                              // Следующее действие выполняем каждые пол секунды
    softSerial.print((String)"t0.txt=\""+analogRead(pinR)+"\""+char(255)+char(255)+char(255)); // Отправляем команду дисплею: «t0.txt="текст"» заканчивая её тремя байтами 0xFF. Эта команда устанавливает значение для текстового поля t0
    }                                                                                          // В качестве текста передаётся значение в аналогового входа pinR считанное функцией analogRead
}                                                                                              //

Возможно я не смог правильно разместить код, поэтому посылаю еще раз. Код работает отлично светодиод включается и выключается кнопкой nextion, шим регулирует яркость второго светодиода слайдером nextion, потенциометр меняет значение на цифровом индикаторе nextion.
Я не могу сообразить как добавить возможность еще 1-2 кнопок в код Arduino. В nextion добавляется без проблем, например кнопка bt1

Rock99, ну видишь же, код не вставился. Так исправь. Потренируйся.

перед кодом напечатал ‘’’ потом вставил код и еще раз напечатал ‘’’
что я сделал не так

первые ``` должны быть на отдельной строке.

К моему стыду никогда не пользовался обратным апострофом, поэтому получалась каша
Спасибо xDriver

В ваш код мудрено добавить дополнительные кнопки - вы же вообще не проверяете, к какой кнопке на экране относятся пришедшие с экрана данные . Вы просто читаете HIGH или LOW и все. Это может работать, пока кнопка у вас одна.

Сдается мне, что задача чтения данных с более чем одной кнопки непосредственно из порта пока вам не под силам. Возьмите лучше какую-нибудь библиотеку для Некстион - она все сделает за вас.

спасибо

Этот код от iarduino инвалидский на 146%.

Одно только это чего стоит: softSerial.print((String) "print bt0.val"+char(255)+char(255)+char(255));
Нормальный человек сделал бы softSerial.print("print bt0.val\xFF\xFF\xFF");

понятно