wifiUdp - Отправка пакетов массивом

Ну, пытался то он именно это, но это не важно. Компилятору-то пофиг, что он там пытался.

Поймите, если при вызове параметр - массив (как у ТС), компилятор ни за что не сгенерирует вызов с параметром byte. Он будет искать более подходящий метод и найдёт именно тот, который я показал - т.е. метод для отправки нуль-терминированной строки.

Да, Вы всё это и сами знаете, просто успокойтесь и разберитесь. Ну, или напишите простенький класс - наследник Print, вставьте в него эти методу и посмотрите кто именно из них вызывается.

дожились…яйца курицу учат… )))


Итак
пишу только изменения
byte buf[256]; вместо char
buf[i]=val; вместо char(val)
UDP.write(buf, sizeof(buf));

в итоге на скрине, это спустя какое время ожидания может минуты 3 такая картинка на приеме, хотя поток данны должен быть непрерывным и какое-то нездоворовое обилие нультерминаторов.

Что еще можно попробовать?

да, я в курсе, я думал занятся это проблемой уже после решения текущей, в зависимости от полученного результата.

  for (int j = 0; j < 255; j++) 
      {
        
        Serial.println(buf[j]);
      }

в массиве buf данные в порядке , плотер дает характерную картинку.

Не вижу никакой “такой” картики, данные как данные. И какие нуль-терминаторы ты там увидел, ты разве строки шлешь?

…а не быстро ли я бегу…???

Он далеко не непрерывный. Перечитайте последний абзац 20-го сообщения.
У Вас осциллограф есть?
Выделите для диагностики какой-нибудь пин, установите его на выход и перед analogRead() устанавливайте его в 1, а после analogRead() - в 0. И посмотрите осциллограмму. У Вас должны быть пакеты на частоте около 4 кГц в 255 импульсов, перемежающиеся с длинными паузами на передачу.

На этой картинке в квадрате в верхней части что за данные? перед отправкой или уже полученные?
Если полученные - что тогда внизу в красной рамке?

это по сути одни и теже данные. только вверху это хекс текущие последний как бы, а внизу в карасной рамке - это в текстровом виде с начала сеанса, но они не все показаны, не очень информативно в этой проге сделано.

вы не ответили на вопрос - в верхней рамке данные ДО пересылки по сети или ПОСЛЕ ?
Напечатайте один и тот же пакет данных в ХЕКС перед отправкой и после приема и выложите в форум.

я пытаюсь понять вопрос. Этот скрин из программы которая принимает данные , которые отсылает esp8266. Это скрин из программы tpc-builder, т.е эту прогу я испльзую только для ПРИЕМА, как Udp-server. Т.е это одни и теже ПРИНЯТЫЕ данные.

Спасибо.
Теперь неплохо было бы сравнить ОДИН И ТОТ ЖЕ ПАКЕТ до и после пересылки. Сможете напечатать его в HEX?

если я наполню массив вот так

byte buf[256];
    for (int j = 0; j < 256; j++)  buf[j]=j);

в буф будут hex данные?

любые данные можно представить в HEX. Это не более чем ПРЕДСТАВЛЕНИЕ для человека. Для компьютера любые данные - это нули и единицы. А для нас. человеков, он может показать данные так, как закажем.

0b11111111
0xFF
255
  • три записи одного и того же байта
1 лайк

я наверно опять хочу вернуться в начало ветки
вот этот код прекрсно передает пакеты

byte buf[256];
void loop()
{

     // int val = map(analogRead(A0), 0, 1023, 0, 255);
     // buf[i] = char(val); 
    
    buf[i] = i;   
    i++;
    delayMicroseconds(125);  //125-8kb

    if (i==255) {
      Udp.beginPacket(ip, localUdpPort);     
      for (int j = 0; j < 256; j++)  Udp.write(buf[j]);
      Udp.endPacket();
      i=0;
    }
}

вопрос был лишь втом что как только вместо buf[i] = i; я ставлю

  int val = map(analogRead(A0), 0, 1023, 0, 255);
  buf[i] = char(val); 

отправка тут же прекращается.
или так

  buf[i] = analogRead(A0)/4;     

тоже остановка

  1. Вторая проблема, это желание формировать пакеты как массив до отправки и отправлять массивом

да, но теперь уже Вы не ответили на мой вопрос. Что будет в массиве? если хекс, то нет проблем,разницы между отправленными и принятыми данными не будет.

этот вопрос можно , вероятно, снять потому как я тока что допетрил, что пакеты формируются здесь

 Udp.beginPacket(ip, localUdpPort);     
      for (int j = 0; j < 256; j++)  Udp.write(buf[j]);
      Udp.endPacket();

Остался один вопрос почему
это работает

buf[i] = i;

а это нет

buf[i] = analogRead(A0)/4;

(Сообщение удалено автором)

наверно buf[i] = byte(val); ???

Подправил название темы.