Подскажите пожалуйста по коду

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Из разных частей интернета собрал два кода, работающих по отдельности (включение выхода на Меге через облако (Remotexy) и по одному из пинов меги. как их соединить, чтобы они друг другу не мешались ?

Код ниже, то что добавил в сгенерированный код, обозначил комментом.

#define REMOTEXY_MODE__ESP8266_HARDSERIAL_CLOUD

#include <RemoteXY.h>

// настройки соединения 
#define REMOTEXY_SERIAL Serial1
#define REMOTEXY_SERIAL_SPEED 9600
#define REMOTEXY_WIFI_SSID "LTE"
#define REMOTEXY_WIFI_PASSWORD "************"
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com"
#define REMOTEXY_CLOUD_PORT 6376
#define REMOTEXY_CLOUD_TOKEN "119863b80541ef44afa9d8b3d48853bc"


// конфигурация интерфейса  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,4,0,0,0,78,0,13,24,1,
  2,1,2,2,22,11,35,26,31,31,
  208,165,208,190,208,187,208,187,0,0,
  1,0,17,22,12,12,6,31,208,158,
  208,187,209,143,0,2,1,23,45,22,
  11,1,26,31,31,208,156,208,176,208,
  186,209,129,0,0,2,1,34,70,22,
  11,1,26,31,31,208,152,208,187,209,
  140,209,143,0,0 };
  
// структура определяет все переменные и события вашего интерфейса управления 
struct {

    // input variables
  uint8_t H1; // =1 если переключатель включен и =0 если отключен 
  uint8_t O1; // =1 если кнопка нажата, иначе =0 
  uint8_t M1; // =1 если переключатель включен и =0 если отключен 
  uint8_t I1; // =1 если переключатель включен и =0 если отключен 

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

} RemoteXY;
#pragma pack(pop)



#define PIN_H1 2
#define PIN_O1 3
#define PIN_M1 4
#define PIN_I1 5

long H = 1;                                             //Добавил 


void setup() 
{
  RemoteXY_Init (); 
  
  pinMode (PIN_H1, OUTPUT);
  pinMode (PIN_O1, OUTPUT);
  pinMode (PIN_M1, OUTPUT);
  pinMode (PIN_I1, OUTPUT);
  
  pinMode(50, INPUT_PULLUP);          //Добавил 
  
}

