nrf24l01 и 2 ардуины
- Войдите на сайт для отправки комментариев
Втр, 11/02/2020 - 23:34
Всем привет, i need help! кто то может мне объяснить почему не работают скетчи?
Суть в том что есть 2 ардуино, на одной датчик MPU6050(аксилерометр), вот скетч
#include <Wire.h> #include <MPU6050.h> #include <SPI.h> // Подключаем библиотеку для работы с шиной SPI #include <nRF24L01.h> // Подключаем файл настроек из библиотеки RF24 #include <RF24.h> // Подключаем библиотеку для работы с nRF24L01+ RF24 radio(9, 10); // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN) int data[2]; // Создаём массив для передачи данных MPU6050 sensor ; int16_t ax, ay, az ; int16_t gx, gy, gz ; void setup(){ Wire.begin ( ); Serial.begin (9600); Serial.println ( "Initializing the sensor" ); sensor.initialize ( ); Serial.println (sensor.testConnection ( ) ? "Successfully Connected" : "Connection failed"); delay (1000); Serial.println ( "Taking Values from the sensor" ); delay (1000); radio.begin(); // Инициируем работу nRF24L01+ radio.setChannel(5); // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_HIGH); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openWritingPipe (0x1234567890LL); // Открываем трубу с идентификатором 0x1234567890 для передачи данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора) } void loop(){ sensor.getMotion6 (&ax, &ay, &az, &gx, &gy, &gz);; data[0] = ax; // считываем показания Trema слайдера с вывода A1 и записываем их в 0 элемент массива data data[1] = ay; // считываем показания Trema потенциометра с вывода A2 и записываем их в 1 элемент массива data radio.write(&data, sizeof(data)); // отправляем данные из массива data указывая сколько байт массива мы хотим отправить Serial.print("ax");Serial.print(ax); Serial.print("aу");Serial.print(ay); }
на второй 2 сервопривода, вот скетч
#include <SPI.h> // Подключаем библиотеку для работы с шиной SPI #include <nRF24L01.h> // Подключаем файл настроек из библиотеки RF24 #include <RF24.h> // Подключаем библиотеку для работы с nRF24L01+ //#include <iarduino_4LED.h> // Подключаем библиотеку для работы с четырёхразрядным LED индикатором #include <Servo.h> // Подключаем библиотеку для работы с сервоприводами RF24 radio(9, 10); // Создаём объект radio для работы с библиотекой RF24, указывая номера выводов nRF24L01+ (CE, CSN) //iarduino_4LED dispLED(2,3); // Создаём объект dispLED для работы с функциями библиотеки iarduino_4LED, с указанием выводов дисплея ( CLK , DIO ) Servo myservo1; // Создаём объект myservo для работы с функциями библиотеки Servo Servo myservo2; int data[2]; // Создаём массив для приёма данных int ay; int ax; void setup(){ delay(1000); myservo2.attach(4); // Подключаем объект myservo к 4 выводу Arduino myservo1.attach(3); // dispLED.begin(); // Инициируем работу индикатора radio.begin(); // Инициируем работу nRF24L01+ radio.setChannel(5); // Указываем канал приёма данных (от 0 до 127), 5 - значит приём данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков) radio.setDataRate (RF24_1MBPS); // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек radio.setPALevel (RF24_PA_HIGH); // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm) radio.openReadingPipe (1, 0x1234567890LL); // Открываем 1 трубу с идентификатором 0x1234567890 для приема данных (на ожном канале может быть открыто до 6 разных труб, которые должны отличаться только последним байтом идентификатора) radio.startListening (); // Включаем приемник, начинаем прослушивать открытую трубу // radio.stopListening (); // Выключаем приёмник, если потребуется передать данные } void loop(){ if(radio.available()){ // Если в буфере имеются принятые данные radio.read(&data, sizeof(data)); // Читаем данные в массив data и указываем сколько байт читать data[0]=ax; data[1]=ay; Serial.print(ax); myservo1.write(map(ax,-17000,17000,0,180)); // Выводим показания Trema слайдера на индикатор myservo2.write(map(ay,-17000,17000,0,180)); // Поворачиваем сервопривод на угол заданный Trema потенциометром } }
так вот в чем дело, первая вроде отправляет, всё норм, но у второй 0 реакции, кто то подскажет что не так?
а если добавить в передатчике после 25 строки
так оно откроет трубу и сразу закроет, не будут передаваться данные
переделал приемник, теперь вот так и все ровно реакции 0
получилось добиться реакции, но видит только 0 и все
конденсатор по питанию nrf поставь
так оно откроет трубу и сразу закроет, не будут передаваться данные
труба открывается этой командой
а вам надо прекратить слушать эфир и передавать и если мне память не изменяет то в библиотеке
автоматически запускается
я уже разобрался и вроде получилось, токс серва теперь дрожит сильно, спасибо за помощь
:) а может в приемнике надо так ?
может, я же не эксперт)
дядь, да ты гений, работает просто збс, огромное спасибо)