• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Общие вопросы по Arduino IDE для ESP8266

Slacky

Member
нулевой байт адреса не имеет смысла проверять... а коррекция с 8 на 7 не позволит дойти до байта седьмого адреса... ведь когда j==7 - тело цикло не будет выполняться
Ну Вам виднее. Но хотелось бы взглянуть на объявление cfg_addrIn[] и прочее ...
 

CodeNameHawk

Moderator
Команда форума
В сериал выводил j при выполнении условия....
Так вы пишите, что вывод закоментирован.
Если комментирую вывод в сериал - цикл ходит до 8ми и,
Если в цикле не меняете значения j, то оно и не принимает значения 8.

Код:
for (byte j = 1; j < 8; j++)
 {
         Serial.println(j);
  }
Покажите вывод этого кода.
 

CodeNameHawk

Moderator
Команда форума
нулевой байт адреса не имеет смысла проверять... а коррекция с 8 на 7 не позволит дойти до байта седьмого адреса... ведь когда j==7 - тело цикло не будет выполняться
Вам Slacky пробует сказать, что у вас размер массивов должен быть больше на единицу.
 

mitgo

New member
Ну Вам виднее. Но хотелось бы взглянуть на объявление cfg_addrIn[] и прочее ...
Код:
byte cfg_addrIn[] = {0, 0, 0, 0, 0, 0, 0};
byte cfg_addrOut[] = {0, 0, 0, 0, 0, 0, 0};
byte cfg_addrPodacha[] = {0, 0, 0, 0, 0, 0, 0};
byte cfg_addrObratka[] = {0, 0, 0, 0, 0, 0, 0};
  cfg_addrObratka[0] = 0x28;
  cfg_addrObratka[1] = 0xc6;
  cfg_addrObratka[2] = 0x73;
  cfg_addrObratka[3] = 0x6d;
  cfg_addrObratka[4] = 0x05;
  cfg_addrObratka[5] = 0x00;
  cfg_addrObratka[6] = 0x00;
  cfg_addrObratka[7] = 0x28;
byte addr[8]

ds.search(addr)
 

mitgo

New member
Так вы пишите, что вывод закоментирован.
Ставил println при выполнении условия, условие выполнялось при j=8...

Если в цикле не меняете значения j, то оно и не принимает значения 8.
Не изменяю значение переменной в цикле

Код:
for (byte j = 1; j < 8; j++)
{
         Serial.println(j);
  }
Покажите вывод этого кода.
[/QUOTE]

1
2
3
4
5
6
7
 

mitgo

New member
Подозреваю, что где-то адреса локальных переменных пересекаются и происходит магия...
 

mitgo

New member
Этот код выводит 8
Код:
  while ( ds.search(addr)) {
        saved = true;
        for (byte j = 1; j < 8 && saved; j++) {
         // String a = String(j);
          if ( (addr[j] != cfg_addrIn[j]) and (addr[j] != cfg_addrOut[j]) and (addr[j] != cfg_addrPodacha[j]) and (addr[j] != cfg_addrObratka[j]) ) { 
            saved = false;
            Serial.println(j);
          }
        }
       // Если диагностируемый адрес не совпал ни с одним из конфига
        if (!saved) { 
       бла бла бла
        }    
  }
 

mitgo

New member
Хотя j < 8 && saved; и работает, но понятней использовать break.
сейчас и буду использовать break.... из-за этой проблемы пришлось отказаться от break...
Все равно не понимаю, почему в этом коде j доходило до 8

Этот код выводит 8
Код:
  while ( ds.search(addr)) {
        saved = true;
        for (byte j = 1; j < 8 && saved; j++) {
         // String a = String(j);
          if ( (addr[j] != cfg_addrIn[j]) and (addr[j] != cfg_addrOut[j]) and (addr[j] != cfg_addrPodacha[j]) and (addr[j] != cfg_addrObratka[j]) ) {
            saved = false;
            Serial.println(j);
          }
        }
       // Если диагностируемый адрес не совпал ни с одним из конфига
        if (!saved) {
       бла бла бла
        }   
  }
 

CodeNameHawk

Moderator
Команда форума
Все равно не понимаю, почему в этом коде j доходило до 8
Ошибка в вашем коде могла менять значение j.

нп. j идет сразу после последнего элемента массива.
Тогда массив[послед_эл+1] += 1; увеличит переменную j
 

Slacky

Member
Вот потому и нужно было показать, как оно изначально объявлено. А компилятор это на раз пропускает :))
 

mitgo

New member
Здравствуйте коллеги!
Новый вопрос. Использую WiFiClient.read() и никак не могу понять - как же мне считать HEX.
Судя по описанию метода - возвращаемое значение - byte (or character), сервер отправляет ответ - последовательность байт в HEX (46 49 00 12 02 02 11 21 01 26 56), которые могу увидеть только выполнив преобразование (String(client.read(), HEX)). Подскажите как выполнить client.read() сразу в byte.
Заранее благодарен за ответы.
 

Сергей_Ф

Moderator
Команда форума
Последнее редактирование:
Сверху Снизу