Работа над ошибками.
- Войдите на сайт для отправки комментариев
Ср, 15/01/2014 - 14:10
Прошу посмотреть скетч и сделать конструктивные замечания.
//передатчик
#include <SPI.h>
#include <Ethernet.h> //на будущее
#include "RF24.h" // Подключаем скачанную библиотеку RF24. для работы с радио модулем NRF24L01+
//Контакты от радио модуля NRF24L01 подключаем к pins -> Arduino
//SCK -> 13//MISO -> 12//MOSI -> 11//CSN -> 8//CE -> 7
// Set up nRF24L01 radio on SPI bus plus pins 7 & 8
RF24 radio(7, 8);
const uint64_t pipes[2] = {0xF0F0F0F000LL, 0xF0F0F0F0FFLL}; //адрес канала, для передачи радио сигнала.
char s_bufer[6], d_bufer[6];
String r_bufer, a1_bufer, a2_bufer;
void setup(){
Serial.begin(9600);
radio.begin();
radio.setDataRate(RF24_250KBPS); // Скорость передачи
radio.setChannel(100); // Номер канала от 0 до 127
radio.setRetries(15,15); // Кол-во попыток и время между попытками
radio.openWritingPipe(pipes [0]); // Открываем радио канал передачи
radio.openReadingPipe(1, pipes[1]); // Открываем один из 6-ти каналов приема
radio.startListening(); // Начинаем слушать эфир
}
void loop()
{
if (Serial.available() > 0) { //Если с Serial пришла команда
for (int i=0; i<6; i++) { //записываем в переменную типа char
s_bufer[i] = Serial.read ();//полученные значения
r_bufer = r_bufer+s_bufer[i];//монтируем строку String
a2_bufer.substring (0, 3); //Выделяем имя приемника для проверки
}
radio.write(&r_bufer, 32); //передаем строку String по радиоканалу
Serial.println(r_bufer); //печатаем, то что передали (AA1-имя приемника, x-разделитель, 1-2 символа команда)
}
if (radio.available()) { //Ждем ответ. Если в эфире что то есть
radio.read(&d_bufer, 32); //Считываем полученое в буфер
Serial.println(d_bufer); //Выводим буфер в Serial
a1_bufer.substring (0,3); // Выделяем имя отправителя
Serial.println(a1_bufer); //Выводим имя отправителя в Serial
if (a1_bufer == a2_bufer) { //Если отправленное имя совпадает с полученным
int val=a1_bufer.toInt(); //Переводим имя отправителя из массива в INT
Serial.println ("HEX: "); // Выводим имя для проверки
Serial.print (val, HEX); // в 16-ти ричном
Serial.print (" DEC: "); // и
Serial.print (val, DEC); // десятичном коде
switch (val, DEC) { //в зависимости от имени передавшего
case 2721: //AA1=2721 // выполняем действия
a1_bufer.substring (4,6); // выделяем команду и полученного буфера
int val2=a1_bufer.toInt(); // Переводим результат в INT
Serial.println (val2); //печатаем результат
break;
}//конец выполнения действий
}//конец сравнения имен
}//окончания ожидания эфира
}//конец void loop
//конец программы
Максимально все закоментировал.
Работает?
У меня не работает, ничего не принемает и не передаёт.
Может радио модуль нужен?
:)
Тоже интересно работает ли ? :)
Перед radio.write необходимо выполнить radio.stopListening(); ,после - radio.startListening();
- это переключение на передачу проще говоря
И кстати каналов всего 125,а не 127 ...
Пример тоже собираю для ehternetа ,уже готово вывод данных через веб данных всех клиентов в эфире
switch (val, DEC) {это что такое? компилируется?
switch (val, DEC) {это что такое? компилируется?
компелируется, но работу в деле ешще не проверял
switch (val, DEC) {это что такое? компилируется?
компелируется, но работу в деле ешще не проверял
компелятор тебе неправильный код выдаст. тут получается операция перечисления, значением будет числовое значение DEC, а не то, что ты думаешь.
switch (val, DEC) {это что такое? компилируется?
компелируется, но работу в деле ешще не проверял
компелятор тебе неправильный код выдаст. тут получается операция перечисления, значением будет числовое значение DEC, а не то, что ты думаешь.
в переменную int val, из стринга, берется значение AA1(HEX), и переводится из HEX в DEC. Разве нет?
Разве нет?