Breadcrumbs

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Вывод через блютуз температуры на смартфон

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #181

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Почитав про передачу данных на смартфон я понял что народ использует модуль HC-05 или HC-06.
Для приема используют любой блютуз-терминал на Андроид.
Данные берутся из монитора порта
Библиотек вроде не используют.
Но это все на взгляд дилетанта.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #182

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Идея интересная, а есть в наличии hc-06?
По идее да, ничего там особенного нет. Поставить тоже таймер и раз в 5-10 секунд кидать в порт значения...только единственное, если их будет несколько, надо будет их как то разбирать на стороне компа/телефона, а там просто терминал, т.е. передали 2767654257 и то же и увидели в терминале.
Это то же самое что передать данные между двумя контроллерами, но на второй стороне преобразовать их будет некому.
Это, по-моему, главная проблема - вывести данные в читаемом виде, а отправить и получить - не проблема.
И еще, если не размыкать (или вытаскивать из пинов) провода TX и RX, то в ардуину залить скетч не получится, т.е. необходимо будет продумать размыкание этих контактов.
Надо поискать программулину подходящую под андроид получается.
Последнее редактирование: 1 год 8 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Виктор

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #183

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
МихСаныч. Добрый день. Есть в наличии и HC-6 и HC-5.
По поводу размыкания контактов- почему-бы и не тумблер
Программулина - http://remotexy.com/ru
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #184

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
И еще вопрос. С чем связано изменение температуры отключения. Было 97.5, стало 98.1?
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #185

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Добрый день!Виктор пишет:
Есть в наличии и HC-6 и HC-5.
Отлично! можно экспериментировать начать!))
Подключить к ARDUINO HC-6 и залить туда скетч:
//Sender Code char str[4];
int testvar = 1230;
void setup(){
Serial.begin(9600);
}
void loop(){
if (testvar < 1239){
testvar = testvar + 1;
}else{
testvar = 1230;
}
// Serial.println(testvar);
itoa(testvar, str, 10);   //Turn value into a character array
Serial.write(str, 4);
delay(1000);
}
после этого попробовать подключиться к модулю с телефона и принять данные, для начала можно из любого приложения.
Виктор пишет:
И еще вопрос. С чем связано изменение температуры отключения. Было 97.5, стало 98.1?
Ни с чем не связано :whistle: , это просто скетч с моего аппарата, сейчас до 98.1 град гоню на первой перегонке, можете поменять - это на ваше усмотрение.

Ждем результатов тестов! ;)
Администратор запретил публиковать записи гостям.
Спасибо сказали: Виктор

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #186

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Ваш скетч при компиляции дает ошибку.
Залил для пробы, счетчик работает на телефоне, данные принимаются.
int cnt = 0;    // счетчик

 void setup() {
   Serial.begin(9600);   // инициализация порта
 }

 void loop() {
   cnt++;
   Serial.print("Hello BB from Arduino! Counter:");  // выводим надпись
   Serial.println(cnt);    // выводим значение счетчика и переводим на новую строку
   delay(1000);   // ждем 1 секунду
 }
Последнее редактирование: 1 год 8 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #187

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Шикарно!)))
Тогда вот это должно работать:
unsigned long MemTimeSerial=0;
unsigned long RunTimeSerial=0;
unsigned long TimeSendSerial=5000;
int FlagSerial=0;

