Buat agip

Dependencies:   Motor_1 encoderKRAI mbed millis

Fork of Robo_Taker_Nasional_2018 by KRAI 2018

Committer:
MarchioKevin
Date:
Sat May 26 08:19:01 2018 +0000
Revision:
12:9f56ff893897
Parent:
3:b1403fcdaeb1
Waini;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MarchioKevin 3:b1403fcdaeb1 1 #ifndef MBED_H
Fathoni17 0:22acd37ed695 2 #include "mbed.h"
MarchioKevin 3:b1403fcdaeb1 3 #endif
MarchioKevin 3:b1403fcdaeb1 4
MarchioKevin 3:b1403fcdaeb1 5 #ifndef JoystickPS3__serialDEFAULT_BAUD
Fathoni17 0:22acd37ed695 6 #define JoystickPS3__serialDEFAULT_BAUD 115200
MarchioKevin 3:b1403fcdaeb1 7 #endif
MarchioKevin 3:b1403fcdaeb1 8
MarchioKevin 3:b1403fcdaeb1 9 //Serial debug(USBTX,USBRX);
MarchioKevin 3:b1403fcdaeb1 10
Fathoni17 0:22acd37ed695 11 namespace JoystickPS3 {
MarchioKevin 3:b1403fcdaeb1 12
Fathoni17 0:22acd37ed695 13 class joysticknucleo {
Fathoni17 0:22acd37ed695 14 public:
Fathoni17 0:22acd37ed695 15 joysticknucleo(PinName tx, PinName rx) : _serial(tx, rx)
Fathoni17 0:22acd37ed695 16 {
Fathoni17 0:22acd37ed695 17
Fathoni17 0:22acd37ed695 18 }
Fathoni17 0:22acd37ed695 19
Fathoni17 0:22acd37ed695 20 // Deklarasi variabel tombol analog
Fathoni17 0:22acd37ed695 21 unsigned char LX, LY, RX, RY, R2, L2;
Fathoni17 0:22acd37ed695 22
Fathoni17 0:22acd37ed695 23 unsigned char button;
Fathoni17 0:22acd37ed695 24 unsigned char RL;
Fathoni17 0:22acd37ed695 25 unsigned char button_click;
Fathoni17 0:22acd37ed695 26 unsigned char RL_click;
Fathoni17 0:22acd37ed695 27
Fathoni17 0:22acd37ed695 28 void setup(){
Fathoni17 0:22acd37ed695 29 _serial.baud(JoystickPS3__serialDEFAULT_BAUD);
MarchioKevin 3:b1403fcdaeb1 30 // debug.baud(9600);
Fathoni17 0:22acd37ed695 31 }
MarchioKevin 3:b1403fcdaeb1 32
Fathoni17 0:22acd37ed695 33 /*********************************************************************************************/
Fathoni17 0:22acd37ed695 34 /** **/
Fathoni17 0:22acd37ed695 35 /** FUNGSI PEMBACAAN DATA **/
Fathoni17 0:22acd37ed695 36 /** - Data yang diterima dari Serial Arduino berbentuk 8-bit **/
Fathoni17 0:22acd37ed695 37 /** - Data yang diterima diolah menjadi boolean / 1-bit untuk data tombol button dan RL **/
Fathoni17 0:22acd37ed695 38 /** karena data yang digunakan adalah 1-bit (true/false) **/
Fathoni17 0:22acd37ed695 39 /** - Untuk analog data yang diterima tidak diolah karena rentang data yang dikirimkan **/
Fathoni17 0:22acd37ed695 40 /** memiliki rentang 0-255 / 8-bit, dan data yang akan digunakan adalah data 8-bit **/
Fathoni17 0:22acd37ed695 41 /** **/
Fathoni17 0:22acd37ed695 42 /** |------|-------|-------|------|-------|--------|-----------|----------| **/
Fathoni17 0:22acd37ed695 43 /** Bit Ke | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/
Fathoni17 0:22acd37ed695 44 /** |------|-------|-------|------|-------|--------|-----------|----------| **/
Fathoni17 0:22acd37ed695 45 /** Data | kiri | bawah | kanan | atas | kotak | silang | lingkaran | segitiga | **/
Fathoni17 0:22acd37ed695 46 /** |------|-------|-------|------|-------|--------|-----------|----------| **/
Fathoni17 0:22acd37ed695 47 /** **/
Fathoni17 0:22acd37ed695 48 /** - Penggabungan data R1, R2, L1, L2, R3, L3, START, dan SELECT disimpan dalam **/
Fathoni17 0:22acd37ed695 49 /** variabel "RL" **/
Fathoni17 0:22acd37ed695 50 /** - Urutan data pada variabel "RL" dan "RL_click" adalah **/
Fathoni17 0:22acd37ed695 51 /** sebagai berikut **/
Fathoni17 0:22acd37ed695 52 /** **/
Fathoni17 0:22acd37ed695 53 /** |----|--------|-------|----|----|----|----| **/
Fathoni17 0:22acd37ed695 54 /** Bit Ke | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/
Fathoni17 0:22acd37ed695 55 /** |----|--------|-------|----|----|----|----| **/
Fathoni17 0:22acd37ed695 56 /** Data | PS | SELECT | START | L3 | L1 | R3 | R1 | **/
Fathoni17 0:22acd37ed695 57 /** |----|--------|-------|----|----|----|----| **/
Fathoni17 0:22acd37ed695 58 /** **/
Fathoni17 0:22acd37ed695 59 /*********************************************************************************************/
Fathoni17 0:22acd37ed695 60
MarchioKevin 3:b1403fcdaeb1 61 void olah_data()
MarchioKevin 3:b1403fcdaeb1 62 {
Fathoni17 0:22acd37ed695 63 // Pengolahan data dari data "button"
Fathoni17 0:22acd37ed695 64 segitiga = (bool)((button >> 0) & 0x1);
Fathoni17 0:22acd37ed695 65 lingkaran = (bool)((button >> 1) & 0x1);
Fathoni17 0:22acd37ed695 66 silang = (bool)((button >> 2) & 0x1);
Fathoni17 0:22acd37ed695 67 kotak = (bool)((button >> 3) & 0x1);
Fathoni17 0:22acd37ed695 68 atas = (bool)((button >> 4) & 0x1);
Fathoni17 0:22acd37ed695 69 kanan = (bool)((button >> 5) & 0x1);
Fathoni17 0:22acd37ed695 70 bawah = (bool)((button >> 6) & 0x1);
Fathoni17 0:22acd37ed695 71 kiri = (bool)((button >> 7) & 0x1);
Fathoni17 0:22acd37ed695 72
Fathoni17 0:22acd37ed695 73 // Pengolahan data dari data "RL"
Fathoni17 0:22acd37ed695 74 R1 = (bool)((RL >> 0) & 0x1);
Fathoni17 0:22acd37ed695 75 R3 = (bool)((RL >> 1) & 0x1);
Fathoni17 0:22acd37ed695 76 L1 = (bool)((RL >> 2) & 0x1);
Fathoni17 0:22acd37ed695 77 L3 = (bool)((RL >> 3) & 0x1);
Fathoni17 0:22acd37ed695 78 START = (bool)((RL >> 4) & 0x1);
Fathoni17 0:22acd37ed695 79 SELECT = (bool)((RL >> 5) & 0x1);
Fathoni17 0:22acd37ed695 80 PS = (bool)((RL >> 6) & 0x1);
Fathoni17 0:22acd37ed695 81
MarchioKevin 3:b1403fcdaeb1 82 // R2 click dan L2 click
MarchioKevin 3:b1403fcdaeb1 83 if (R2 > 100) {
MarchioKevin 3:b1403fcdaeb1 84 if ( R2sebelum) { R2_click = false;
MarchioKevin 3:b1403fcdaeb1 85 } else { R2_click = true;}
MarchioKevin 3:b1403fcdaeb1 86 R2sebelum = true;
MarchioKevin 3:b1403fcdaeb1 87 }else {
MarchioKevin 3:b1403fcdaeb1 88 R2sebelum = false;
MarchioKevin 3:b1403fcdaeb1 89 R2_click = false;
MarchioKevin 3:b1403fcdaeb1 90 }
MarchioKevin 3:b1403fcdaeb1 91 if (L2 > 100) {
MarchioKevin 3:b1403fcdaeb1 92 if ( L2sebelum) { L2_click = false;
MarchioKevin 3:b1403fcdaeb1 93 } else { L2_click = true;}
MarchioKevin 3:b1403fcdaeb1 94 L2sebelum = true;
MarchioKevin 3:b1403fcdaeb1 95 }else { L2sebelum = false;
MarchioKevin 3:b1403fcdaeb1 96 L2_click = false;
MarchioKevin 3:b1403fcdaeb1 97 }
MarchioKevin 3:b1403fcdaeb1 98
Fathoni17 0:22acd37ed695 99 segitiga_click = (bool)((button_click >> 0) & 0x1);
Fathoni17 0:22acd37ed695 100 lingkaran_click = (bool)((button_click >> 1) & 0x1);
Fathoni17 0:22acd37ed695 101 silang_click = (bool)((button_click >> 2) & 0x1);
Fathoni17 0:22acd37ed695 102 kotak_click = (bool)((button_click >> 3) & 0x1);
Fathoni17 0:22acd37ed695 103 atas_click = (bool)((button_click >> 4) & 0x1);
Fathoni17 0:22acd37ed695 104 kanan_click = (bool)((button_click >> 5) & 0x1);
Fathoni17 0:22acd37ed695 105 bawah_click = (bool)((button_click >> 6) & 0x1);
Fathoni17 0:22acd37ed695 106 kiri_click = (bool)((button_click >> 7) & 0x1);
Fathoni17 0:22acd37ed695 107
Fathoni17 0:22acd37ed695 108 // Pengolahan data dari data "RL"
Fathoni17 0:22acd37ed695 109 R1_click = (bool)((RL_click >> 0) & 0x1);
Fathoni17 0:22acd37ed695 110 R3_click = (bool)((RL_click >> 1) & 0x1);
Fathoni17 0:22acd37ed695 111 L1_click = (bool)((RL_click >> 2) & 0x1);
Fathoni17 0:22acd37ed695 112 L3_click = (bool)((RL_click >> 3) & 0x1);
Fathoni17 0:22acd37ed695 113 START_click = (bool)((RL_click >> 4) & 0x1);
Fathoni17 0:22acd37ed695 114 SELECT_click = (bool)((RL_click >> 5) & 0x1);
Fathoni17 0:22acd37ed695 115 PS_click = (bool)((RL_click >> 6) & 0x1);
Fathoni17 0:22acd37ed695 116 }
Fathoni17 0:22acd37ed695 117
Fathoni17 0:22acd37ed695 118 /*********************************************************************************************/
Fathoni17 0:22acd37ed695 119 /** **/
Fathoni17 0:22acd37ed695 120 /** FUNGSI IDLE **/
Fathoni17 0:22acd37ed695 121 /** - Fungsi dijalankan saat Arduino mengirimkan data yang merupakan **/
Fathoni17 0:22acd37ed695 122 /** kondisi PS3 Disconnected **/
Fathoni17 0:22acd37ed695 123 /** - Fungsi membuat semua data joystik bernilai 0 **/
Fathoni17 0:22acd37ed695 124 /** **/
Fathoni17 0:22acd37ed695 125 /*********************************************************************************************/
Fathoni17 0:22acd37ed695 126
Fathoni17 0:22acd37ed695 127 void idle(){
Fathoni17 0:22acd37ed695 128 // Set 0
Fathoni17 0:22acd37ed695 129 button = 0;
Fathoni17 0:22acd37ed695 130 RL = 0;
Fathoni17 0:22acd37ed695 131 button_click = 0;
Fathoni17 0:22acd37ed695 132 RL_click = 0;
MarchioKevin 3:b1403fcdaeb1 133 R2_click =0;
MarchioKevin 3:b1403fcdaeb1 134 L2_click =0;
Fathoni17 0:22acd37ed695 135 R2 = 0;
Fathoni17 0:22acd37ed695 136 L2 = 0;
Fathoni17 0:22acd37ed695 137 RX = 0;
Fathoni17 0:22acd37ed695 138 RY = 0;
Fathoni17 0:22acd37ed695 139 LX = 0;
Fathoni17 0:22acd37ed695 140 LY = 0;
Fathoni17 0:22acd37ed695 141
Fathoni17 0:22acd37ed695 142 }
Fathoni17 0:22acd37ed695 143
Fathoni17 0:22acd37ed695 144 /*********************************************************************************************/
Fathoni17 0:22acd37ed695 145 /** **/
Fathoni17 0:22acd37ed695 146 /** FUNGSI PEMBACAAN DATA **/
Fathoni17 0:22acd37ed695 147 /** - Fungsi pembacaan data yang dikirim dari arduino **/
Fathoni17 0:22acd37ed695 148 /** - Data yang dikirim dari arduino merupakan paket data dengan format pengiriman **/
Fathoni17 0:22acd37ed695 149 /** **/
Fathoni17 0:22acd37ed695 150 /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/
Fathoni17 0:22acd37ed695 151 /** | 0x88 | 0x08 | button | RL | button_click | RL_click | R2 | L2 | RX | RY | LX | LY | **/
Fathoni17 0:22acd37ed695 152 /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/
Fathoni17 0:22acd37ed695 153 /** **/
Fathoni17 0:22acd37ed695 154 /** |------|------| **/
Fathoni17 0:22acd37ed695 155 /** | 0x88 | 0x09 | **/
Fathoni17 0:22acd37ed695 156 /** |------|------| **/
Fathoni17 0:22acd37ed695 157 /** **/
Fathoni17 0:22acd37ed695 158 /** - Jika urutan data yang diterima seperti tabel diatas, maka data tersebut akan **/
Fathoni17 0:22acd37ed695 159 /** diolah untuk input ke aktuator **/
Fathoni17 0:22acd37ed695 160 /** **/
Fathoni17 0:22acd37ed695 161 /*********************************************************************************************/
Fathoni17 0:22acd37ed695 162
MarchioKevin 3:b1403fcdaeb1 163 void baca_data()
MarchioKevin 3:b1403fcdaeb1 164 {
Fathoni17 0:22acd37ed695 165 // Interrupt Serial
Fathoni17 0:22acd37ed695 166 if(_serial.readable()&&(_serial.getc()==0x88)) {
Fathoni17 0:22acd37ed695 167 // Pembacaan data dilakukan jika data awal yang diterima adalah 0x88 kemudian 0x08
Fathoni17 0:22acd37ed695 168 if(_serial.getc()==0x08){
Fathoni17 0:22acd37ed695 169 // Proses Pembacaan Data
Fathoni17 0:22acd37ed695 170 button = _serial.getc();
Fathoni17 0:22acd37ed695 171 RL = _serial.getc();
Fathoni17 0:22acd37ed695 172 button_click = _serial.getc();
Fathoni17 0:22acd37ed695 173 RL_click = _serial.getc();
Fathoni17 0:22acd37ed695 174 R2 = _serial.getc();
Fathoni17 0:22acd37ed695 175 L2 = _serial.getc();
Fathoni17 0:22acd37ed695 176 RX = _serial.getc();
Fathoni17 0:22acd37ed695 177 RY = _serial.getc();
Fathoni17 0:22acd37ed695 178 LX = _serial.getc();
Fathoni17 0:22acd37ed695 179 LY = _serial.getc();
Fathoni17 0:22acd37ed695 180 } else if(_serial.getc()==0x09) {
Fathoni17 0:22acd37ed695 181 // PS3 Disconnected
Fathoni17 0:22acd37ed695 182 idle();
Fathoni17 0:22acd37ed695 183 } else {
MarchioKevin 3:b1403fcdaeb1 184 idle(); }
MarchioKevin 3:b1403fcdaeb1 185 // Indikator - Print data pada monitor PC
MarchioKevin 3:b1403fcdaeb1 186 // debug.printf("%2x %2x %2x %2x %3d %3d %3d %3d %3d %3d\n\r",button, RL, button_click, RL_click, R2, L2, RX, RY, LX, LY);
Fathoni17 0:22acd37ed695 187 }
Fathoni17 0:22acd37ed695 188 }
MarchioKevin 3:b1403fcdaeb1 189
MarchioKevin 3:b1403fcdaeb1 190
Fathoni17 0:22acd37ed695 191 int readable(){
Fathoni17 0:22acd37ed695 192 return _serial.readable();
Fathoni17 0:22acd37ed695 193 }
MarchioKevin 3:b1403fcdaeb1 194
Fathoni17 0:22acd37ed695 195 public:
Fathoni17 0:22acd37ed695 196 // Deklarasi variabel tombol joystik
Fathoni17 0:22acd37ed695 197 bool kiri, kanan, atas, bawah;
Fathoni17 0:22acd37ed695 198 bool segitiga, lingkaran, kotak, silang;
Fathoni17 0:22acd37ed695 199 bool L1, R1, L3, R3, START, SELECT, PS;
Fathoni17 0:22acd37ed695 200
Fathoni17 0:22acd37ed695 201 bool kiri_click, kanan_click, atas_click, bawah_click;
Fathoni17 0:22acd37ed695 202 bool segitiga_click, lingkaran_click, kotak_click, silang_click;
MarchioKevin 3:b1403fcdaeb1 203 bool L1_click, R1_click, L3_click, R3_click, R2_click, L2_click;
MarchioKevin 3:b1403fcdaeb1 204 bool R2sebelum,L2sebelum;
Fathoni17 0:22acd37ed695 205 bool START_click, SELECT_click, PS_click;
Fathoni17 0:22acd37ed695 206
Fathoni17 0:22acd37ed695 207 protected:
Fathoni17 0:22acd37ed695 208 virtual int _getc(){return _serial.getc();}
Fathoni17 0:22acd37ed695 209 Serial _serial;
Fathoni17 0:22acd37ed695 210 };
MarchioKevin 3:b1403fcdaeb1 211
Fathoni17 0:22acd37ed695 212 };
MarchioKevin 3:b1403fcdaeb1 213
MarchioKevin 3:b1403fcdaeb1 214 using namespace JoystickPS3;