• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
Команда форума
Последнее редактирование:
Сверху Снизу