void setup() {
Serial.begin(9600);
}
//Функция отправки через serialport
void TempSendSerial (){
if (FlagSerial == 0){
FlagSerial=1;
MemTimeSerial=millis();
}else if(FlagSerial == 1){
RunTimeSerial = millis();
if(TimeSendSerial < RunTimeSerial - MemTimeSerial){
Serial.print("TempKub = ");
Serial.println(Temp);
FlagSerial=0;
}
}
void loop() {
TempSendSerial ();
}

Надо добавить в скетч, в соответствующие секции.
Если заработает, можно будет доработать, добавить передаваемой инфы и т.д.
Последнее редактирование: 1 год 8 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #188

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Добрый день.
Пытался вставить в скетч. Может неправильно.
При заливки ошибок компиляции не выдает, но ничего не выводит и даже HC-06 отваливается.
Сделал так. Где вставил, выделил красным.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 1 год 8 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #189

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Попробуйте убрать TempSendSerial (); из void loop, удалить полностью //Функция отправки через serialport

а сразу после void loop { вставить:
if (FlagSerial == 0)
{
FlagSerial=1;
MemTimeSerial=millis();
}
else if(FlagSerial == 1)
{
RunTimeSerial = millis();
if(TimeSendSerial < RunTimeSerial - MemTimeSerial)
{
Serial.print("TempKub = ");
Serial.println(Temp);
}
}
Просто может из функции что то не складывается с отправкой, так действия полностью идентичны...
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #190

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
В монитор порта непрерывно идет поток температуры TempKub, с вкраплениями Temp, Temp1, Temp2. HC-06 сбрасывает соединение. На смартфоне черный экран. TempKub равен Temp.
Вложения:
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #191

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Принтскрин получился с плохим качеством. Позже сделаю читаемый.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #192

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Не, не надо принтскрин))). И так понятно что ерунда какая то, причем алогичная))), откуда эти значения берутся - непонятно.
В выходные-праздники покопаюсь, посмотрим что за ерунда такая.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #193

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Виктор, поэкспериментировал, вот этот скетч работает как надо (это как пример и тест):
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
unsigned long MemTimeSerial=0;
unsigned long RunTimeSerial=0;
unsigned long TimeSendSerial=5000; // период передачи в Serial данных (мс)
int FlagSerial=0;
int Temp = 1;
  void setup()
{
  Serial.begin(9600);
  display.begin(); // инициализируем дисплей
  display.setContrast(60);  // устанавливаем контраст LCD
  display.clearDisplay();   // очищаем экран
}
//Функция отправки через serialport
void TempSendSerial (){
if (FlagSerial == 0){
FlagSerial=1;
MemTimeSerial=millis();
}else if(FlagSerial == 1){
RunTimeSerial = millis();
if(TimeSendSerial < RunTimeSerial - MemTimeSerial){
Serial.print("TempKub = ");
Serial.println(Temp);
FlagSerial=0;
}
}
}
void loop()
{
 
  // *** ТЕЛО ПРОГРАММЫ
  
if (Temp < 70){
  Temp=Temp+1;
  }else{
    Temp=0;
    }
    
TempSendSerial();

  // --- ТЕЛО ПРОГРАММЫ


  // *** дисплей. у нас есть 5 строчек.
  display.clearDisplay();
  display.setTextSize(1);
  display.println("  DISTSYS.RU ");
  display.print("Temp ");
  display.println(Temp);
  display.display();
}

