Arama butonu
6
Cevap
2433
Tıklama
0
Öne Çıkarma
nRF24L01 birden fazla komut gönderme
A
10 yıl
Er
Konu Sahibi

nRF24L01 üzerinden bir komut gönderip almayı(buton/led) başarabildim. Fakat benim istediğim şey 2 ayrı butonla 2 ledi ayrı ayrı yakabilmek. Mesela 1. butona basılınca 1. led 2. Butona basılınca 2. led yansın tarzında. Aslında 2 den fazla kullanmayı düşünüyorum. Şimdi 2 sorum olacak.

Nasıl 2 ayrı komut kullanabilirim ?
Bunun bir sınırı var mı ? Varsa kaç farklı komut gönderme sınırı var ?

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil





< Bu mesaj bu kişi tarafından değiştirildi Aeret -- 18 Ağustos 2015; 23:10:11 >

< Bu ileti mobil sürüm kullanılarak atıldı >

T
10 yıl
Yüzbaşı

Bu bahsettiğin led buton olayını nasıl yaptın? Birden fazla komut tabiki gönderebilirsin bunun için Pic veya Arduino kullanman gerekir.Basit olsun istiyorsan Arduino kullan.



A
10 yıl
Er
Konu Sahibi

Arduinodan bahsediyorum zaten. Kusura bakmayın belirtmeyi unutmuşum. Kullandığım kodları da yazayım buraya.



Alıcı:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int LED1 = 3;

void setup(void){
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
pinMode(LED1, OUTPUT);}

void loop(void){
if (radio.available()){
bool done = false;
while (!done){
done = radio.read(msg, 1);
Serial.println(msg[0]);
if (msg[0] == 111){delay(10);digitalWrite(LED1, HIGH);}
else {digitalWrite(LED1, LOW);}
delay(10);}}
else{Serial.println("No radio available");}}


Verici:

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
int msg[1];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int SW1 = 7;

void setup(void){
radio.begin();
radio.openWritingPipe(pipe);}

void loop(void){
if (digitalRead(SW1) == HIGH){
msg[0] = 111;
radio.write(msg, 1);}}



< Bu ileti mobil sürüm kullanılarak atıldı >

G
10 yıl
Yarbay

Her türden sayısız komut gönderilebilir. Önce bir format belirle ve o formata uygun şekilde sayıları gönder. 1 byte ile 8 ayrı ledi kontrol etmen mümkün. Ben olsam önce komut sonra veri şeklinde en az 2 byte gönderirdim, daha genel amaçlı olur.


Bu mesaja 1 cevap geldi.
A
10 yıl
Er
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

Her türden sayısız komut gönderilebilir. Önce bir format belirle ve o formata uygun şekilde sayıları gönder. 1 byte ile 8 ayrı ledi kontrol etmen mümkün. Ben olsam önce komut sonra veri şeklinde en az 2 byte gönderirdim, daha genel amaçlı olur.

Örnek küçük bir kod yazabilir misiniz rica etsem ?



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
G
10 yıl
Yarbay

Ben arduino kullanıcısı değilim ama kabaca yazayım bişeyler. Bunlar ileri seviye ancak öğrendikten sonra çok daha basit olduğunu göreceksin.

#define LED0 _BV(0)
#define LED1 _BV(1)
#define LED2 _BV(2)
#define LED3 _BV(3)
#define LED4 _BV(4)
#define LED5 _BV(5)
#define LED6 _BV(6)
#define LED7 _BV(7)

Bunlar led tanımlamaları. byte türünde bir değişkene şu şekilde yazarsın. Mesela 2. ve 5. ledleri yakmak istiyoruz.
byte yaz = LED2 | LED5;

Bu kod yaz değişkeninin 2. ve 5. bitlerini 1 yapar, diğer bitler 0 olur. Sonra bu değişkeni verici ile gönderirsin.
radio.write(&yaz, 1);

Veriyi alınca en verimli yol bunu direkt porta yazmaktır.
radio.read(&PORTD, 1);
...

PORTD nedir dersen, şu adrestekihttps://www.arduino.cc/en/Hacking/PinMapping168
PD ile başlayan 8 tane pin portd oluyor. Yukarıdaki kod PD2 VE PD5 pinlerini "aynı anda" HIGH (1) yapar.





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 20 Ağustos 2015; 22:36:49 >
Bu mesaja 1 cevap geldi.
A
10 yıl
Er
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

Ben arduino kullanıcısı değilim ama kabaca yazayım bişeyler. Bunlar ileri seviye ancak öğrendikten sonra çok daha basit olduğunu göreceksin.

#define LED0 _BV(0)
#define LED1 _BV(1)
#define LED2 _BV(2)
#define LED3 _BV(3)
#define LED4 _BV(4)
#define LED5 _BV(5)
#define LED6 _BV(6)
#define LED7 _BV(7)

Bunlar led tanımlamaları. byte türünde bir değişkene şu şekilde yazarsın. Mesela 2. ve 5. ledleri yakmak istiyoruz.
byte yaz = LED2 | LED5;

Bu kod yaz değişkeninin 2. ve 5. bitlerini 1 yapar, diğer bitler 0 olur. Sonra bu değişkeni verici ile gönderirsin.
radio.write(&yaz, 1);

Veriyi alınca en verimli yol bunu direkt porta yazmaktır.
radio.read(&PORTD, 1);
...

PORTD nedir dersen, şu adrestekihttps://www.arduino.cc/en/Hacking/PinMapping168
PD ile başlayan 8 tane pin portd oluyor. Yukarıdaki kod PD2 VE PD5 pinlerini "aynı anda" HIGH (1) yapar.


Sanırım yavaş yavaş oturuyor :)



< Bu ileti mobil sürüm kullanılarak atıldı >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.