Официальный сайт компании Arduino по адресу arduino.cc
Передача текста в nrf24l01
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Сб, 06/01/2018 - 17:20
Здравствуйте. Помогите разобраться с передачей текста.
Передатчик:
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9, 10); byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; void setup() { Serial.begin(9600); radio.begin(); radio.setAutoAck(1); radio.setRetries(0, 15); radio.enableAckPayload(); radio.setPayloadSize(32); radio.openWritingPipe(address[0]); radio.setChannel(0x60); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.powerUp(); radio.stopListening(); } char text[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '#'}; void loop() { radio.write(&text, sizeof(text)); delay(1000); }
Приемник:
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" RF24 radio(9,10); byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"}; void setup(){ Serial.begin(9600); radio.begin(); radio.setAutoAck(1); radio.setRetries(0,15); radio.enableAckPayload(); radio.setPayloadSize(32); radio.openReadingPipe(1,address[0]); radio.setChannel(0x60); radio.setPALevel (RF24_PA_MAX); radio.setDataRate (RF24_250KBPS); radio.powerUp(); radio.startListening(); } void loop() { char gotByte[8]; byte pipeNo; while( radio.available(&pipeNo)){ radio.read(&gotByte, sizeof(gotByte) ); } for (byte i = 0; i < sizeof(gotByte); i++) { Serial.print(gotByte[i]); } Serial.println(); }
В мониторе порта приемника получаю ересть
а если так
http://www.industrialnets.ru/files/misc/ascii.pdf
Я вас не поняла.
попробуйте таблицу символов использовать, передавать цифры, используя таблицу, а на приемнике декодировать
Проверьте скорость порта монитора. 9600 она или другая.
Ну и вот этот массив неправильно объявлен
char
text[8] = {
'a'
,
'r'
,
'd'
,
'u'
,
'i'
,
'n'
,
'o'
,
'#'
};
Не знаю как там write реализован в этой библиотеке возможно с указанием длины все работает и так.
Прием
Передача
Работает
Проблема снята?
Как бы рабоатет. Может посоветуете как сделать лучше, правильнее?
Да, тут много всего, но боюсь, будет всё как всегда - любое замечание воспринимается как наезд и вызывает резкую реакцию.
Ну, для начала мелочь - зачем Вам нужна переменная pipeNo, если Вы её нигде не используете? Если удалить строку 3, а строке 4 вместо &pipeNo написать NULL - ничего не изменится, только не будет этой переменной и будет чуть быстрее работать.
Продолжать? Или Вам уже скучно?
Конечно же продолжать, переменная осталась от неких экспериментов, забыла удалить)
1. Попробуйте заменить while на if в строке 4. Должно нормально работать. Скажите как получилось. Но это верно только до тех пор, пока длина Вашего пакета меньше payload_size. Если больше, то чтение становится сложнее. Вы знаете про payload_size?
2. В строка 5 и 6 у Вас написано
Вы понимаете, что sizeof(gotByte) здесь совершенно разные вещи? В строке 5 это общая длина масива - всех элементов, а в строке 6 - это количество элементов?
Численно они у Вас совпали только потому, что это массив типа char, а длина char - 1 байт. Будь там массив типа int. например, была бы беда. Не привыкайте так писать. там где нужно количество элементов массива, всегда пишите именно количество элементов (т.е. общий размре массива, поделённый на размер одного элемента). Сделайте это привычкой и никогда не будете ошибаться. Т.е. правильно было бы так:
Передатчик
Приемник
Не знаю.
Почему-то модуль всегда отвечает этим сообщением, хотя второй модуль прекрансо принимает.
Захотела организовать ответ если сообщение принято
Передатчик:
Приёмник:
Приемник принимает 1011 и отправляет 1011
Передатчик отправляет 1011 и выволит сообщение Пусто
Не знаю.
Эта библиотека всегда отправляет пакет фиксированного размера. Размер равен payload_size. По умолчанию - 32 байта. Можно установить больше (но, не меньше) при помощи функции setPayloadSize.
Если Вы отправляете меньший (чем payload_size) пакет, она дополнит его нулями, а если больший, то обрежет. Об этом надо помнить и если нужно передать больше, то разбивать на куски.
Вы посмотрите исходный текст библиотеки. Там очень много комментариев, да и код в целом понятный - узнаете много интересного - это не простая библиотека, там много всего наворочено.
Почему-то модуль всегда отвечает этим сообщением, хотя второй модуль прекрансо принимает.
Что Вы имеете в виду - просто заменяеете один модуль другим или пытаетесь передать сразу на два (один передатчик - два приёмника)?
35 строкой в передатчик добавить
Irinka, у нас тут как-то дискуссия возникла о сексизме в программировании. Мы (я и те, кто разделяет моё мнение) там в меньшинстве оказались, если Вам интересно, может Вы там что-нибудь прокомментируете?
Один модуль передает, другой принимает.
35 строкой в передатчик добавить
Я так пробовала.
Irinka, у нас тут как-то дискуссия возникла о сексизме в программировании. Мы (я и те, кто разделяет моё мнение) там в меньшинстве оказались, если Вам интересно, может Вы там что-нибудь прокомментируете?
Да-да, отвечу)))
Ура, заработало!!!
Передатчик
Приёмник
Выручайте:
Я назначаю пины так:
Но не работает. Почему? Как сделать?
Я это к чему...подключила к atmega128 к 14 и 15 пину
т.е.
14 пин атмеги-это 12 в скетче
15 пин атмеги-это 13 в скетче
неудобно.....