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