rs485 blynk

hotfatboy
Offline
Зарегистрирован: 13.10.2021

Всем доброго времени суток, произошла следующая проблема:

arduino nano по модулю RS485 передает значение millis() на arduino mega,c  этим проблем нет ,связь с интернетом осуществляется с помощью arduino ethernet shield 2 (W5500) , далее надо передать это значение посредствам сервиса Blynk на смартфон ( все это как тестовый вариант, просто чтоб проверить что все работает, а дальше уже будет все остальное) и столкнулся с проблемой, что при добавлении строк коннета с блинком перестает работать прием от rs485 (диод RX на меге не мигает) , то есть работает либо одно , либо другое, код соответственно :

mega

 

 

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

видимо не использовать софтовый сериал, когда есть хардовые

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

А код нормально вставить не судьба? При обсуждении будем говорить "строка №ХЗ, ближе к верху низа"?

hotfatboy
Offline
Зарегистрирован: 13.10.2021

ua6em, а разве есть разница использовать ли программный или аппаратный порт? как бы и этот работает и проблем нет,

ЕвгенийП, извините , не сообразил, а сейчас не могу найти кнопку редактировать

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

hotfatboy пишет:

ua6em, а разве есть разница использовать ли программный или аппаратный порт? как бы и этот работает и проблем нет

при использовании программного сериал их не может не быть, с этой проблемой Вы и пришли сюда...
Что у вас там за модуль RS485?

GarryC
Offline
Зарегистрирован: 08.08.2016

Разница между программным и аппаратным портом есть и значительная.
Но в данном конкретном случае это не так важно, поскольку в приведенном Вами коде отсутствует опрос входного порта - строка с вызовом test закоментирована.

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

hotfatboy пишет:

не сообразил, а сейчас не могу найти кнопку редактировать

Нету её. Просто вставьте ещё раз отдельным сообщением - так обсуждать невозможно.

hotfatboy
Offline
Зарегистрирован: 13.10.2021

mega 

#include <Arduino.h>
#include <SPI.h>
#include <Blynk.h>
#include <Ethernet2.h>
#include <BlynkSimpleEthernet2.h>
#include <SoftwareSerial.h>
#define DIR 6
#define DIR1 7
/*
        Pins 10, 11, 12 and 13 are reserved for Ethernet module.
        DON'T use them in your sketch directly!
*/
SoftwareSerial RS485(50,51);  // (RX,TX)
//  ro - RX
//  di - TX
BlynkTimer timer1;
void test(){
 
if (RS485.available())
{
  Serial.write(RS485.read());
 
}
}
 char auth[] = "Gz2ilfCKCdrdrxoMx76zFRAbB3jFSmMK";
void setup()
{
 
  RS485.begin(9600);
  Serial.begin(9600);
 
 timer1.setInterval(5,test);
   Blynk.begin(auth);
  pinMode(DIR,OUTPUT);
  digitalWrite(DIR,LOW);
 
  pinMode(DIR1,OUTPUT);
  digitalWrite(DIR,LOW);
 
}
void loop()
{
// test();
Blynk.run();
timer1.run();  
}

nano

#include <Arduino.h>
#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DIR 13
SoftwareSerial RS485 (7, 6);
void setup() {
 
RS485.begin(9600);
pinMode(DIR,OUTPUT);
digitalWrite(DIR,LOW);
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
}
void test()
{
 
  digitalWrite(DIR,HIGH);
  RS485.println(millis());
 
  digitalWrite(DIR,LOW);
 
 delay(2000);
}
void loop() {
 test();
}

 

hotfatboy
Offline
Зарегистрирован: 13.10.2021

ua6em

вот такая штука https://ae01.alicdn.com/kf/HTB1HmV5XtzvK1RkSnfoq6zMwVXal/TTL-RS485-Arduino-Max458-5-44-14-1.jpg

GarryC

строка 43 закомментирована, но на 45 эта функция вызывается через таймер (32 его объявление)

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

Комментарий в строках №№ 9-12 относится у Uno, а не к Меге. В Меге SPI - это пины 50-53. А Вы на пины 50 и 51 посадили софт-сериал (строка 13). Вот они и конфликтуют.

Кстати, не скажете НАХРЕНА использовать софт-сериал на Меге, у которой аж три аппаратных сериала? 

