Работа над ошибками.

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Прошу посмотреть скетч и сделать конструктивные замечания.

//передатчик
#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

//конец программы

Максимально все закоментировал.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Работает?

ivan_admin
Offline
Зарегистрирован: 09.01.2014

У меня не работает, ничего не принемает и не передаёт.

Может радио модуль нужен?

:)

MaksMS
Offline
Зарегистрирован: 11.03.2013

Тоже интересно работает ли ? :)

Перед  radio.write необходимо выполнить radio.stopListening();  ,после - radio.startListening(); 

- это переключение на передачу проще говоря

И кстати каналов всего 125,а не 127 ...

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

 

ites
Offline
Зарегистрирован: 26.12.2013
switch (val, DEC) {

это что такое? компилируется?

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

ites пишет:

switch (val, DEC) {

это что такое? компилируется?

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

ites
Offline
Зарегистрирован: 26.12.2013

ingener.solovyev пишет:

ites пишет:

switch (val, DEC) {

это что такое? компилируется?

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

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

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

ites пишет:

ingener.solovyev пишет:

ites пишет:

switch (val, DEC) {

это что такое? компилируется?

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

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

 

в переменную int val, из стринга, берется значение AA1(HEX), и переводится из HEX  в DEC. Разве нет?

maksim
Offline
Зарегистрирован: 12.02.2012

ingener.solovyev пишет:

Разве нет?

Нет.