чтобы не выводить в сериал лишнее, надо закомментировать в скетче аппарата лишние serial.print (стр 239-251):
if(thisAddr == 1){
  Temp2=DS18B20_2(addr1);
  Serial.print("Temp2 "); 
  Serial.println(Temp2);
  }else if(thisAddr == 2){
  Temp1=DS18B20_2(addr2);
  Serial.print("Temp1 "); 
  Serial.println(Temp1);
  }else if(thisAddr == 3){
  Temp=DS18B20_2(addr3);
  Serial.print("Temp "); 
  Serial.println(Temp);
  Serial.println("---------------------------------------");

Должно все работать, ну по крайней мере у меня все заработало и передает с serial то что нужно и с необходимым периодом.
P.S.: заказал себе тоже hc-6, по прибытии подключим точно)))
Последнее редактирование: 1 год 8 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #194

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Добрый день МихСаныч.
Несколько раз собирался проверить Ваш скетч. Но несколько раз так и не смог понять как его запустить.
Если это просто тест, то я не вижу в счетче опроса датчиков температуры. Что он будет выводить. Так-же смутило фраза "Тело программы"
Это о Вашем скетче Автоматика для самогонного аппарата на ARDUINO V.2?
Короче мне нужна помощь зала :(
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #195

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Виктор, там все просто, первый скетч можно просто залить в аппарат и посмотреть, будет ли передавать по блютузу данные на телефон. Через монитор порта передается все корректно. Температура в нем не берется с датчиков, а просто отсчитывается в цикле от 0 до 70, ну так чтобы разная уж была.
Если этот скетч заработает в том виде в котором он есть, то отредактирую потом ваш скетч, которым Вы пользуетесь.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Виктор

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #196

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Доброе утро. Скетч работает, каждые 5 секунд выводит данные. Спасибо.
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #197

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Доброе утро! Теперь либо надо вставить вот так в соответствующие секции:
unsigned long MemTimeSerial=0;
unsigned long RunTimeSerial=0;
unsigned long TimeSendSerial=5000; // период передачи в Serial данных (мс)
int FlagSerial=0;
  void setup()
{

}
//Функция отправки через serialport
void TempSendSerial (){
if (FlagSerial == 0){
FlagSerial=1;
MemTimeSerial=millis();
}else if(FlagSerial == 1){
RunTimeSerial = millis();
if(TimeSendSerial < RunTimeSerial - MemTimeSerial){
Serial.print("TKub = ");
Serial.print(Temp);
Serial.print("TDS = ");
Serial.print(Temp1);
Serial.print("TPS = ");
Serial.println(Temp2);
FlagSerial=0;
}
}
}
void loop()
{
TempSendSerial();
}
после чего закомментировать Serial.print, как я писал в 193 посте, либо, если не получится, присылайте ваш рабочий скетч и я вам поправлю его.
Последнее редактирование: 1 год 8 мес. назад от Михаил. Причина: удалил лишнее
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #198

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Какой-то затык в 39 строке.
#include <OneWire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
OneWire ds(14);
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
unsigned long MemTimeSerial=0;
unsigned long RunTimeSerial=0;
unsigned long TimeSendSerial=5000;
int FlagSerial=0;
int thisAddr = 0; //переменная для определения опрашиваемого датчика dallas
byte data[12];
byte addr1[8] = {0x28, 0xFF, 0x9A, 0xC3, 0xC1, 0x17, 0x04, 0xE8}; //сухопарник выход
byte addr2[8] = {0x28, 0xFF, 0xB, 0xB1, 0xC1, 0x17, 0x04, 0x3D}; //сухопарник вход
byte addr3[8] = {0x28, 0xFF, 0x17, 0xB6, 0xC1, 0x17, 0x04, 0xE6}; //куб
unsigned int raw; //относится к измерению температуры
float Temp, Temp1, Temp2; // температуры датчиков
int flagTemp = 0; // переменная отслеживания опроса датчика температуры
int tTempTemp = 0; // временная переменная для записи расчета времени с последнего опроса датчика, не совсем верно, но по коду можно разобраться зачем))))
int WarmDevice = 13; //тэн подключен к 13му пину
int FanDevice = 12; //вентилятор подключен к 12му пину
int xPin = A5; // пин джойстика
int yPin = A4; // пин джойстика
int buttonPin = 2; //кнопка (средняя) на джойстике
int xPosition = 0; // данные о состоянии джойтика по оси Х
int yPosition = 0; // данные о состоянии джойтика по оси У
int buttonState = 0; // состояние кнопки
int tD;
int tU;
unsigned long tDr = 0;
unsigned long tUr = 0;
int x1 = 0;
int y1 = 0;
int Xmax = 3; //количество разделов меню (0...Xmax)
// *** массивы
char* Message0[] = {"OFF","ON"};
char* Message1[] = {"FP","PC","AM"};
int Ymax[] = {1,2,11,1}; //массив количество подпунктов меню (зависит от раздела меню (Xmax) и определяется в ф-ии MinMax_Y())
int Ymem[] = {0,0,2,0}; //массив для запоминания позиции У для раздела меню Х (yx0,yx1...yx4), Ymem[2,3] значения первоначального режима нагрева +2
int WarmUp[] = {2,4,3,2,3,4,2,4,3,2,3,4}; //массив зависимости значений нагрева ТЭНа от номера режима
int WarmDown[] = {4,7,5,3,4,5,2,3,2,1,1,1}; //массив зависимости значений пауз в работе ТЭНа от номера режима
//--- массивы
int FlagJoystikTouch = 0; //переменная для определения доступности переключения кнопок джойтика (0 - доступно; 1 - джойстик заблокирован)
unsigned long tTochJDelta; //переменная для тестирования, по идее ненужна
unsigned long tTochJ = 500; //время задержки в переключении кнопок джойстика в милисекундах
unsigned long AllTimeJ; //этой переменой отслеживаем время с момента срабатывания кнопок джойтика AllTimeJ-MemTimeJ и сравниваем с tTochJ
unsigned long MemTimeJ; //в эту переменную пишем(засекаем) время срабатывания кнопок джойтика с момента запуска программы
unsigned long AllTime; // переменная для записи времени прошедшего со старта программы
unsigned long MemTime; // переменная для записи времени начала события относительно времени прошедшего с начала программы
unsigned long AllTempTime; // переменная для записи времени прошедшего со старта программы для опроса DALLAS DS18 (температуры)
unsigned long MemTempTime; // переменная для записи времени начала события относительно времени прошедшего с начала программы для опроса DALLAS DS18 (температуры)
int OnOff = 0; // переменная общего вкл/выкл
int ModeVar = 0; // переменная указывающая режим работы (full power, power control, automatic)
float TempEnd = 98.1;
int TempUpSlow = 0;
float ThisTempVar; // соотношение температуры tU/tD для отслеживания включения вентилятора
int ProcEndTemp = 0;
//***бипер+кнопка контроля переполнения емкости
int BeeperPin = 10;
int FlagBeeper = 0;
int tBeeperDelta = 0;
unsigned long MemTimeBeeper;
unsigned long AllTimeBeeper;
int ControlSamPin = A3; //контакты контроля переполнения емкости
//--- конец бипер+контакты контроля переполнения емкости
 
// *** НАЧАЛО ФУНКЦИЙ
// *** фунцция биппера
void BeeperOneBeep(int UpBeepValue, int UpBeepTime, int DownBeepValue, int DownBeepTime){ //функция BeeperOneBeep(1,500,0,5000);
if(FlagBeeper == 0){ //если вызвали функцию
MemTimeBeeper = millis();
FlagBeeper = 1;
}else if(FlagBeeper == 1){ //если функция вызвана и время засечено
AllTimeBeeper = millis(); // смотрим прошедшее время с момента запуска программы
analogWrite(BeeperPin, UpBeepValue);
if (UpBeepTime > AllTimeBeeper-MemTimeBeeper){ //вычисляем разницу между временем и сравниваем с необходимой задержкой
tBeeperDelta = AllTimeBeeper-MemTimeBeeper; //просто так считаем
}else{ //если время паузы больше чем необходимо
FlagBeeper = 2; //переходим от Up к Down на пине бипера
tBeeperDelta = 0; //просто так обнуляем переменную (это необязательно)
}
}else if(FlagBeeper == 2){ //если бипер отпищал свое время
AllTimeBeeper = millis(); // смотрим прошедшее время с момента запуска программы
analogWrite(BeeperPin, DownBeepValue);
if (DownBeepTime > AllTimeBeeper-MemTimeBeeper){ //вычисляем разницу между временем и сравниваем с необходимой задержкой
tBeeperDelta = AllTimeBeeper-MemTimeBeeper; //просто так считаем
}else{ //если время паузы больше чем необходимо
FlagBeeper = 0; //закончили работу функции
tBeeperDelta = 0; //просто так обнуляем переменную (это необязательно)
}
}
}
// *** функция отслеживания времени блокировки клавиш джойстика
 
void JoystikPauseTime(){ //функция отслеживания времени блокировки клавиш джойстика
if(FlagJoystikTouch == 1){ //если нажалась клавиша джойстика
AllTimeJ = millis(); // смотрим прошедшее время с момента запуска программы
if (tTochJ > AllTimeJ-MemTimeJ){ //вычисляем разницу между временем нажатия и настоящим и сравниваем с необходимой задержкой
tTochJDelta = AllTimeJ-MemTimeJ; //просто так считаем
}else{ //если время паузы больше чем необходимо
FlagJoystikTouch = 0; //разблокируем клавиши джойстика
tTochJDelta = 0; //просто так обнуляем переменную (это необязательно)
}
}
}
// --- конец функции отслеживания времени блокировки клавиш джойстика
// ***функция ограничения значения Х1
 
void MinMax_X(){
if (x1 < 0){
x1 = 0;
Ymem[x1]=y1;
}else if(x1 > Xmax){
x1 = Xmax;
Ymem[x1]=y1;
}
}
// ---конец функции ограничения значения Х1
// ***функция ограничения значения У1
 
void MinMax_Y(){
if (y1 < 0){
y1 = 0;
Ymem[x1]=0;
}else if(y1 > Ymax[x1]){
y1 = Ymax[x1];
Ymem[x1]=y1;
}
}
// ---конец функции ограничения значения У1
//***функция опроса датчика часть 1 (до паузы)
float DS18B20_1(byte *adres){
ds.reset();
ds.select(adres);
ds.write(0x44); // start conversion, with parasite power on at the end
}
 
//***функция опроса датчика часть 2 (после паузы)
float DS18B20_2(byte *adres){
ds.reset();
ds.select(adres);
ds.write(0xBE); // Read Scratchpad
for (byte i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read ();
}
raw = (data[1] << 8) | data[0];//=======Пересчитываем в температуру
float celsius = (float)raw / 16.0;
return celsius;
}
 
//*** функция назначения номера опрашиваемого датчика
void AddrAssign(){
thisAddr = thisAddr+1;
if (thisAddr>3){
thisAddr=1;
}
}
// ***ф-ия контроля вентилятора в зависимости от режима нагрева
void FanControlPower(){
ThisTempVar =(float)tU/(float)tD;
if(ThisTempVar >= 0.65){ // значение соотношения температуры tU/tD для включения вентилятора
digitalWrite(FanDevice, !digitalRead(FanDevice)); //при 5 вольтах все равно большие обороты, поэтому включаем через цикл
}else{
digitalWrite(FanDevice, 0);
}
}
//*** ф-ия вкл\выкл на tU tD ТЭНА
void WarmControlPause(){
if (TempUpSlow == 0){ //цикл вкл\выкл не начался
TempUpSlow = 1; // говорим что запустили плавный режим
MemTime = millis(); // засекаем время
digitalWrite(WarmDevice, 0);
//###########################################
}else{
AllTime = millis(); //
if(tD > AllTime-MemTime){
tUr = 0;
tDr = AllTime-MemTime;
digitalWrite(WarmDevice, 0); // выключаем реле
//###########################################
}else if(tU > AllTime-MemTime-tD){
tDr = 0;
tUr = AllTime-MemTime-tD;
digitalWrite(WarmDevice, 1);
//###########################################
}else{
TempUpSlow = 0;
digitalWrite(WarmDevice, 0);
}
}
}
 
//Функция отправки через serialport
void TempSendSerial (){
if (FlagSerial == 0){
FlagSerial=1;
MemTimeSerial=millis();
}else if(FlagSerial == 1){
RunTimeSerial = millis();
if(TimeSendSerial < RunTimeSerial - MemTimeSerial){
Serial.print("TKub = ");
Serial.print(Temp);
Serial.print("TDS = ");
Serial.print(Temp1);
Serial.print("TPS = ");
Serial.println(Temp2);
FlagSerial=0;
}
}
}
 
// --- КОНЕЦ ФУНКЦИЙ
 
void setup()
{
//TCCR2B = TCCR2B & 0b11111000 | 0x01;
display.begin(); // инициализируем дисплей
display.setContrast(60); // устанавливаем контраст LCD
display.clearDisplay(); // очищаем экран
pinMode(WarmDevice, OUTPUT);
digitalWrite(WarmDevice, 0);
digitalWrite(9, 0);
pinMode(FanDevice, OUTPUT);
digitalWrite(FanDevice, 0);
pinMode(xPin, INPUT); // пин джойстика на input
pinMode(yPin, INPUT); // пин джойстика на input
pinMode(buttonPin, INPUT_PULLUP); // активируем подтягивающий резистор на пине кнопки
// pinMode(ControlSamPin, INPUT);
 
Serial.begin(9600);
}
 
void loop()
{
TempSendSerial();
 
if (Temp > 70.0 && Temp < 75.0){
BeeperOneBeep(20,100,0,5000);
}
//BeeperOneBeep(100,150,0,5000);
 
// *** НАЧАЛО ТЕМПЕРАТУРА
if (flagTemp == 0){
AddrAssign();
flagTemp = 1; // выставляем флаг на пропуск этого блока, пока не пройдет 1000 мс
if(thisAddr == 1){
DS18B20_1(addr1);
}else if(thisAddr == 2){
DS18B20_1(addr2);
}else if(thisAddr == 3){
DS18B20_1(addr3);
}
MemTempTime = millis(); // засекаем время
}else{
AllTempTime = millis(); //
tTempTemp = AllTempTime - MemTempTime;
if (tTempTemp < 750){
flagTemp = 1;
}else{
flagTemp = 0;
if(thisAddr == 1){
Temp2=DS18B20_2(addr1);
//Serial.print("Temp2 ");
//Serial.println(Temp2);
}else if(thisAddr == 2){
Temp1=DS18B20_2(addr2);
//Serial.print("Temp1 ");
//Serial.println(Temp1);
}else if(thisAddr == 3){
Temp=DS18B20_2(addr3);
//Serial.print("Temp ");
//Serial.println(Temp);
//Serial.println("---------------------------------------");
}
}
}
// *** КОНЕЦ ТЕМПЕРАТУРЫ
xPosition = analogRead(xPin); //определяем позицию джойстика по Х
yPosition = analogRead(yPin); //определяем позицию джойстика по У
buttonState = digitalRead(buttonPin); //определяем состояние кнопки на джойстике
// *** КПОПКИ ДЖОЙСТИКА
 
// *** позиция джойстика по X
if (xPosition > 700 && FlagJoystikTouch == 0){ //среднее положение джойстика 510. тут и далее определяем неслучайное нажатие на клавишу джойстика, при этом клавиша должна быть разблокирована функцией JoystikPauseTime()
Ymem[x1]=y1; // запоминаем значение У1 для Х1
x1 = x1 + 1; //увеличаваем значение X1
MinMax_X(); // функция ограничения значения X1 (0...Xmax)
y1 = Ymem[x1]; // читаем знаение Y1 для данного X1 и выставляем значение У1 от изменненного Х1
FlagJoystikTouch = 1; //блокируем клавиши джойстика
MemTimeJ = millis(); //засекаем время нажатия
}else if (xPosition < 450 && FlagJoystikTouch == 0){
Ymem[x1]=y1; // запоминаем значение У1 для Х1
x1 = x1 - 1; //уменьшаем значение X1
MinMax_X(); // функция ограничения значения X1 (0...Xmax)
y1 = Ymem[x1]; // читаем знаение Y1 для данного X1 и выставляем значение У1 от изменненного Х1
FlagJoystikTouch = 1;
MemTimeJ = millis();
}else{
JoystikPauseTime();
}
// --- конец позиция джойстика по X
// *** позиция джойстика по Y
if (yPosition < 470 && FlagJoystikTouch == 0){
y1 = y1 + 1;
MinMax_Y();
Ymem[x1]=y1; // запоминаем значение У1 для Х1
FlagJoystikTouch = 1;
MemTimeJ = millis();
}else if (yPosition > 700 && FlagJoystikTouch == 0){
y1 = y1 - 1;
MinMax_Y(); // функция ограничения значения Y1 (0...Ymax)
Ymem[x1]=y1; // запоминаем значение У1 для Х1
FlagJoystikTouch = 1;
MemTimeJ = millis();
}else{
JoystikPauseTime();
}
// --- конец позиция джойстика по Y
 
// --- КОНЕЦ КПОПКИ ДЖОЙСТИКА
// *** УПРАВЛЕНИЕ ТЭНОМ
 
tU=(WarmUp[Ymem[2]])*100; //считаем промежуток включения тэна в зависимости от режима Ymem[3]
tD=(WarmDown[Ymem[2]])*100; //считаем промежуток выключения тэна в зависимости от режима Ymem[3]
OnOff = Ymem[0]; //***/ используем старый, отработанный кусок программы,
ModeVar = Ymem[1]; // поэтому приводим все к тем же переменным /***
//=======================================================================================================
if (OnOff == 0){ // если выключено, то нас больше ничего не интересует - все выключено
digitalWrite(WarmDevice, 0);
digitalWrite(FanDevice, 0);
BeeperOneBeep(20,500,0,5000);
//=======================================================================================================
}else if (OnOff != 0){ // если включено - смотрим что дальше
if (ModeVar == 0){ // режим постоянного нагрева
digitalWrite(WarmDevice, 1);
digitalWrite(FanDevice, !digitalRead(FanDevice)); //при 5 вольтах все равно большие обороты, поэтому включаем через цикл
//=======================================================================================================
}else if(ModeVar == 1){ // режим ручного регулирования нагрева
{
FanControlPower();
WarmControlPause();
//###########################################
}
//=======================================================================================================
}else if(ModeVar == 2){ // автоматический режим работы
 
if (Temp1 <= 50.0 && Temp < TempEnd){ // автоматический режим постоянный нагрев до 50 град
digitalWrite(WarmDevice, 1);
digitalWrite(FanDevice, !digitalRead(FanDevice));
}else if (Temp1 > 50.0 && Temp < TempEnd){ // автоматический режим управление после 50 град
if ((Temp1-Temp2)>=30.0){
digitalWrite(WarmDevice, 1);
digitalWrite(FanDevice, !digitalRead(FanDevice));
}
else if ((Temp1-Temp2)<30.0 && (Temp1-Temp2)>=20.0){
Ymem[2]=8;
FanControlPower();
WarmControlPause();
}
else if ((Temp1-Temp2)<20.0 && (Temp1-Temp2)>=7.0){
Ymem[2]=9;
FanControlPower();
WarmControlPause();
}
else if ((Temp1-Temp2)<7.0 && (Temp1-Temp2)>=5.0){
Ymem[2]=10;
FanControlPower();
WarmControlPause();
}
else if ((Temp1-Temp2)<5.0 && (Temp1-Temp2)>=3.0){
Ymem[2]=11;
FanControlPower();
WarmControlPause();
}
else if ((Temp1-Temp2)<3.0 && (Temp1-Temp2)>=2.0){
Ymem[2]=11;
FanControlPower();
WarmControlPause();
}
else if ((Temp1-Temp2)<2.0){
Ymem[2]=10;
FanControlPower();
WarmControlPause();
}
}else if (Temp1 > 50.0 && Temp >= TempEnd){ // выключаем все при температуре TempEnd
digitalWrite(FanDevice, 0);
OnOff = 0;
Ymem[0] = 0;
digitalWrite(WarmDevice, 0);
}
}
}
//=======================================================================================================
//тест
if(ProcEndTemp == 1){
BeeperOneBeep(150,100,0,5000);
}
 
// --- УПРАВЛЕНИЕ ТЭНОМ
 
// *** дисплей. у нас есть 5 строчек.
display.clearDisplay();
display.setTextSize(1);
display.print(" KUB ");
display.println(Temp);
//display.print("|");
display.print(Temp1);
display.print(" | ");
display.println(Temp2);
if(digitalRead(WarmDevice)==0){
display.println(" | DOWN");
}else if(digitalRead(WarmDevice)==1){
display.println(" UP | ");
}
display.print(Message0[Ymem[0]]);
display.print(" | ");
display.print(Message1[Ymem[1]]);
display.print(" |");
if((OnOff != 0 && ModeVar == 2 && Temp1 <= 50.0 && Temp < TempEnd) | (OnOff != 0 && ModeVar == 0)){
display.println("full");
}else if(OnOff != 0 && ModeVar == 2 && Temp1 > 50.0 && Temp < TempEnd && (Temp1-Temp2)>=20.0){
display.println("full");
}else{
display.print(tU/100);
display.print("/");
display.println(tD/100);
}
display.drawLine(0, 35, 84, 35, BLACK);
display.println(" ");
if (x1==0){
if (y1==0){
display.println("POWEROFF");
}else if(y1==1){
display.println("POWER ON");
}
}else if(x1==1){
if(y1==0){
display.println("FULL POWER");
}else if(y1==1){
display.println("POWER CONTROL");
}else if(y1==2){
display.println("AUTO MODE");
}
}else if(x1==2){
display.print("Warm Mode ");
display.println(Ymem[2]);
}
else if(x1==3){
if (Ymem[3] == 1){
digitalWrite(FanDevice, 1);
display.println("FAN -- UP");
}else{
digitalWrite(FanDevice, 0);
display.println("FAN -- DOWN");
}
display.println(tD);
}
display.display();
}
Последнее редактирование: 1 год 8 мес. назад от Михаил. Причина: Редавтирование скетча
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #199

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Доброе утро еще раз.
А как вставлять скетч в форум, что бы он был с прокруткой?
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #200

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1


Виктор, отредактировал код в вашем посте #198. Вы вроде все правильно сделали... почти))) Надо пробовать)))
Последнее редактирование: 1 год 8 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.
Спасибо сказали: Виктор

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #201

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Спасибо. Все получилось.
Надо более удобоваримый блютуз-терминал поискать и поиграться с шрифтом, размером вывода.
Но и так уже хорошо. В выходные при процессе заценю удобство и дальность работы.


Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 8 мес. назад #202

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Супер! Придет мне HC-6 - тоже сделаю)))
Еще можно добавить "; ", чтобы удобоваримей вывод был, вот так:
Serial.print("TKub = ");
Serial.print(Temp);
Serial.print("; TDS = ");
Serial.print(Temp1);
Serial.print("; TPS = ");
Serial.println(Temp2);
Администратор запретил публиковать записи гостям.
Спасибо сказали: Виктор

