Hi all , hoping someone can help out a dummy lol
im using KendinYap on YouTube codes for an rc transmitter and receiver , im wanting to use a 2nd setup but im having issues with them both behaving as hoped ,
using 1 radio at a time works great ( with different pipeOut numbers) but when both transmitters are powered up everything locks up and no signals seem to be sent to either receiver and no output work , if i turn 1 of the transmitters off , the on one works perfectly
I have tried changing the numbers on the pipeOut line but the same issue is there ,
if anyone has any ideas ??
The codes im using are as follows
TRANSMITTER
// 8 Channel Transmitter & Trims | 8 Kanal Verici ve Trimler
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <EEPROM.h>
const uint64_t pipeOut = 000322; // NOTE: The same as in the receiver 000322 | Alıcı kodundaki adres ile aynı olmalı
RF24 radio(9, 10); // Select CE,CSN pin | CE ve CSN pinlerin seçimi
#define trimbut_1 1 // Trim button 1 / Pin D1
#define trimbut_2 2 // Trim button 2 / Pin D2
#define trimbut_3 3 // Trim button 3 / Pin D3
#define trimbut_4 4 // Trim button 4 / Pin D4
#define trimbut_5 5 // Trim button 5 / Pin D5
#define trimbut_6 6 // Trim button 6 / Pin D6
int tvalue1 = EEPROM.read(1) * 4; // Reading trim values from Eprom | Trim değerlerinin Epromdan okunması
int tvalue2 = EEPROM.read(3) * 4;
int tvalue3 = EEPROM.read(5) * 4;
struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
byte aux1;
byte aux2;
byte aux3;
byte aux4;
};
Signal data;
void ResetData()
{
data.throttle = 512; // Signal lost position | Sinyal kesildiğindeki pozisyon
data.pitch = 127;
data.roll = 127;
data.yaw = 127;
data.aux1 = 0;
data.aux2 = 0;
data.aux3 = 0;
data.aux4 = 0;
}
void setup()
{
// Configure the NRF24 module | NRF24 modül konfigürasyonu
radio.begin();
radio.openWritingPipe(pipeOut);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS); // The lowest data rate value for more stable communication | Daha kararlı iletişim için en düşük veri hızı.
radio.setPALevel(RF24_PA_MAX); // Output power is set for maximum | Çıkış gücü maksimum için ayarlanıyor.
radio.stopListening(); // Start the radio comunication for Transmitter | Verici için sinyal iletişimini başlatır.
ResetData();
pinMode(trimbut_1, INPUT_PULLUP);
pinMode(trimbut_2, INPUT_PULLUP);
pinMode(trimbut_3, INPUT_PULLUP);
pinMode(trimbut_4, INPUT_PULLUP);
pinMode(trimbut_5, INPUT_PULLUP);
pinMode(trimbut_6, INPUT_PULLUP);
tvalue1= EEPROM.read(1) * 4;
tvalue2= EEPROM.read(3) * 4;
tvalue3= EEPROM.read(5) * 4;
}
// Joystick center and its borders | Joystick merkez ve sınırları
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()
{
// Trims and Limiting trim values | Trimler ve Trim değerlerini sınırlandırma
if(digitalRead(trimbut_1)==LOW and tvalue1 < 630) {
tvalue1=tvalue1+15;
EEPROM.write(1,tvalue1/4);
delay (130);
}
if(digitalRead(trimbut_2)==LOW and tvalue1 > 280){
tvalue1=tvalue1-15;
EEPROM.write(1,tvalue1/4);
delay (130);
}
if(digitalRead(trimbut_3)==LOW and tvalue2 < 630) {
tvalue2=tvalue2+15;
EEPROM.write(3,tvalue2/4);
delay (130);
}
if(digitalRead(trimbut_4)==LOW and tvalue2 > 280){
tvalue2=tvalue2-15;
EEPROM.write(3,tvalue2/4);
delay (130);
}
if(digitalRead(trimbut_5)==LOW and tvalue3 < 630) {
tvalue3=tvalue3+15;
EEPROM.write(5,tvalue3/4);
delay (130);
}
if(digitalRead(trimbut_6)==LOW and tvalue3 > 280){
tvalue3=tvalue3-15;
EEPROM.write(5,tvalue3/4);
delay (130);
}
// Control Stick Calibration for channels | Her bir kanal için kumanda Kol Kalibrasyonları
data.roll = Border_Map( analogRead(A3), 0, tvalue1, 1023, true ); // "true" or "false" for signal direction | "true" veya "false" sinyal yönünü belirler
data.pitch = Border_Map( analogRead(A2), 0, tvalue2, 1023, true );
data.throttle = Border_Map( analogRead(A1),570, 800, 1023, false ); // For Single side ESC | Tek yönlü ESC için
// data.throttle = Border_Map( analogRead(A1),0, 512, 1023, false ); // For Bidirectional ESC | Çift yönlü ESC için
data.yaw = Border_Map( analogRead(A0), 0, tvalue3, 1023, true );
data.aux1 = Border_Map( analogRead(A4), 0, 512, 1023, true );
data.aux2 = Border_Map( analogRead(A5), 0, 512, 1023, true );
data.aux3 = digitalRead(7);
data.aux4 = digitalRead(8);
radio.write(&data, sizeof(Signal));
}
RECEIVER
// 8 Channel Receiver | 8 Kanal Alıcı
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Servo.h>
int ch_width_1 = 0;
int ch_width_2 = 0;
int ch_width_3 = 0;
int ch_width_4 = 0;
int ch_width_5 = 0;
int ch_width_6 = 0;
int ch_width_7 = 0;
int ch_width_8 = 0;
Servo ch1;
Servo ch2;
Servo ch3;
Servo ch4;
Servo ch5;
Servo ch6;
Servo ch7;
Servo ch8;
struct Signal {
byte throttle;
byte pitch;
byte roll;
byte yaw;
byte aux1;
byte aux2;
byte aux3;
byte aux4;
};
Signal data;
const uint64_t pipeIn = 000322;
RF24 radio(9, 10);
void ResetData()
{
data.throttle = 0;
data.roll = 127;
data.pitch = 127;
data.yaw = 127;
data.aux1 = 0; // Define the inicial value of each data input. | Veri girişlerinin başlangıç değerleri
data.aux2 = 0;
data.aux3 = 0;
data.aux4 = 0;
}
void setup()
{
// Set the pins for each PWM signal | Her bir PWM sinyal için pinler belirleniyor.
ch1.attach(0);
ch2.attach(2);
ch3.attach(3);
ch4.attach(4);
ch5.attach(5);
ch6.attach(6);
ch7.attach(7);
ch8.attach(8);
ResetData(); // Configure the NRF24 module | NRF24 Modül konfigürasyonu
radio.begin();
radio.openReadingPipe(1,pipeIn);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS); // The lowest data rate value for more stable communication | Daha kararlı iletişim için en düşük veri hızı.
radio.setPALevel(RF24_PA_MAX); // Output power is set for maximum | Çıkış gücü maksimum için ayarlanıyor.
radio.startListening(); // Start the radio comunication for receiver | Alıcı için sinyal iletişimini başlatır.
}
unsigned long lastRecvTime = 0;
void recvData()
{
while ( radio.available() ) {
radio.read(&data, sizeof(Signal));
lastRecvTime = millis(); // Receive the data | Data alınıyor
}
}
void loop()
{
recvData();
unsigned long now = millis();
if ( now - lastRecvTime > 1000 ) {
ResetData(); // Signal lost.. Reset data | Sinyal kayıpsa data resetleniyor
}
ch_width_1 = map(data.roll, 0, 255, 1000, 2000);
ch_width_2 = map(data.pitch, 0, 255, 1000, 2000);
ch_width_3 = map(data.throttle, 0, 255, 1000, 2000);
ch_width_4 = map(data.yaw, 0, 255, 1000, 2000);
ch_width_5 = map(data.aux1, 0, 255, 1000, 2000);
ch_width_6 = map(data.aux2, 0, 255, 1000, 2000);
ch_width_7 = map(data.aux3, 0, 1, 1000, 2000);
ch_width_8 = map(data.aux4, 0, 1, 1000, 2000);
ch1.writeMicroseconds(ch_width_1); // Write the PWM signal | PWM sinyaller çıkışlara gönderiliyor
ch2.writeMicroseconds(ch_width_2);
ch3.writeMicroseconds(ch_width_3);
ch4.writeMicroseconds(ch_width_4);
ch5.writeMicroseconds(ch_width_5);
ch6.writeMicroseconds(ch_width_6);
ch7.writeMicroseconds(ch_width_7);
ch8.writeMicroseconds(ch_width_8);
}