1 (edited by gorchakov 2023-03-30 16:39:56)

Topic: Построение двух графиков

Попытался построить одновременно два графика по следующей программе
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "two"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
const int IN_PIN = A0;
//прием звука на аналоговом пине а0
const int MAX_ADC_VALUE = 1023;//возможно изменить на 255
int frec;
char myStr[15];
// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 56 bytes
  { 255,1,0,8,0,49,0,16,126,0,68,50,7,7,87,42,94,186,135,70,
  114,101,113,117,101,110,99,121,0,65,109,112,108,105,116,117,100,101,0,2,
  0,33,51,22,11,2,26,31,31,79,78,0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1_var1;
  float onlineGraph_1_var2;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{  RemoteXY_Init ();
pinMode(dynPin,OUTPUT);
  pinMode(IN_PIN, INPUT);
frec=3000;//исходное значение частоты 3000 Гц
}

void loop()
{   RemoteXY_Handler ();
  if (RemoteXY.switch_1!=0) {
    /*  выключатель включен  */
    if (frec<5000){
//инициализируем переменные
int mn = 1024;
int mx = 0;
tone(dynPin,frec);//запускаем генератор звука
for (int i=0; i < 1000; ++i) {//ищем макс и мин значения амплитуды
int val = analogRead(IN_PIN);
mn = min(mn, val);
mx = max(mx, val);
}
//нашли размах амплитуды
    //RemoteXY.onlineGraph_1_var1 = float (frec);
    RemoteXY.onlineGraph_1_var1 = 0.0;
    RemoteXY.onlineGraph_1_var2 = float (5.0 / MAX_ADC_VALUE* (mx - mn));
frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
noTone(dynPin);//отключаем звук
}
else {
    /*  выключатель выключен */
  }
  }
}
Графики не строятся, выдается только первая и последняя точка, хотя вроде в цикле должны быть построены два графика. В программе без вай-фая все точки выводятся в последовательный порт,т.е. точки вычисляются. ПОчему же здесь они не выводятся. Может кто объяснит мне причину. Видимо что-то связано с взаимодействием с сервером или я не туда вывод поставил. Может tone конфликтует с onlineGraph?
Переставил вывод на график после отключения звука, чтобы избавится от влияния tone -результат тот же.

2

Re: Построение двух графиков

gorchakov wrote:

Попытался построить одновременно два графика по следующей программе
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "two"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
const int IN_PIN = A0;
//прием звука на аналоговом пине а0
const int MAX_ADC_VALUE = 1023;//возможно изменить на 255
int frec;
char myStr[15];
// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 56 bytes
  { 255,1,0,8,0,49,0,16,126,0,68,50,7,7,87,42,94,186,135,70,
  114,101,113,117,101,110,99,121,0,65,109,112,108,105,116,117,100,101,0,2,
  0,33,51,22,11,2,26,31,31,79,78,0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1_var1;
  float onlineGraph_1_var2;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{  RemoteXY_Init ();
pinMode(dynPin,OUTPUT);
  pinMode(IN_PIN, INPUT);
frec=3000;//исходное значение частоты 3000 Гц
}

void loop()
{   RemoteXY_Handler ();
  if (RemoteXY.switch_1!=0) {
    /*  выключатель включен  */
    if (frec<5000){
//инициализируем переменные
int mn = 1024;
int mx = 0;
tone(dynPin,frec);//запускаем генератор звука
for (int i=0; i < 1000; ++i) {//ищем макс и мин значения амплитуды
int val = analogRead(IN_PIN);
mn = min(mn, val);
mx = max(mx, val);
}
//нашли размах амплитуды
    //RemoteXY.onlineGraph_1_var1 = float (frec);
    RemoteXY.onlineGraph_1_var1 = 0.0;
    RemoteXY.onlineGraph_1_var2 = float (5.0 / MAX_ADC_VALUE* (mx - mn));
frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
noTone(dynPin);//отключаем звук
}
else {
    /*  выключатель выключен */
  }
  }
}
Графики не строятся, выдается только первая и последняя точка, хотя вроде в цикле должны быть построены два графика. В программе без вай-фая все точки выводятся в последовательный порт,т.е. точки вычисляются. ПОчему же здесь они не выводятся. Может кто объяснит мне причину. Видимо что-то связано с взаимодействием с сервером или я не туда вывод поставил. Может tone конфликтует с onlineGraph?
Переставил вывод на график после отключения звука, чтобы избавится от влияния tone -результат тот же.

Похоже, что такой вариант в этой оболочке не пройдет. Скорее всего конфликтует RemoteXY_Handler (); с остальной частью программы, а вот как это обойти-вопрос.

3 (edited by gorchakov 2023-03-31 03:57:43)

Re: Построение двух графиков

упростил программу до предела, должна строить всего один график-не строит. Во время цикла значения все время нули и лишь последнее значение верное. Такое впечатление, что программа не посылает измеренные значения. Значения измеряет-проверял отдельно без вай-фая.


// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "one"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
const int IN_PIN = A0;
//прием звука на аналоговом пине а0
const int MAX_ADC_VALUE = 1023;//возможно изменить на 255
int frec;

// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 45 bytes
  { 255,1,0,4,0,38,0,16,126,0,68,49,7,7,87,42,94,186,97,109,
  112,108,105,116,117,100,101,0,2,0,33,51,22,11,2,26,31,31,79,78,
  0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{
  RemoteXY_Init ();
   pinMode(dynPin,OUTPUT);
  pinMode(IN_PIN, INPUT);
frec=3000;//исходное значение частоты 3000 Гц
 
 
 
}

void loop()
{
  RemoteXY_Handler ();
  if ((RemoteXY.switch_1!=0)and (frec<5000)){
//инициализируем переменные
int mn = 1024;
int mx = 0;
tone(dynPin,frec);//запускаем генератор звука
for (int i=0; i < 1000; ++i) {//ищем макс и мин значения амплитуды
int val = analogRead(IN_PIN);
mn = min(mn, val);
mx = max(mx, val);
}
//нашли размах амплитуды
       frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
    noTone(dynPin);//отключаем звук
       RemoteXY.onlineGraph_1 = float (5.0 / MAX_ADC_VALUE* (mx - mn));
}
else {
    /*  выключатель выключен */
  }
  }

4

Re: Построение двух графиков

Сам себе не поможешь-никто не поможет. Победил-упростил программу совсем, использовал пример из описания графика и пришлось как ни странно добавить в цикл задержку, которую не рекомендуют добавлять.

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "one"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
int frec;
// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 45 bytes
  { 255,1,0,4,0,38,0,16,126,0,68,49,7,7,87,42,94,186,97,109,
  112,108,105,116,117,100,101,0,2,0,33,51,22,11,2,26,31,31,79,78,
  0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{
  RemoteXY_Init ();
   pinMode(dynPin,OUTPUT);
  frec=3000;//исходное значение частоты 3000 Гц
 
 
}

void loop()
{
  RemoteXY_Handler ();
  if ((RemoteXY.switch_1!=0)and (frec<5000)){
//инициализируем переменные
tone(dynPin,frec);//запускаем генератор звука
delay(1000); //добавлена задержка и ловим любое значение сигнала не усредняя
RemoteXY.onlineGraph_1 = float (analogRead(A0)) / 204.8;//взято из примера
//нашли размах амплитуды
       frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
    noTone(dynPin);//отключаем звук
       }
else {
    /*  выключатель выключен */
  }
  }
стал стоится график.

gorchakov wrote:

упростил программу до предела, должна строить всего один график-не строит. Во время цикла значения все время нули и лишь последнее значение верное. Такое впечатление, что программа не посылает измеренные значения. Значения измеряет-проверял отдельно без вай-фая.


// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "one"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
const int IN_PIN = A0;
//прием звука на аналоговом пине а0
const int MAX_ADC_VALUE = 1023;//возможно изменить на 255
int frec;

// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 45 bytes
  { 255,1,0,4,0,38,0,16,126,0,68,49,7,7,87,42,94,186,97,109,
  112,108,105,116,117,100,101,0,2,0,33,51,22,11,2,26,31,31,79,78,
  0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{
  RemoteXY_Init ();
   pinMode(dynPin,OUTPUT);
  pinMode(IN_PIN, INPUT);
frec=3000;//исходное значение частоты 3000 Гц
 
 
 
}

void loop()
{
  RemoteXY_Handler ();
  if ((RemoteXY.switch_1!=0)and (frec<5000)){
//инициализируем переменные
int mn = 1024;
int mx = 0;
tone(dynPin,frec);//запускаем генератор звука
for (int i=0; i < 1000; ++i) {//ищем макс и мин значения амплитуды
int val = analogRead(IN_PIN);
mn = min(mn, val);
mx = max(mx, val);
}
//нашли размах амплитуды
       frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
    noTone(dynPin);//отключаем звук
       RemoteXY.onlineGraph_1 = float (5.0 / MAX_ADC_VALUE* (mx - mn));
}
else {
    /*  выключатель выключен */
  }
  }

5

Re: Построение двух графиков

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

gorchakov wrote:

Сам себе не поможешь-никто не поможет. Победил-упростил программу совсем, использовал пример из описания графика и пришлось как ни странно добавить в цикл задержку, которую не рекомендуют добавлять.

// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "one"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
int frec;
// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 45 bytes
  { 255,1,0,4,0,38,0,16,126,0,68,49,7,7,87,42,94,186,97,109,
  112,108,105,116,117,100,101,0,2,0,33,51,22,11,2,26,31,31,79,78,
  0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{
  RemoteXY_Init ();
   pinMode(dynPin,OUTPUT);
  frec=3000;//исходное значение частоты 3000 Гц
 
 
}

void loop()
{
  RemoteXY_Handler ();
  if ((RemoteXY.switch_1!=0)and (frec<5000)){
//инициализируем переменные
tone(dynPin,frec);//запускаем генератор звука
delay(1000); //добавлена задержка и ловим любое значение сигнала не усредняя
RemoteXY.onlineGraph_1 = float (analogRead(A0)) / 204.8;//взято из примера
//нашли размах амплитуды
       frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
    noTone(dynPin);//отключаем звук
       }
else {
    /*  выключатель выключен */
  }
  }
стал стоится график.

gorchakov wrote:

упростил программу до предела, должна строить всего один график-не строит. Во время цикла значения все время нули и лишь последнее значение верное. Такое впечатление, что программа не посылает измеренные значения. Значения измеряет-проверял отдельно без вай-фая.


// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>

#include <RemoteXY.h>

// настройки соединения
#define REMOTEXY_WIFI_SSID "one"
#define REMOTEXY_WIFI_PASSWORD "12345678"
#define REMOTEXY_SERVER_PORT 6377
const byte dynPin=2;
//генерация звука на втором пине
const int IN_PIN = A0;
//прием звука на аналоговом пине а0
const int MAX_ADC_VALUE = 1023;//возможно изменить на 255
int frec;

// конфигурация интерфейса 
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =   // 45 bytes
  { 255,1,0,4,0,38,0,16,126,0,68,49,7,7,87,42,94,186,97,109,
  112,108,105,116,117,100,101,0,2,0,33,51,22,11,2,26,31,31,79,78,
  0,79,70,70,0 };
 
// структура определяет все переменные и события вашего интерфейса управления
struct {

    // input variables
  uint8_t switch_1; // =1 если переключатель включен и =0 если отключен

    // output variables
  float onlineGraph_1;

    // other variable
  uint8_t connect_flag;  // =1 if wire connected, else =0

} RemoteXY;
#pragma pack(pop)

/////////////////////////////////////////////
//           END RemoteXY include          //
/////////////////////////////////////////////



void setup()
{
  RemoteXY_Init ();
   pinMode(dynPin,OUTPUT);
  pinMode(IN_PIN, INPUT);
frec=3000;//исходное значение частоты 3000 Гц
 
 
 
}

void loop()
{
  RemoteXY_Handler ();
  if ((RemoteXY.switch_1!=0)and (frec<5000)){
//инициализируем переменные
int mn = 1024;
int mx = 0;
tone(dynPin,frec);//запускаем генератор звука
for (int i=0; i < 1000; ++i) {//ищем макс и мин значения амплитуды
int val = analogRead(IN_PIN);
mn = min(mn, val);
mx = max(mx, val);
}
//нашли размах амплитуды
       frec=frec+100;//увеличиваем частоту на 100 для следующего измерения
    noTone(dynPin);//отключаем звук
       RemoteXY.onlineGraph_1 = float (5.0 / MAX_ADC_VALUE* (mx - mn));
}
else {
    /*  выключатель выключен */
  }
  }

6

Re: Построение двух графиков

Похоже, что данная тема мало кого интересует, раз никто ничего не сообщил в ответ. Жаль, что никто не помог, пришлось самому разбираться. Но это было полезно, так как показало, что оказывается delay не только не препятствует, но и наоборот помогает в работе программы. Хотя в инструкции наоборот написано, что употреблять его не следует.Хотелось бы по этому поводу спросить разработчиков все-таки когда его следует употреблять , а когда не следует.