Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
6
Cevap
2436
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 ?





< 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.