|
mitko1973
Ранг: Минаващ
Регистриран на: Съб Юни 15, 2013 10:04 am Мнения: 99
|
 Моля за помощ радиоуправление на ардуйно
Опитвам се да направя радиоуправление на 3 канала,но нещо не ми се получава. ще може ли да помогнете къде бъркам?
[код]/* приемник для Pyth700 * */
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" #include <Servo.h>
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно
int recieved_data[3]; // массив принятых данных int servo1 = 3; // сервопривод на 3 цифровом int servo2 = 4; // сервопривод на 4 цифровом int servo3 = 5; // сервопривод на 5 цифровом
Servo myservo1; Servo myservo2; Servo myservo3;
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
void setup() { Serial.begin(9600); //открываем порт для связи с ПК
myservo1.attach(servo1); myservo2.attach(servo2); myservo3.attach(servo3);
radio.begin(); //активировать модуль radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл
radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0 radio.setChannel(0x60); //выбираем канал (в котором нет шумов!)
radio.setPALevel (RF24_PA_HIGH); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу radio.startListening(); //начинаем слушать эфир, мы приёмный модуль }
void loop() { myservo3.attach(servo3); // это для того, чтобы пин для регулятора включился после файлсейва byte pipeNo; while ( radio.available(&pipeNo)) { // слушаем эфир со всех труб radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал
myservo1.writeMicroseconds(recieved_data[0]); // повернуть серво на угол 0..180 // значение получено с 1 элемента массива myservo2.writeMicroseconds(recieved_data[1]); // повернуть серво на угол 0..180 // значение получено с 1 элемента массива myservo3.writeMicroseconds(recieved_data[2]); // повернуть серво на угол 0..180 // значение получено с 1 элемента массива
}
unsigned long started_waiting_at = millis(); while ( ! radio.available() ){ // FILESAVE if (millis() - started_waiting_at > 700 && millis() - started_waiting_at < 5000){ //если связь прерывается от 800мс до 5000мс происходит остановка мтора myservo3.writeMicroseconds(800); // myservo3.detach(); } if (millis() - started_waiting_at > 5000){ //через 5 секунд пин отключается myservo3.detach(); } }
}
[/код]
и предавателя
[код]/* передатчик для Pyth700 V2 */
#include <SPI.h> // ++++++++ #include "nRF24L01.h" // +++++++++ #include "RF24.h" // ++++++++
RF24 radio(9, 10); // "создать" модуль на пинах 9 и 10 Для Уно // ++++++++++
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера труб
byte pin_potent1 = 0; // потенциометр на 0 аналоговом - 2 канал пульта byte pin_potent2 = 1; // потенциометр на 1 аналоговом - 1 канал пульта byte pin_potent3 = 2; // потенциометр на 2 аналоговом - 3 канал пульта byte pin_potent4 = 3; // потенциометр на 3 аналоговом byte pin_potent5 = 4; // потенциометр на 4 аналоговом
//СУБТРИММЕРЫ СЕРВ int subtrim1 = 90; //задаем СУБТРИММЕР 1 СЕРВЫ, можно добавлять отрицательные числа. Учавствует в формуле элефонов. уменьшение вниз. int subtrim2 = -7; //задаем СУБТРИММЕР 2 СЕРВЫ, можно добавлять отрицательные числа. Учавствует в формуле элефонов. уменьшение вверх
//ЧУВСТВИТЕЛЬНОСТЬ КАНАЛОВ int chuv1 = -730; // задаем чувствительность канала ЭЛЕРОНОВ 1 (in_ch1) это число учавствует в масштабировании значения канала. ОТРИЦАТЕЛЬНОЕ ЧИСЛО. При изменении числа в минус расход уменьшается int chuv2 = -780; // задаем чувствительность канала РУЛЯ ВЫСОТЫ 2 (in_ch2) это число учавствует в масштабировании значения канала. ОТРИЦАТЕЛЬНОЕ ЧИСЛО. При изменении в минус расход уменьшается
//ЧУВСТВИТЕЛЬНОСТЬ ТРИММЕРОВ byte trim1 = 40; // задаем чувствительность триммера ЭЛЕРОНОВ канала 5 (in_ch5) это число учавствует в масштабировании значения канала. byte trim2 = 40; // задаем чувствительность триммера РУЛЯ ВЫСОТЫ канала 4 (in_ch4) это число учавствует в масштабировании значения канала.
byte pin_blok = 7; //пин с тумблером блокировки мотора
int transmit_data[3]; // массив, хранящий передаваемые данные
void setup() { // Serial.begin(9600); //открываем порт для связи с ПК //*****
pinMode(pin_blok, INPUT_PULLUP); //задаем 7 пину тумблер с подводкой к 5 вольтам
radio.begin(); //активировать модуль // ++++++++++ radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл +++++++++
radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных ++++++++++ radio.setChannel(0x60); //выбираем канал (в котором нет шумов!) ++++++++++
radio.setPALevel (RF24_PA_HIGH); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX +++++++++ radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS ++++++++++ //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!!
radio.powerUp(); //начать работу ++++++++++++ radio.stopListening(); //не слушаем радиоэфир, мы передатчик ++++++++++++ }
void loop() {
//МАСШТБИРОВАНИЕ ВСЕХ ПОТЕНЦИОМЕТРОВ int in_ch1 = map(analogRead(pin_potent2), 0, 1023, 2350+chuv1, 550-chuv1); //масштабирует каналы и добавляет чувствительность канала 1 - ЭЛЕРОНЫ int in_ch2 = map(analogRead(pin_potent1), 0, 1023, 550-chuv2, 2350+chuv2); //масштабирует каналы и добавляет чувствительность канала 2 - РУЛЬ ВЫСОТЫ int in_ch3 = map(analogRead(pin_potent3), 0, 1023, 2200, 800); // здесь масштабируется канал ГАЗА int in_ch4 = map(analogRead(pin_potent5), 0, 1023, trim2, -trim2); // здесь масштабируется ТРИММЕР РУЛЯ ВЫСОТЫ int in_ch5 = map(analogRead(pin_potent4), 0, 1023, -trim1, trim1); // здесь масштабируется ТРИММЕР ЭЛЕРОНОВ
//КОРРЕКТИРОВКА ТРИММЕРОМ int ch1_trim = in_ch1 + in_ch5; // добавляет к значениям каналов триммер - ЭЛЕРОНЫ int ch2_trim = in_ch2 + in_ch4; // добавляет к значениям каналов триммер - РУЛЬ ВЫСОТЫ
//ФОРМУЛА ДЛЯ ЭЛЕВОНОВ transmit_data[0] = ch1_trim + ch2_trim - 1500 + subtrim1 ; //формула ЭЛЕВОНА ЛЕВОГО transmit_data[1] = ch1_trim - ch2_trim + 1500 + subtrim2 ; //формула ЭЛЕВОНА ПРАВОГО
//ПРОВЕРКА ТУМБЛЕРА БЛОКИРОВКИ МОТОРА if(digitalRead(pin_blok)==0){transmit_data[2]=800; }else{transmit_data[2] = in_ch3; }
radio.powerUp(); // включить передатчик +++++++++++++ radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио +++++++++++++ radio.powerDown(); // выключить передатчик +++++++++++++
// Serial.print("ЭЛЕР="); Serial.print(in_ch1); Serial.print(" "); // Serial.print("ВЫС="); Serial.print(in_ch2); Serial.print(" "); // Serial.print("ГАЗ="); Serial.print(transmit_data[2]); Serial.print(" "); // Serial.print("ТРИМ ВЫС="); Serial.print(in_ch4); Serial.print(" "); //***** // Serial.print("ТРИМ ЭЛЕР="); Serial.print(in_ch5); Serial.print(" "); //***** // Serial.print("ЭЛЕР С ТРИМ="); Serial.print(ch1_trim); Serial.print(" "); // Serial.print("ВЫС С ТРИМ="); Serial.print(ch2_trim); Serial.print(" "); // Serial.print("ЭЛЕВОНЫ = "); Serial.print(transmit_data[0]); Serial.print(" -- "); Serial.println(transmit_data[1]); //****
}[/quote]
|