#1 Re: Програмування Arduino » Передача массива данных между Arduino » 2017-07-15 19:23:23

Вячеслав Азаров пише:

Вы хотите, чтобы вас научили или, чтобы вам сделали?

Добрый вечер.
Я хотел, чтобы мне подсказали. Делать за меня ничего не надо, у меня и так работает, только через одно место..
Вот и спрашиваю совета у форумчан)

#2 Re: Програмування Arduino » Передача массива данных между Arduino » 2017-07-15 14:27:13

NoName пише:

привет. данных недостаточно ...

Сзади на дисплее написано 3.2' TFTLCD Shield for Arduino Mega2560 HVGA 480x320, он еще крепится к Meg'e на 2 ряда входов ( занимает с 22 по 53 ногу, в общем все входа на двух параллельных дорожках ). На Meg'e предполагается читать данные, выводить их на экран и, возможно она же будет иногда записывать данные на flash-накопитель.
Я Вам рассказал, что делаю, только не в тех понятиях и определениях, которые используются у меня в проекте.
Мне только нужно решить проблему с передачей данных между платами.

#3 Re: Програмування Arduino » Передача массива данных между Arduino » 2017-07-15 12:25:11

NoName пише:

I2C -  фигня )
медленный. нужно ловить АСКи.

давайте ему  предложим CAN )

у автора проблема.  он путает числа что логично. у него ведь нет  header/footer
самый простой вариант добавить  дополнительную линию, если не жалко провода и ногу. если 0 то число 1ое,
если 1 то 2 ое )  ловить между байтами.  а то зачем нам задержки? )

но   автор то не обьяснил что за числа.  как часто нужно отправялять, т.д.
нужен ли ответ ? критичность доставки.
 
я бы использовал UART: TX на общую линию через резистор. 
и вместо 4 байт отправлял бы 6+   даныне  >= 0x20   + \r старт \n стоп

даные  меньше 0x20 кодировал бы 7D +  DATA|0x20 )   
пусть не так логично как пачка 4b  в i2c
но  можно  по человечески отправлять ответ юартом )

встречная передача  доступна это раз. можно в сеть обьединить
привычно .
если что не получается не нужен осфилограф )

а можно и парсить json, пусть привыкает

а с другой стороны все можно на i2c cделать красиво )

Добрый день. Вы так всё конкретно описываете) спасибо за ответ!

В общем задача у меня такая: есть две ардуинки, 1.Uno считывает значения с датчика, 2.Mega выводит значения на экран.
Работает это так - Mega, как я описал выше, обращается по Wire к Uno и сразу читает значения. На Uno код вообще простой, она тупо считывает значения с датчика и на запрос Meg'и отправляет значения по Wire ( всё как описано в 1 сообщении ). То, что Mega с отрисовкой экрана работает медленнее и следовательно запрашивает отправку значений у Uno реже, чем Uno успевает считывать значения для меня не совсем критично, но в дальнейшем буду пробовать разгонять Meg'у.
Числа у меня целые, я их перед отправкой привожу к Integer ( примерно на отправку будет такой массив [ 430, 132 ], следующий например [ 411, 78 ] и т.д. ).
В ответ на вопрос "Как часто нужно отправлять ?", получается, что частота задаётся периодом выполнения одного цикла у Meg'и.
arduino Uno у меня считывает значение с датчика и отсылает на Meg'у, которая в свою очередь.

Пока я только разбираюсь с передачей двух чисел. В перспективе задача следующая: На каждый запрос Meg'и нужно отправлять ей два значения Integer ( это получается первая часть задачи, она такая же, как описано выше ). Вторая часть - на Uno будет таймер, который отсчитывает некоторое время ( например, 10 секунд ), про прошествии 10с Uno должна считать значения уже с других датчиков и сама отправить Mege значения, там будет массив из 4 значений тоже Integer ( например [ 123, 45, 72, 201 ] ). Вот я и думаю, как лучше сделать, отправлять Mege два разных массива или по прошествии 10с просто к тому массиву добавлять еще 4 значения и уже на Mege это всё парсить.

Буду очень благодарен, если Вы поможете мне дальше разобраться с передачей!  wink

#4 Re: Програмування Arduino » Передача массива данных между Arduino » 2017-07-11 14:50:31

Nefreemen пише:

Что бы не писать самому, я бы посмотрел в сторону протокола (есть библиотека ардуино) json.

Интересно smile поизучаю
Спасибо.

#5 Re: Програмування Arduino » Передача массива данных между Arduino » 2017-07-11 11:29:38

Вячеслав Азаров пише:

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

Спасибо за ответ!
Судя по тому, что Вы не указали конкретный, протокол писать надо самому ?

#6 Програмування Arduino » Передача массива данных между Arduino » 2017-07-10 22:43:19

froziq
відповідей: 12

Всем доброго времени суток!

Для передачи между Arduino Uno и Arduino Mega использую библиотеку Wire. Передать мне нужно 2 значения типа Integer.

На Arduino Mega объявляю Wire вот так

Wire.begin();

На Arduino Uno так:

Wire.begin(8);
Wire.onRequest(requestEvent);
 
void requestEvent() {
    byte myArray[4];
    MyArray[0] = (intToSend1 >> 8) & 0xFF;
    MyArray[1] = intToSend1 & 0xFF;
    MyArray[2] = (intToSend2 >> 8) & 0xFF;
    MyArray[3] = intToSend2 & 0xFF;
}

Для запроса данных на Arduino Mega вызываю requestFrom и сразу же читаю данные, которые пришли:

Wire.requestFrom(8,4);

byte a, b;
a = Wire.read();
b = Wire.read();

receiveInt1 = a;
receiveInt1 = ( receiveInt1 << 8 ) | b;

a = Wire.read();
b = Wire.read();
receiveInt2 = a;
receiveInt2 = ( receiveInt2 << 8 ) | b;

Данные приходят нормально, правда иногда путаются местами переменные, вместе receiveInt1 я получаю receiveInt2 и наоборот, т.е. какой-то рассинхрон.

Хочу уточнить у знатоков, правильный ли это способ передачи двух чисел между Arudino ? И что вы можете посоветовать поадекватней ? smile

Підвал форуму