Topic: Лабораторный эксперимент2-трубка Кундта
Прошло почти два года как был опубликован материал по учебному эксперименту. Судя по отзывам тема обучения не актуальна на этом форуме. Тем не менее я попытаюсь еще раз обратиться к этой теме, так как результат первого эксперимента был положительный и хотелось бы его продолжить. Дело в том, что вывод графиков на экран оказался не так прост, как ожидалось, так как он конкурирует с прерываниями самой программы. ПОэтому пришлось решать эту проблему. Ее решение показано в следующем тексте
/*
-- doublems --
Два графика масштабированы
This source code of graphical user interface
has been generated automatically by RemoteXY editor.
To compile this code using RemoteXY library 3.1.8 or later version
download by link [url]http://remotexy.com/en/library/[/url]
To connect using RemoteXY mobile app by link [url]http://remotexy.com/en/download/[/url]
- for ANDROID 4.11.1 or later version;
- for iOS 1.9.1 or later version;
This source code is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
*/
//////////////////////////////////////////////
// RemoteXY include library //
//////////////////////////////////////////////
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__ESP8266WIFI_LIB_POINT
#include <ESP8266WiFi.h>
#include <RemoteXY.h>
// настройки соединения
#define REMOTEXY_WIFI_SSID "doublems"
#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[] = // 43 bytes
{ 255,1,0,8,0,36,0,16,31,1,68,17,1,1,60,49,8,36,68,17,
2,52,59,40,8,36,2,0,21,93,22,6,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;
float onlineGraph_2;
// 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);
}
//нашли размах амплитуды
noTone(dynPin);//отключаем звук
delayRXY(250);
RemoteXY.onlineGraph_1 = float (frec);
RemoteXY.onlineGraph_2 = float (5.0 / MAX_ADC_VALUE* (mx - mn));
frec=frec+10;//увеличиваем частоту на 100 для следующего измерения
}
else {if (RemoteXY.connect_flag==0) //если соединение смартфона и контроллера разорвалось, то
{RemoteXY.switch_1=0; //устанавливаем выключатель в положение OFF.
} //в этом случае при повторном соединении эффекты не запустятся самопроизвольно
}
}
void delayRXY (uint32_t ms) {
uint32_t t = millis ();
while (millis () - t < ms) RemoteXY_Handler ();
}