void loop() 
{ 
  RemoteXY_Handler ();


  if (digitalRead(50) == 0) {                    //Добавил
      H = H * (-1);                                    //Добавил
      if (H == (-1)) {                                 //Добавил
        pinMode(2, OUTPUT);                 //Добавил
         digitalWrite(2, 1);                         //Добавил
      } else {                                            //Добавил
        pinMode(2, OUTPUT);                 //Добавил
         digitalWrite(2, 0);                         //Добавил
      }                                                     //Добавил

      
  digitalWrite(PIN_H1, (RemoteXY.H1==0)?LOW:HIGH); 
  digitalWrite(PIN_O1, (RemoteXY.O1==0)?HIGH:LOW);  
  digitalWrite(PIN_M1, (RemoteXY.M1==0)?HIGH:LOW);
  digitalWrite(PIN_I1, (RemoteXY.I1==0)?HIGH:LOW);
              
      }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Filippov.andrey.vasilevish пишет:

Из разных частей интернета собрал два кода

Код ниже

А второй код где?

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Второй настолько краткий что поместился за комментариями к //Добавил. Этот мелкий код на переключение одного выходного пина от одной кнопки без фиксации. Основная же масса кода, это три переключателя и одна кнопка, созданные в приложении RemoteXY.

b707
Offline
Зарегистрирован: 26.05.2017

свои строчки "Добавил" замените на одну:

 if (digitalRead(50) == 0) {digitalWrite(2, !digitalread(2)); }                              

и кнопка будет работать вместе с РЕМОТЕХУ не мешая друг другу

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

b707 пишет:

свои строчки "Добавил" замените на одну:

 if (digitalRead(50) == 0) {digitalWrite(2, !digitalread(2)); }                              

и кнопка будет работать вместе с РЕМОТЕХУ не мешая друг другу

А

pinMode(2, OUTPUT);

перенести в setup()

b707
Offline
Зарегистрирован: 26.05.2017

v258 пишет:

А

pinMode(2, OUTPUT);

перенести в setup()

оно там уже есть

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Уважаемые, поскольку на работе нет меги в наличии, переиначил на UNO (дабы в рабочее время понять суть и внести необходимые коррективы дома).

Подставил данные, в код :


#define REMOTEXY_MODE__ESP8266_HARDSERIAL_CLOUD

#include <RemoteXY.h>

// RemoteXY connection settings 
#define REMOTEXY_SERIAL Serial
#define REMOTEXY_SERIAL_SPEED 9600
#define REMOTEXY_WIFI_SSID "LTE"
#define REMOTEXY_WIFI_PASSWORD "Vodokanal-spb@mail.ru"
#define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com"
#define REMOTEXY_CLOUD_PORT 6376
#define REMOTEXY_CLOUD_TOKEN "119863b80541ef44afa9d8b3d48853bc"


// RemoteXY configurate  
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
  { 255,1,0,0,0,23,0,13,24,1,
  2,1,2,2,22,11,35,26,31,31,
  208,165,208,190,208,187,208,187,0,0 };
  
struct {

    // input variables
  uint8_t H; // =1 if switch ON and =0 if OFF 

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

} RemoteXY;
#pragma pack(pop)

#define PIN_H 13

#define PIN 8


void setup() 
{
  RemoteXY_Init (); 
  
  pinMode (PIN_H, OUTPUT);

  pinMode(8, INPUT_PULLUP);
  
}

void loop() 
{ 
  RemoteXY_Handler ();
  
  if (digitalRead(8) == 0) {digitalWrite(13, !digitalread(13)); }  
  
  digitalWrite(PIN_H, (RemoteXY.H==0)?LOW:HIGH);
  
}

 ... и после компиляции выдает:

'digitalread' was not declared in this scope

Сделал включение 13 пина (светодиода) от RemoteXY и от 8 пина входного (кнопка без фиксации (переключатель).

Подскажете в свободное от дел время, где я накосячил ?

sadman41
Offline
Зарегистрирован: 19.10.2016

Потому что не копипастить надо, а думать.

Сравните if (digitalRead(8) == 0) {digitalWrite(13, !digitalread(13)); }

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Думал, видит бог думал. Но не додумал :) Собственно воз и ныне там.

b707
Offline
Зарегистрирован: 26.05.2017

Filippov.andrey.vasilevish пишет:

Думал, видит бог думал. Но не додумал :) Собственно воз и ныне там.

пипец...

Да. я опечатался... но могли бы и сами догадаться. что два оператора digitalRead() должны быть написаны одинаково...

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Спасибо за ответы!

Загрузил, опробовал. По итогу от RemoteXY включается без проблем, от GND в пол накала мигает светодиод, и то без самоподхвата :(

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Filippov.andrey.vasilevish пишет:

Спасибо за ответы!

Загрузил, опробовал. По итогу от RemoteXY включается без проблем, от GND в пол накала мигает светодиод, и то без самоподхвата :(

как написано так и работает, напишите кнопку с фиксацией  (обработка не только нажатия, но и отпускания) и будет вам счастье

b707
Offline
Зарегистрирован: 26.05.2017

Filippov.andrey.vasilevish пишет:

от GND в пол накала мигает светодиод, и то без самоподхвата :(

переведите

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Я же писал по тексту выше что переключатель...

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Я же писал по тексту выше что переключатель...

b707
Offline
Зарегистрирован: 26.05.2017

Filippov.andrey.vasilevish пишет:
Я же писал по тексту выше что переключатель...

на вопросы ответьте -  я не понимаю, что такое "от GND вполнакала" и какой "автоподхват" вам нужен

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

От ground, при подаче на пин2 - светодиод либо горит в пол накала, либо так быстро мерцает гуляя по программе. Самоподхват - реализация схемы, где кнопка без фиксации. Для включения Pin13 нужно одно нажатие, и для отключения другое нажатие.

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Опережая вопрос почему от GND пробую, - скажу: от 5V вообще не пробует включится

b707
Offline
Зарегистрирован: 26.05.2017

Filippov.andrey.vasilevish пишет:
От ground, при подаче на пин2 - светодиод либо горит в пол накала, либо так быстро мерцает гуляя по программе. Самоподхват - реализация схемы, где кнопка без фиксации. Для включения Pin13 нужно одно нажатие, и для отключения другое нажатие.

у вас в коде вообще нет пина 2.

остальное вообще не понял. Используйте. пожалуйста. общепринятые термины. Что такое "подача ground на пин 2" - фиг знает что вы имеете в виду. И самоподхват тоже самое.

b707
Offline
Зарегистрирован: 26.05.2017

Чтобы не путаться в номерах пинах - совет по коду. У вас в строчках 33 и 35 описаны макросы для обоих используемых пинов, например PIN_H определен как 13. Так зачем же вы в loop() мигаете этим пином по номеру? - используйте имя

Ровно тоже самое относится к пину кнопки - если определиоли для него имя. так и используйте везде имя. а не номер.

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Прошу прощения , пин 8. Давайте я с удовольствием поясню: необходимо чтобы включался светодиод от кратковременной подачи 5В на 8 пин, и второй такой подачей- выключался. Работа вышеописанного необходима в комплексе с ныне работающим кодом, для включения того же самого 13 Пина удаленно (Remotexy). Я полагаю они друг другу мешают, когда одна включает пин 13, другая этот пин выключает!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

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

ему нужен алгоритм аналогичный кнопочному посту с кнопками пуск-стоп но только на одной кнопке, раз нажал включилось, второй раз нажал - отключилось )))
А сейчас в лупе молотит включилось-выключилось, то и полнакала