Вывод через блютуз температуры на смартфон 1 год 7 мес. назад #205

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
Добрый день. Попробовал блютуз в действии.
В принципе работает. Нет необходимости подбегать к аппарату, смотреть температуры для контроля. Лучше конечно планшет. Поставил где коротаешь время или другим чем занят и иногда бросаешь взгляд на процесс. Цифры видно далеко. Но надо переходить на WI-FI. Жду с АЛИ esp8266. Попробуем?
Администратор запретил публиковать записи гостям.

Вывод через блютуз температуры на смартфон 1 год 7 мес. назад #206

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
Привет! Ну а что ж не попробовать то?... Правда мне еще hc-6 не приехал)))
А какой заказали? Вот этот?
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 1 год 7 мес. назад от Михаил.
Администратор запретил публиковать записи гостям.

Изменение мощности режимов 1 год 7 мес. назад #208

  • Виктор
  • Виктор аватар
  • Не в сети
  • Захожу иногда
  • Сообщений: 24
  • Репутация: 1
https://ru.aliexpress.com/item/Upgraded-version-ESP-01-ESP8266-serial-WIFI-wireless-module-wireless-transceiver/32574207918.html?spm=a2g0s.9042311.0.0.qtKbjm
Администратор запретил публиковать записи гостям.

Изменение мощности режимов 1 год 7 мес. назад #209

  • Михаил
  • Михаил аватар
  • на форуме
  • Администратор
  • Сообщений: 103
  • Спасибо получено: 17
  • Репутация: 1
ЗАКАЗАЛ :whistle:

Последнее редактирование: 7 мес. 2 нед. назад от Михаил.
Администратор запретил публиковать записи гостям.