KRAI 2016 / Mbed 2 deprecated BaseHybrid_MoboV1_tesPID

Dependencies:   Motor NewTextLCD PID mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PS3_USB.h Source File

PS3_USB.h

00001 /*********************************************************************************************/
00002 /** GARUDAGO-ITB (KRAI2016)                                                                 **/
00003 /** #ROADTOBANGKOK!                                                                         **/
00004 /**                                                                                         **/
00005 /** HEADER DATA JOYSTIK PS3_USB                                                             **/
00006 /**                                                                                         **/
00007 /**                                                                                         **/
00008 /** Created by :                                                                            **/
00009 /** Erya Warandita Bupuly Tomara                                                            **/
00010 /** EL'13 - 13213063                                                                        **/
00011 /**                                                                                         **/
00012 /** Last Update : 17 November 2015, 00.30 WIB                                               **/
00013 /*********************************************************************************************/
00014 
00015 
00016 #ifndef MBED_H
00017 #include "mbed.h"
00018 #endif
00019 
00020 #ifndef PS3USB__serialDEFAULT_BAUD
00021 #define PS3USB__serialDEFAULT_BAUD       115200
00022 #endif
00023 
00024 Serial debug(USBTX,USBRX);
00025 
00026 
00027  
00028 namespace PS3USB {
00029 
00030 class PS3_USB {
00031 public:
00032     PS3_USB (PinName tx, PinName rx) : _serial(tx, rx)
00033     {
00034         
00035     }
00036     
00037 // Deklarasi variabel tombol analog
00038     unsigned char LX, LY, RX, RY, R2, L2;
00039     
00040     unsigned char button;
00041     unsigned char RL;
00042     unsigned char button_click;
00043     unsigned char RL_click;
00044     
00045     void setup(){
00046         _serial.baud(PS3USB__serialDEFAULT_BAUD);
00047         debug.baud(9600);
00048         }
00049 
00050     /*********************************************************************************************/
00051     /**                                                                                         **/
00052     /** FUNGSI PEMBACAAN DATA                                                                   **/
00053     /** -   Data yang diterima dari Serial Arduino berbentuk 8-bit                              **/
00054     /** -   Data yang diterima diolah menjadi boolean / 1-bit untuk data tombol button dan RL   **/
00055     /**     karena data yang digunakan adalah 1-bit (true/false)                                **/
00056     /** -   Untuk analog data yang diterima tidak diolah karena rentang data yang dikirimkan    **/
00057     /**     memiliki rentang 0-255 / 8-bit, dan data yang akan digunakan adalah data 8-bit      **/
00058     /**                                                                                         **/
00059     /**         |------|-------|-------|------|-------|--------|-----------|----------|         **/
00060     /** Bit Ke  |   7  |   6   |   5   |   4  |   3   |    2   |      1    |     0    |         **/
00061     /**         |------|-------|-------|------|-------|--------|-----------|----------|         **/
00062     /** Data    | kiri | bawah | kanan | atas | kotak | silang | lingkaran | segitiga |         **/
00063     /**         |------|-------|-------|------|-------|--------|-----------|----------|         **/
00064     /**                                                                                         **/
00065     /** -   Penggabungan data R1, R2, L1, L2, R3, L3, START, dan SELECT disimpan dalam          **/
00066     /**     variabel "RL"                                                                       **/
00067     /** -   Urutan data pada variabel "RL" dan "RL_click" adalah                                **/
00068     /**     sebagai berikut                                                                     **/
00069     /**                                                                                         **/
00070     /**         |----|--------|-------|----|----|----|----|                                     **/
00071     /** Bit Ke  |  6 |    5   |   4   |  3 |  2 |  1 |  0 |                                     **/
00072     /**         |----|--------|-------|----|----|----|----|                                     **/
00073     /** Data    | PS | SELECT | START | L3 | L1 | R3 | R1 |                                     **/
00074     /**         |----|--------|-------|----|----|----|----|                                     **/
00075     /**                                                                                         **/
00076     /*********************************************************************************************/
00077     
00078     void olah_data()
00079     {
00080         // Pengolahan data dari data "button" 
00081         segitiga = (bool)((button >> 0) & 0x1);
00082         lingkaran = (bool)((button >> 1) & 0x1);
00083         silang = (bool)((button >> 2) & 0x1);
00084         kotak = (bool)((button >> 3) & 0x1);
00085         atas = (bool)((button >> 4) & 0x1);
00086         kanan = (bool)((button >> 5) & 0x1);
00087         bawah = (bool)((button >> 6) & 0x1);
00088         kiri = (bool)((button >> 7) & 0x1);
00089         
00090         // Pengolahan data dari data "RL" 
00091         R1 = (bool)((RL >> 0) & 0x1);
00092         R3 = (bool)((RL >> 1) & 0x1);
00093         L1 = (bool)((RL >> 2) & 0x1);
00094         L3 = (bool)((RL >> 3) & 0x1);
00095         START = (bool)((RL >> 4) & 0x1);
00096         SELECT = (bool)((RL >> 5) & 0x1);
00097         PS = (bool)((RL >> 6) & 0x1);
00098     
00099         segitiga_click = (bool)((button_click >> 0) & 0x1);
00100         lingkaran_click = (bool)((button_click >> 1) & 0x1);
00101         silang_click = (bool)((button_click >> 2) & 0x1);
00102         kotak_click = (bool)((button_click >> 3) & 0x1);
00103         atas_click = (bool)((button_click >> 4) & 0x1);
00104         kanan_click = (bool)((button_click >> 5) & 0x1);
00105         bawah_click = (bool)((button_click >> 6) & 0x1);
00106         kiri_click = (bool)((button_click >> 7) & 0x1);
00107         
00108         // Pengolahan data dari data "RL" 
00109         R1_click = (bool)((RL_click >> 0) & 0x1);
00110         R3_click = (bool)((RL_click >> 1) & 0x1);
00111         L1_click = (bool)((RL_click >> 2) & 0x1);
00112         L3_click = (bool)((RL_click >> 3) & 0x1);
00113         START_click = (bool)((RL_click >> 4) & 0x1);
00114         SELECT_click = (bool)((RL_click >> 5) & 0x1);
00115         PS_click = (bool)((RL_click >> 6) & 0x1);
00116     }
00117     
00118     /*********************************************************************************************/
00119     /**                                                                                         **/
00120     /** FUNGSI IDLE                                                                             **/
00121     /** -   Fungsi dijalankan saat Arduino mengirimkan data yang merupakan                      **/
00122     /**     kondisi PS3 Disconnected                                                            **/
00123     /** -   Fungsi membuat semua data joystik bernilai 0                                        **/
00124     /**                                                                                         **/
00125     /*********************************************************************************************/
00126     
00127     void idle(){
00128         // Set 0    
00129         button = 0;
00130         RL = 0;
00131         button_click = 0;
00132         RL_click = 0;
00133         R2 = 0;
00134         L2 = 0;
00135         RX = 0;
00136         RY = 0;
00137         LX = 0;
00138         LY = 0;
00139     
00140     }
00141     
00142     
00143     /*********************************************************************************************/
00144     /**                                                                                         **/
00145     /** FUNGSI PEMBACAAN DATA                                                                   **/
00146     /** -   Fungsi pembacaan data yang dikirim dari arduino                                     **/
00147     /** -   Data yang dikirim dari arduino merupakan paket data dengan format pengiriman        **/
00148     /**                                                                                         **/
00149     /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----|   **/
00150     /** | 0x88 | 0x08 | button | RL | button_click | RL_click | R2 | L2 | RX | RY | LX | LY |   **/
00151     /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----|   **/
00152     /**                                                                                         **/
00153     /** |------|------|                                                                         **/
00154     /** | 0x88 | 0x09 |                                                                         **/
00155     /** |------|------|                                                                         **/
00156     /**                                                                                         **/
00157     /** -   Jika urutan data yang diterima seperti tabel diatas, maka data tersebut akan        **/
00158     /**     diolah untuk input ke aktuator                                                      **/
00159     /**                                                                                         **/
00160     /*********************************************************************************************/
00161     
00162     void baca_data()
00163     {
00164         // Interrupt Serial
00165         if(_serial.readable()&&(_serial.getc()==0x88)) {
00166             // Pembacaan data dilakukan jika data awal yang diterima adalah 0x88 kemudian 0x08
00167             if(_serial.getc()==0x08){
00168                 // Proses Pembacaan Data
00169                 button = _serial.getc();
00170                 RL = _serial.getc();
00171                 button_click = _serial.getc();
00172                 RL_click = _serial.getc();
00173                 R2 = _serial.getc();
00174                 L2 = _serial.getc();
00175                 RX = _serial.getc();
00176                 RY = _serial.getc();
00177                 LX = _serial.getc();
00178                 LY = _serial.getc();
00179             } else if(_serial.getc()==0x09) {
00180                 // PS3 Disconnected
00181                 idle();
00182             } else {
00183                 idle(); }
00184            
00185         }   
00186     }
00187 
00188 
00189     
00190     int readable(){
00191         return _serial.readable();
00192     }
00193     
00194 public:
00195     // Deklarasi variabel tombol joystik
00196     bool kiri, kanan, atas, bawah;
00197     bool segitiga, lingkaran, kotak, silang;
00198     bool L1, R1, L3, R3, START, SELECT, PS;
00199     
00200     bool kiri_click, kanan_click, atas_click, bawah_click;
00201     bool segitiga_click, lingkaran_click, kotak_click, silang_click;
00202     bool L1_click, R1_click, L3_click, R3_click;
00203     bool START_click, SELECT_click, PS_click;
00204   
00205 protected:  
00206     virtual int _getc(){return _serial.getc();}
00207     Serial _serial;
00208 };
00209 
00210 };
00211 
00212 using namespace PS3USB;