b707
Offline
Зарегистрирован: 26.05.2017

Filippov.andrey.vasilevish пишет:
необходимо чтобы включался светодиод от кратковременной подачи 5В на 8 пин

=== обязательно от подачи 5v? - у вас в коде описано для подачи GND и это правильнее. Лучше так и оставить (кнопка замыкается с GND.а  не с 5в)

Цитата:
Я полагаю они друг другу мешают, когда одна включает пин 13, другая этот пин выключает!

Ок. переделайте так:

void loop() 
{ 
  RemoteXY_Handler ();
  
  if (digitalRead(8) == 0) 
    {digitalWrite(13, !digitalRead(13)); 
     RemoteXY.H = digitalRead(13);
     delay(100);
    }  
  
  digitalWrite(PIN_H, (RemoteXY.H==0)?LOW:HIGH);
  
}

ЗЫ кнопку дольше 100мс НЕ ЖАТЬ! :)а то опять выйдет тыква...

Надеюсь общество мне простит. что я не стал выписывать код с отслеживанием перехода кнопки из состояния в состояние :) если кто хочет. может дописать... хотя правильнее, чтобы это делал ТС

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

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

b707
Offline
Зарегистрирован: 26.05.2017

Filippov.andrey.vasilevish пишет:

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

легко. Как правильно сказали выше - нужно отслеживать не только нажатие кнопки, но и отжатие. Проще всего завести переменную-флаг. Обработал нажатие кнопки. переключил LED - и выставил флаг. что больше переключать не надо. Кнопку отпустили - флаг сбросил, снова можно переключать.

Обьяснил подробно. код попробуй написать сам.

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Увы, могу только копипастить :(
 

lilik
Offline
Зарегистрирован: 19.10.2017

Filippov.andrey.vasilevish пишет:

Увы, могу только копипастить :(
 

Прикольно.

Попробуйте вместо delay(100); поставить delay(500);

Удачи!

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

А если у меня таких 16 будет кнопок с двухсторонним управлением?

lilik
Offline
Зарегистрирован: 19.10.2017

В "ремоте" кажется (давно я им баловался) только 5 кнопок бесплатно.

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

Да , так и есть. Но коли такая "пьянка" буду приобретать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Filippov.andrey.vasilevish пишет:
Да , так и есть. Но коли такая "пьянка" буду приобретать.

кинь трём обнулённым топорам рублей 300, он тебе кнопку допишет

Filippov.andrey...
Offline
Зарегистрирован: 02.08.2021

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Filippov.andrey.vasilevish пишет:
Ваш комментарий не понял больше, чем саму суть написанного выше кода...

707 (777 - это был портвейн три топора)

Green
Offline
Зарегистрирован: 01.10.2015

А, вот они ники как образуются. У b707 - это, наверно, перевёрнутая p? Кто бы мог подумать...)