hotfatboy
Offline
Зарегистрирован: 13.10.2021

то что закомментировано относится к ethernet shield w5500 с помощью которого я собственно и соединяю мегу с интернетом

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

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

ЕвгенийП пишет:

Кстати, не скажете НАХРЕНА использовать софт-сериал на Меге, у которой аж три аппаратных сериала? 

это не наш метод )))

MaksVV
Offline
Зарегистрирован: 06.08.2015

нет он будет спорить сейчас. Это ппц, ТС, для начала подключи на хард сериал, не тупи!

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

hotfatboy пишет:

то что закомментировано относится к ethernet shield w5500 с помощью которого я собственно и соединяю мегу с интернетом

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

Номера пинов, указанны в том комментарии верны если Вы подключаете w5500 к Uno!!! Поскольку Вы подключаете к Меге, пины в том тексте надо заменить на 50-53. Это понятно? Если нет, то "для совсем тупых" - если w5500 подключается к Меге, то НЕЛЬЗЯ (медленнее - Н Е Л Ь З Я) использовать пины 50-53. А Вы их используете в строке №13. Вот и вся Ваша проблема.

Если и так непонятно, то я - пас. Тогда только к терапевту :-(

hotfatboy пишет:

а вы думаете что в этом может заключаться проблема?

Нет, не думаю. В чём проблема я уже Вам сказал трижды.

hotfatboy
Offline
Зарегистрирован: 13.10.2021

добавил такую функцию


void testSerial1(){

  if (Serial1.available())
  {
    
 Serial.write(Serial1.read());
    
  }
  
}

сделал Serial.begin(9600);

и таймер перевел на эту функцию и все тоже самое, если подключать Blynk перестает даже RX моргать

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

hotfatboy пишет:

добавил такую функцию

если подключать Blynk перестает даже RX моргать

Не, это не достижение. Вот если бы чего бабахнуло - вот это было б круто.

А так - сами не понимаете, что делаете. И советов не читаете... типа - сам знаю!

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

hotfatboy пишет:

добавил такую функцию

А пины-то SPI'ные освободили? Или я тут зря клавиатуру протирал?

hotfatboy
Offline
Зарегистрирован: 13.10.2021

да круто вроде все работает, спасибо

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

Ну, слава Богу :-)

hotfatboy
Offline
Зарегистрирован: 13.10.2021

int i = 0;

void GetData()
{
  if (Serial1.available())
  {
    i = Serial1.read();
  }
  
  
   
}
void OutputData(){
  Serial.print("OutputData i = ");
  Serial.println(i);
}

почему в данной ситуации пишет не сохраненное значение а "OutputData i = -1" если i  = 10 то пишет что нулю равно, пробовал сохранение в буфер , пробовал parseInt() но результат такой же.

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

if (Serial.available() > 0) { <<<<<<<<<<<<<<<<<<<
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}

hotfatboy
Offline
Зарегистрирован: 13.10.2021

a incomingByte  должен быть того типа данных который нужен ?(просто слово Byte смутило) =)

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

hotfatboy пишет:

слово Byte смутило) =)

И не зря

В общем то, в словаре все написано: https://www.arduino.cc/reference/en/language/functions/communication/serial/read/

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

Если available() > 0, то можно и byte. А так - функция возвращает int = -1, если в буфере ничего нет.

hotfatboy
Offline
Зарегистрирован: 13.10.2021

я сделал вот так 


int i = 0;

void GetData()
{
  if (Serial1.available() >0 )
  {
    i = Serial1.read();
    
  }
  
   
}
void OutputData(){
  Serial.print("OutputData i = ");
  Serial.println(i,DEC);
}

но вывод все равно выдает такой "OutputData i = 10"

hotfatboy
Offline
Зарегистрирован: 13.10.2021

а это может быть связанно с тем что вызов двух функций на таймерах 


  timer1.setInterval(5,GetData);
  outputtimer.setInterval(1000,OutputData);

может типа интервал надо поменять просто обычно глобальные переменные легко работают и никаких проблем не было

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

hotfatboy пишет:

может типа интервал надо поменять ...

Может, типа, надо какую-нибудь книжку прочитать про программирование, а потом уж пытаться с прерываниями работать?

Гуглите про волшебное слово "volatile". Читайте разбирайтесь пока не дойдёт почему Ваш пример без него через пень-колоду работает.

hotfatboy
Offline
Зарегистрирован: 13.10.2021

"Может, типа, надо какую-нибудь книжку .." - универсальная фраза ,ничего по существу

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019
Филипп Филиппович откинулся на готическую спинку и захохотал так, что во рту у него засверкал золотой частокол. Борменталь только повертел головою.
— Вы бы почитали что-нибудь, — предложил он, — а то, знаете ли…
— Уж и так читаю, читаю… — ответил Шариков и вдруг хищно и быстро налил себе пол стакана водки.
— Что же вы читаете?
— Эту… как её… переписку Энгельса с эти м… Как его — дьявола — с Каутским.
— Позвольте узнать, что вы можете сказать по поводу прочитанного.
Шариков пожал плечами.
— Да не согласен я.
— С кем? С Энгельсом или с Каутским?
— С обоими, — ответил Шариков.
— Это замечательно, клянусь богом. «Всех, кто скажет, что другая…» А что бы вы со своей стороны могли предложить?
— Да что тут предлагать?.. А то пишут, пишут… Конгресс, немцы какие-то… Голова пухнет.

 

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

hotfatboy пишет:

"Может, типа, надо какую-нибудь книжку .." - универсальная фраза ,ничего по существу

Вот как раз про книжку - самое по существу для Вас.

Но во втором абзаце было и "по существу в Вашем понимании". Там было прямо сказано в чём ошибка и дано ключевое слово для поиска. Вы этого не заметили?

Извинения за "ничего по существу" будут?

hotfatboy
Offline
Зарегистрирован: 13.10.2021

"Но во втором абзаце было и "по существу в Вашем понимании". Там было прямо сказано в чём ошибка и дано ключевое слово для поиска. Вы этого не заметили?"  - да я видел , спасибо, но так я ответил лишь на слова про книгу. а по поводу извинений, нее)  цинизм кормить нельзя

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

Понято! Привет Эду Овечкину, если увидите.

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

hotfatboy пишет:

но вывод все равно выдает такой "OutputData i = 10"

а что вы ожидали?

может и правда книжку почитать?

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

hotfatboy пишет:

так я ответил лишь на слова про книгу. а по поводу извинений, нее)  цинизм кормить нельзя

то есть вы 100% уверены, что учиться вам не нужно, вам и без всяких книжек ОБЯЗАНЫ выложить готовое решение на блюде?

А не пойти ли вам на три буквы после этого?

hotfatboy
Offline
Зарегистрирован: 13.10.2021

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

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

hotfatboy пишет:

я ценю свое время и  просто хочу сделать свою жизнь проще , а не углубляться в различные тонкости архитектуры.

=== то есть углубляться в тонкости за вас будет кто-то другой?

Цитата:
Вы видимо свое не цените, раз в бОльшей степени хотите научить меня жизни ,чем помочь мне 

Нет, мы как раз ценим время. Именно для того, чтобы не тратить кучу времени на ответы на тупые вопросы - вас и посылают читать книжки.

Помочь можно по разному. Здесь принято помогать, заставляя клиента изучать документацию и находить ответы самостоятельно. Если вам такое не подходит - ищите других помошников.

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

b707, да оставьте Вы, ничего Вы ему не объясните. Вы-то, в отличие от него, поняли мой пост #31, так что присоединяйтесь :-)

IgorAl
Offline
Зарегистрирован: 28.10.2021

 

ЕвгенийП пишет:

Гуглите про волшебное слово "volatile". Читайте разбирайтесь пока не дойдёт почему Ваш пример без него через пень-колоду работает.

  а это Вы про прерывания?

ЕвгенийП пишет:

Может, типа, надо какую-нибудь книжку прочитать про программирование, а потом уж пытаться с прерываниями работать?

  а что Вы можете посоветовать?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

IgorAl пишет:

ЕвгенийП пишет:

Может, типа, надо какую-нибудь книжку прочитать про программирование, а потом уж пытаться с прерываниями работать?

  а что Вы можете посоветовать?

Посоветовать можно, прежде всего, не пренебрегать правилами сетевой этики. В частности, почитать форум прежде, чем писать.

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

IgorAl, мы долго и старательно собирали всякие полезности в специальной теме.