C++:
// 6 Channel Transmitter | 6 Kanal Verici
// 3 Joystick Version | 3 Joystick Versiyonu
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipeOut = 0xABCDABCD71LL;
RF24 radio(9, 10); // select CE,CSN pin | CE ve CSN pinlerin seçimi
struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
byte aux1;
byte aux2;
};
Signal data;
void ResetData()
{
data.throttle = 0;
data.pitch = 127;
data.roll = 127;
data.yaw = 127;
data.aux1 = 127; // 3. joystick merkez
data.aux2 = 127; // 3. joystick merkez
}
void setup()
{
radio.begin();
radio.openWritingPipe(pipeOut);
radio.setChannel(100);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
ResetData();
}
int Border_Map(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}
void loop()
{
data.roll = Border_Map( analogRead(A3), 0, 512, 1023, true ); // CH1 - Joystick 1 X
data.pitch = Border_Map( analogRead(A0), 0, 512, 1023, true ); // CH2 - Joystick 1 Y
data.throttle = Border_Map( analogRead(A2), 0, 340, 570, true ); // CH3 - Joystick 2 Y (tek yönlü ESC)
data.yaw = Border_Map( analogRead(A1), 0, 512, 1023, false ); // CH4 - Joystick 2 X
data.aux1 = Border_Map( analogRead(A4), 0, 512, 1023, true ); // CH5 - Joystick 3 X
data.aux2 = Border_Map( analogRead(A5), 0, 512, 1023, true ); // CH6 - Joystick 3 Y
radio.write(&data, sizeof(Signal));
}
C++:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <ESP32Servo.h> // ESP32 Servo kütüphanesi şart
Servo ch1, ch2, ch3, ch4, ch5, ch6;
struct Signal {
byte throttle, pitch, roll, yaw, aux1, aux2;
};
Signal data;
const uint64_t pipeIn = 0xABCDABCD71LL;
// NRF24 için senin belirlediğin pinler
#define SCK_PIN D5
#define MISO_PIN D6
#define MOSI_PIN D7
#define CE_PIN D9
#define CSN_PIN D10
RF24 radio(CE_PIN, CSN_PIN);
void ResetData() {
data.throttle = 0;
data.roll = 127;
data.pitch = 127;
data.yaw = 127;
data.aux1 = 127;
data.aux2 = 127;
}
void setup() {
// DİKKAT: Rakamların başına 'D' harfi koyduk! Bu sayede çökme olmayacak.
ch1.attach(D12);
ch2.attach(D13);
ch3.attach(D14);
ch4.attach(D15);
ch5.attach(D11);
ch6.attach(D8);
ResetData();
// İşlemciye NRF24 SPI pinlerinin yerini öğretiyoruz
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN);
radio.begin();
radio.openReadingPipe(1, pipeIn);
radio.setChannel(100);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
}
unsigned long lastRecvTime = 0;
void recvData() {
while (radio.available()) {
radio.read(&data, sizeof(Signal));
lastRecvTime = millis();
}
}
void loop() {
recvData();
unsigned long now = millis();
if (now - lastRecvTime > 1000) {
ResetData();
}
ch1.writeMicroseconds(map(data.roll, 0, 255, 1000, 2000));
ch2.writeMicroseconds(map(data.pitch, 0, 255, 1000, 2000));
ch3.writeMicroseconds(map(data.throttle, 0, 255, 1000, 2000));
ch4.writeMicroseconds(map(data.yaw, 0, 255, 1000, 2000));
ch5.writeMicroseconds(map(data.aux1, 0, 255, 1000, 2000));
ch6.writeMicroseconds(map(data.aux2, 0, 255, 1000, 2000));
delay(10); // Sistem kararlılığı için
}
Sadece olumlu olarak alıcıda her seferinde alıcıyı çalıştırdığımda servolar hareket ediyor ve galiba orta noktaya geliyor devamında servoları hareket ettirmeye çalıştığımda ise servolar hareket etmiyor sımsıkı duruyorlar.
Güç besleme kısmında vericide 7.4 v li-po pil arduino nanonun vın ve nrf24lo1+pa 3v3 regülatör modülünün + pinine gücü vermekteyim.
Alıcıda ise gücü 12.4 v lipo pil kullanıyorum xl4005 ile 5v seviyesini düşürüp deneyap kartın vbat pinine ordan vericide olduğu gibi nrf24 regülatör modülünün + sına veriyorum.
Güç besleme hattında sorunum olduğunu düşünüyorum ama yaptığım araştırmalar ile doğruluğundan emin olamadım
Bilgili arkadaşlar yazarlarsa çok memnun olurum
Son düzenleme: