You are on page 1of 27

KELAS JTD XX POLINEMA

KELOMPOK 3 4
NAMA 1 Ainnur Rahayu Manal
Pratiwi
NAMA 2 Najwa Khaerunisa Nidya Suroyya
PROJEK Perintah Kendali secara Wireless

TUGAS I:
Rancang suatu program yang dapat digunakan untuk melakukan perintah
pengendalian dari Host ke Client. Pengendalian LED pada sisi Client
Note: Tiap pasangan harus bekerja pada kanal yang berbeda

PROGRAM HOST
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipeTx = 0x4C4C01LL; //alamat lawan


uint64_t pipeRx = 0x4C4C02LL; //alamat sendiri
uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);

Radio.begin();
Radio.setChannel(105);

Data.Kata[0]=S;
Data.Kata[1]=i;
Data.Kata[2]=a;
Data.Kata[3]=p; Data.Kata[4]=.;
Data.Kata[5]=.;

Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);

Radio.openReadingPipe(1, pipeRx);delay(50);
Radio.startListening();
}

void loop()
{
if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);
}

if (Flag == true)
{
Radio.stopListening(); delay(100);
Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);
Flag = false;
Radio.openReadingPipe(1, pipeRx); delay(50);
Radio.startListening();
delay(100);
}

void serialEvent()
{
while (Serial.available() )
{
char data = (char)Serial.read();
Data.Kata[n] = data; n++;
if (data == '_') { Flag = true; n=0; }
}
}
PROGRAM CLIENT
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipeTx = 0x4C4C02LL; //alamat lawan


uint64_t pipeRx = 0x4C4C01LL; //alamat sendiri
uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

int D5, D6, D7, D8;

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);

Radio.begin();
Radio.setChannel(105);

Data.Kata[0]=S;
Data.Kata[1]=i;
Data.Kata[2]=a;
Data.Kata[3]=p;
Data.Kata[4]=.;
Data.Kata[5]=.;

pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);

Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);

Radio.openReadingPipe(1, pipeRx);delay(50);
Radio.startListening();
}
void loop()
{

if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);

if (Data.Kata[1] == 'H') {digitalWrite(D5,HIGH);}


else {digitalWrite(D5, LOW); }

if (Data.Kata[2] == 'H') {digitalWrite(D6,HIGH);}


else {digitalWrite(D6, LOW); }

if (Data.Kata[3] == 'H') {digitalWrite(D7,HIGH);}


else {digitalWrite(D7, LOW); }

if (Data.Kata[4] == 'H') {digitalWrite(D8,HIGH);}


else {digitalWrite(D8, LOW); }

LANGKAH KERJA
a. UpLoad program diatas untuk HOST dan CLIENT dengan alamat Tx dan Rx
sesuai tabel alamat yang disepakati
b. Reset dengan menekan tombol reset. Amati apakah masing-masing
menerima pesan Siap...;
c. Ketikkan secara perintah OHLHL_ pada HOST
d. Amati perintah yang diterima oleh CLIENT dan akibat yang terjadi pada LED
D5, LED D6, LED D7 dan LED D8 ( Gunakan AVO meter untuk Uno)
Pembahasan
(Program Host)
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipeTx = 0x4D4D04LL; //alamat lawan


uint64_t pipeRx = 0x4D4D03LL; //alamat sendiri
uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);
Radio.begin();
Radio.setChannel(109);

Data.Kata[0]='S';Data.Kata[1]='i'; Data.Kata[2]='a';
Data.Kata[3]='p';Data.Kata[4]='.'; Data.Kata[5]='.';

Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);

Radio.openReadingPipe(1, pipeRx);delay(50);
Radio.startListening();
}

void loop()
{
if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);
for (int k=0 ; k <=19; k++)
{
Data.Kata[k]=' ';
}
}

if (Flag == true)
{
Radio.stopListening(); delay(100);
Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);
Flag = false;
Radio.openReadingPipe(1, pipeRx); delay(50);
Radio.startListening();
delay(100);
}

void serialEvent()
{
while (Serial.available() )
{
char data = (char)Serial.read();
Data.Kata[n] = data; n++;
if (data == '_') { Flag = true; n=0; }
}
}

void hapus ()
{
for (int k=0 ; k <=19; k++)
{Data.Kata[k]=' ';
}
}
(Program Client)
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipeTx = 0x4D4D03LL; //alamat lawan


uint64_t pipeRx = 0x4D4D04LL; //alamat sendiri
uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

int D5=4, D6=5, D7=6, D8=7;


char back [4];

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);

Radio.begin();
Radio.setChannel(109);

Data.Kata[0]='S';
Data.Kata[1]='i';
Data.Kata[2]='a';
Data.Kata[3]='p';
Data.Kata[4]='.';
Data.Kata[5]='.';

pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);

Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);

Radio.openReadingPipe(1, pipeRx);delay(50);
Radio.startListening();

void loop()
{
if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);

if (Data.Kata[1] == 'H') {digitalWrite(D5,HIGH);back[0]= '1';}


else {digitalWrite(D5, LOW);back[0]= '0' ;}

if (Data.Kata[2] == 'H') {digitalWrite(D6,HIGH);back[0]= '1';}


else {digitalWrite(D6, LOW);back[0]= '0' ;}

if (Data.Kata[3] == 'H') {digitalWrite(D7,HIGH);back[0]= '1';}


else {digitalWrite(D7, LOW);back[0]= '0' ;}

if (Data.Kata[4] == 'H') {digitalWrite(D8,HIGH);back[0]= '1';}


else {digitalWrite(D8, LOW);back[0]= '0' ;}

Radio.stopListening(); delay (100);

Data.Kata[0]='0';
if (digitalRead (D5)==HIGH)
Data.Kata[1]='1';
else Data.Kata[1]='0';

Data.Kata[0]='0';
if (digitalRead (D6)==HIGH)
Data.Kata[2]='1';
else Data.Kata[2]='0';
Data.Kata[0]='0';
if (digitalRead (D7)==HIGH)
Data.Kata[3]='1';
else Data.Kata[3]='0';

Data.Kata[0]='0';
if (digitalRead (D8)==HIGH)
Data.Kata[4]='1';
else Data.Kata[4]='0';

Data.Kata[5]='_';

Radio.openWritingPipe(pipeTx), delay(50);
Radio.write(&Data, sizeof(Data)); delay(50);
Flag = false;
Radio.openReadingPipe(1, pipeRx); delay(50);
Radio.startListening();
delay(100);
}

}
Hasil Praktikum
(Program Host)
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipeTx = 0x4D4D04LL; //alamat lawan


uint64_t pipeRx = 0x4D4D03LL; //alamat sendiri
uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);
Radio.begin();
Radio.setChannel(109);

Data.Kata[0]='S';Data.Kata[1]='i'; Data.Kata[2]='a';
Data.Kata[3]='p';Data.Kata[4]='.'; Data.Kata[5]='.';

Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);

Radio.openReadingPipe(1, pipeRx);delay(50);
Radio.startListening();
}

void loop()
{
if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);
for (int k=0 ; k <=19; k++)
{
Data.Kata[k]=' ';
}
}

if (Flag == true)
{
Radio.stopListening(); delay(100);
Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);
Flag = false;
Radio.openReadingPipe(1, pipeRx); delay(50);
Radio.startListening();
delay(100);
}

void serialEvent()
{
while (Serial.available() )
{
char data = (char)Serial.read();
Data.Kata[n] = data; n++;
if (data == '_') { Flag = true; n=0; }
}
}

void hapus ()
{
for (int k=0 ; k <=19; k++)
{Data.Kata[k]=' ';
}
}
(Program Client)
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipeTx = 0x4D4D03LL; //alamat lawan


uint64_t pipeRx = 0x4D4D04LL; //alamat sendiri
uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

int D5=4, D6=5, D7=6, D8=7;


char back [4];

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);

Radio.begin();
Radio.setChannel(109);

Data.Kata[0]='S';
Data.Kata[1]='i';
Data.Kata[2]='a';
Data.Kata[3]='p';
Data.Kata[4]='.';
Data.Kata[5]='.';

pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
pinMode(D7, OUTPUT);
pinMode(D8, OUTPUT);

Radio.openWritingPipe(pipeTx); delay(50);
Radio.write(&Data, sizeof(Data) ); delay(50);

Radio.openReadingPipe(1, pipeRx);delay(50);
Radio.startListening();

void loop()
{
if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);

if (Data.Kata[1] == 'H') {digitalWrite(D5,HIGH);back[0]= '1';}


