Görseldeki joystick modülünün 10 bitlik ADC’de aldığı değerler verilmiştir. Görselde joystick modülünün pin yapısı görülmektedir. Görsel 3.84’teki verici ve Görsel 3.85’teki alıcı devrelerinde birer adet nRF24L01+ modül kullanılarak kablosuz iletişim uygulaması yapılmıştır. nRF24L01+ modülü Arduino ile haberleşirken SPI protokolünü kullanır. Joystickle x ve y ekseninde 0-1023 arasında okunan değerler map() foksiyonuyla -255 ile 255 arası değerlere dönüştürülerek alıcıya gönderilir. Alıcıda negatif değerler “-“ ile çarpılıp pozitif değer PWM olarak geri ve sol dönüşe uygulanır.



#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
int x, y; // x ve y düzlemlerinin değişkenleri.
RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[2]; // X ve y düzlemleri için dizi tanımlama.
void setup() {
Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
if (!radio.begin()) { // nRF24L01+'yı başlat.
Serial.println("nRF24L01+ bağlantıları yanlış veya temazsızlık var. nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
while (1) {}
}
radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}
void loop() {
x = analogRead(A0); // joystick x ekseni bilgisini al.
y = analogRead(A1); // joystick y ekseni bilgisini al.
veri[0] = map(x, 0, 1023, -255, 255 ); //X düzleminin verisi (Geri-ileri).
veri[1] = map(y, 0, 1023, -255, 255); //Y düzeleminin verisi (Sol-sağ).
radio.write(veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
}

#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[2];// X ve Y düzlemi için dizi tanımlama
const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // PWM pinleri. (enA ve enB'de jumper takılı).
// IN1 ve IN2 sol tekerlek, IN3 ve IN4 sağ tekerlek.
void setup() {
Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
if (!radio.begin()) { // nRF24L01+'yı başlat.
Serial.println("nRF24L01+ bağlantıları yanlış veya nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
while (1) {}
}
radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
radio.startListening(); // Alıcı moda geç.
}
void loop() {
if (radio.available()) { // Veri geliyorsa...
radio.read(&veri, sizeof(veri)); // Gelen veriyi veri değişkenine yükle.
if (veri[0] > 50) { //İleri.
analogWrite(IN1, veri[0]);
analogWrite(IN2, 0);
analogWrite(IN3, veri[0]);
analogWrite(IN4, 0);
}
if (veri[0] < -50) { //Geri.
analogWrite(IN1, 0);
analogWrite(IN2, -veri[0]);
analogWrite(IN3, 0);
analogWrite(IN4, -veri[0]);
}
if (veri[1] > 50) { // Sağ.
analogWrite(IN1, veri[1]);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, veri[1]);
}
if (veri[1] < -50) { //Sol.
analogWrite(IN1, 0);
analogWrite(IN2, -veri[1]);
analogWrite(IN3, -veri[1]);
analogWrite(IN4, 0);
}
if (veri[0] > -50 && veri[0] < 50 && veri[1] > -50 && veri[1] < 50) { // Dur.
analogWrite(IN1, 0);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, 0);
}
}
}
#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3];// X, y düzlemi ve sw için dizi tanımlama.
const byte IN1 = 5, IN2 = 6, IN3 = 9, IN4 = 10; // PWM pinleri. (enA ve enB'de jumper takılı).
// IN1 ve IN2 sol tekerlek, IN3 ve IN4 sağ tekerlek.
const byte buzzer = 11; // Buzzer pin.
void setup() {
Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
if (!radio.begin()) { // nRF24L01+'yı başlat.
Serial.println("nRF24L01+ bağlantıları yanlış veya nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
while (1) {}
}
radio.openReadingPipe(0, 1234); // İletişim anahtarı 1234.
radio.startListening(); // Alıcı moda geç.
pinMode(buzzer, OUTPUT);
}
void loop() {
if (radio.available()) { // Veri geliyorsa...
radio.read(&veri, sizeof(veri)); // Gelen veriyi veri değişkenine yükle.
if (veri[0] > 50) { //İleri.
analogWrite(IN1, veri[0]);
analogWrite(IN2, 0);
analogWrite(IN3, veri[0]);
analogWrite(IN4, 0);
}
if (veri[0] < -50) { //Geri.
analogWrite(IN1, 0);
analogWrite(IN2, -veri[0]);
analogWrite(IN3, 0);
analogWrite(IN4, -veri[0]);
}
if (veri[1] > 50) { // Sağ.
analogWrite(IN1, veri[1]);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, veri[1]);
}
if (veri[1] < -50) { //Sol.
analogWrite(IN1, 0);
analogWrite(IN2, -veri[1]);
analogWrite(IN3, -veri[1]);
analogWrite(IN4, 0);
}
if (veri[0] > -50 && veri[0] < 50 && veri[1] > -50 && veri[1] < 50) { // Dur.
analogWrite(IN1, 0);
analogWrite(IN2, 0);
analogWrite(IN3, 0);
analogWrite(IN4, 0);
}
if (veri[2] == 0)
digitalWrite(buzzer, HIGH); // Korna çal.
else
digitalWrite(buzzer, LOW); // Korna durdur.
}
}
#include <SPI.h> // nRF24L01+ ile SPI iletişim.
#include <RF24.h> // v1.4.2
int x, y; // x ve y düzlemlerinin değişkenleri.
RF24 radio(7, 8); // radio isimli nesne oluştur. CE ve CSN pinleri.
int veri[3]; // x, y düzlemi ve korna için dizi tanımlama.
const byte sw=2; // sw (buton) pini.
void setup() {
pinMode(sw, INPUT_PULLUP); // Butona basınca 0.
Serial.begin(9600); // Hataları seri monitörde görebilmek için seri iletişimi başlat.
if (!radio.begin()) { // nRF24L01+'yı başlat.
Serial.println("nRF24L01+ bağlantıları yanlış veya temazsızlık var. nRF24L01+ bozulmuş olabilir."); //nRF24L01+ modülü başlamıyorsa uyarı ver.
while (1) {}
}
radio.openWritingPipe(1234); // İletişim anahtarı 1234.
}
void loop() {
x = analogRead(A0);
y = analogRead(A1);
bool swDurum = digitalRead(sw);
veri[0] = map(x, 0, 1023, -255, 255 ); //X düzleminin verisi (Geri-ileri).
veri[1] = map(y, 0, 1023, -255, 255); //Y düzeleminin verisi (Sol-sağ).
veri[2] = swDurum; //Butona basılma bilgisi. 0 basıldı, 1 basılmadı bilgisi.
radio.write(veri, sizeof(veri)); // veri değişkenindeki bilgiyi nRF24L01+'ya gönder.
}
No responses yet