else {digitalWrite(D5, LOW);back[0]= '0' ;}

if (Data.Kata[2] == 'H') {digitalWrite(D6,HIGH);back[0]= '1';}


else {digitalWrite(D6, LOW);back[0]= '0' ;}

if (Data.Kata[3] == 'H') {digitalWrite(D7,HIGH);back[0]= '1';}


else {digitalWrite(D7, LOW);back[0]= '0' ;}

if (Data.Kata[4] == 'H') {digitalWrite(D8,HIGH);back[0]= '1';}


else {digitalWrite(D8, LOW);back[0]= '0' ;}

Radio.stopListening(); delay (100);

Data.Kata[0]='0';
if (digitalRead (D5)==HIGH)
Data.Kata[1]='1';
else Data.Kata[1]='0';

Data.Kata[0]='0';
if (digitalRead (D6)==HIGH)
Data.Kata[2]='1';
else Data.Kata[2]='0';
Data.Kata[0]='0';
if (digitalRead (D7)==HIGH)
Data.Kata[3]='1';
else Data.Kata[3]='0';

Data.Kata[0]='0';
if (digitalRead (D8)==HIGH)
Data.Kata[4]='1';
else Data.Kata[4]='0';

Data.Kata[5]='_';

Radio.openWritingPipe(pipeTx), delay(50);
Radio.write(&Data, sizeof(Data)); delay(50);
Flag = false;
Radio.openReadingPipe(1, pipeRx); delay(50);
Radio.startListening();
delay(100);
}

}
Tabel Data nyala lampu
No Data D5 D6 D7 D8 Balasan
1 OLLHH_ Mati Mati Hidup Hidup O0011
2 OLLLH_ Mati Mati Mati Hidup O0001
3 OLLLL_ Mati Mati Mati Mati O0000
4 OHHH_ Hidup Hidup Hidup Hidup O1111
5 OHHHL_ Hidup Hidup Hidup Mati O1110
Analisa Data :
Kelompok 3= host
Kelompok 4= client
Pada praktikum ini host mengirimkan perintah pada client, sebagai berikut:
- Command O yang berfungsi sebagai perintah untuk client
- Data H dan L , yang mana H=high yang berarti led menyala
(tegangan mendekati 5 untuk arduino UNO) dan L=low yang berarti
led mati(tegangan 0 untuk arduino UNO).
Pada client akan mengerjakan perintah yang dikirimkan oleh host, setelah
mengerjakan perintah dari host, client akan melalukan stop listening, open
writing, dan write.
-Stop listening= client akan berhenti untuk mengerjakan perintah dari host
-Open writing= client akan memulai untuk mengirim balasan kepada host,
berupa bilangan biner, konversi dari data yang dikirm oleh host.
-Write= client mengetik balasan untuk host.

Pada praktikum ini menggunakan arduino Nano, sehingga untuk mengetahui


hasil perintah telah dilakukan oleh client dengan benar , menggunakan
AVOMeter untuk mengukur teganggan yang ada pada pin D5=pin 4, D6= pin
5, D7=pin 6, D8= pin7. Range teganggan yang digunakan 0-5 volt. Sehingga
nilai H diwakili dengan nilai tegangan yang 5 volt namun yang tertampil
pada AVOmeter berkisar antara 4,56 V sampai 4,86 V hal ini dikarenakan
adanya noise pada saat pengukuran, sedangkan nilai L diwakili dengan nilai
tegangan 0 volt.
Kesimpulan :
Perintah yang dikirim dari Host menuju Client terdiri dari OXXXX_
Dimana
O = tanda untuk perintah dari host agar dikerjakan oleh client.
XXXX = data yang dapat dikirimkan dari client ke host. Dapat berupa H atau
L. H diwakili dengan tegangan 5 V untuk arduino UNO (led menyala untuk
arduino nano) sedangkan L diwakili dengan tegangan 0 V untuk arduino UNO
(led padam untuk arduino nano).
_ = tanda untuk mengakhiri data.

Host dapat menerima data dari Client setelah data dari Host berhasil diterima
Client (handshaking). Data balasan yang diterima Host berupa 4 deret biner
yaitu 1 atau 0. 1 yang berarti tegangan yang dideteksi ~5V (H) dan 0 yang
berarti tegangan yang dideteksi 0V (L).

You might also like