Reloader Siap. Bulat = naik lifter. Kotak = turun Lifter. Slider otomatis. Silang = pneumatik.

Dependencies:   Motor mbed millis

Committer:
gustavaditya
Date:
Mon Jun 12 09:22:28 2017 +0000
Revision:
1:26fbc9316523
Parent:
0:e708f9673603
Reloader Siap

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gustavaditya 0:e708f9673603 1 /*********************************************************************************************/
gustavaditya 0:e708f9673603 2 /** **/
gustavaditya 0:e708f9673603 3 /** PROGRAM KOMUNIKASI DATA JOYSTIK PS3 **/
gustavaditya 0:e708f9673603 4 /** **/
gustavaditya 0:e708f9673603 5 /** Joystik PS3 -> Arduino -> STM32Nucleo **/
gustavaditya 0:e708f9673603 6 /** **/
gustavaditya 0:e708f9673603 7 /** Fanny Achmad Hindrarta **/
gustavaditya 0:e708f9673603 8 /** EL'12 - 13212076 **/
gustavaditya 0:e708f9673603 9 /** **/
gustavaditya 0:e708f9673603 10 /** Last Update : 01 Februar1 2015, 20.30 **/
gustavaditya 0:e708f9673603 11 /*********************************************************************************************/
gustavaditya 0:e708f9673603 12
gustavaditya 0:e708f9673603 13 #include <PS3BT.h>
gustavaditya 0:e708f9673603 14 #include <usbhub.h>
gustavaditya 0:e708f9673603 15 //#include <PS3USB.h>
gustavaditya 0:e708f9673603 16 #include "Arduino.h"
gustavaditya 0:e708f9673603 17 // Satisfy IDE, which only needs to see the include statment in the ino.
gustavaditya 0:e708f9673603 18 #ifdef dobogusinclude
gustavaditya 0:e708f9673603 19 #include <spi4teensy3.h>
gustavaditya 0:e708f9673603 20 #endif
gustavaditya 0:e708f9673603 21
gustavaditya 0:e708f9673603 22
gustavaditya 0:e708f9673603 23 USB Usb;
gustavaditya 0:e708f9673603 24
gustavaditya 0:e708f9673603 25 // Bluetooth
gustavaditya 0:e708f9673603 26 // You can create the instance of the class in two ways
gustavaditya 0:e708f9673603 27 BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
gustavaditya 0:e708f9673603 28 //You can create the instance of the class in two ways
gustavaditya 0:e708f9673603 29 PS3BT PS3(&Btd); // This will just create the instance
gustavaditya 0:e708f9673603 30 //PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
gustavaditya 0:e708f9673603 31 /*
gustavaditya 0:e708f9673603 32 // USB
gustavaditya 0:e708f9673603 33 // You can create the instance of the class in two ways
gustavaditya 0:e708f9673603 34 PS3USB PS3(&Usb); // This will just create the instance
gustavaditya 0:e708f9673603 35 //PS3USB PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
gustavaditya 0:e708f9673603 36 */
gustavaditya 0:e708f9673603 37
gustavaditya 0:e708f9673603 38 boolean printAngle;
gustavaditya 0:e708f9673603 39 uint8_t state = 0;
gustavaditya 0:e708f9673603 40
gustavaditya 0:e708f9673603 41 // Deklarasi tombol
gustavaditya 0:e708f9673603 42 boolean kiri_click=0, kanan_click=0, atas_click=0, bawah_click=0;
gustavaditya 0:e708f9673603 43 boolean segitiga_click=0, lingkaran_click=0, kotak_click=0, silang_click=0;
gustavaditya 0:e708f9673603 44 boolean L1_click=0, R1_click=0, L3_click=0, R3_click=0;
gustavaditya 0:e708f9673603 45 boolean START_click=0, SELECT_click=0, PS_click=0;
gustavaditya 0:e708f9673603 46
gustavaditya 0:e708f9673603 47 // Deklarasi variabel tombol analog
gustavaditya 0:e708f9673603 48 unsigned char LX, LY, RX, RY, aL2, aR2;
gustavaditya 0:e708f9673603 49
gustavaditya 0:e708f9673603 50 // Deklarasi varibel data yang dikirim
gustavaditya 0:e708f9673603 51 unsigned char button;
gustavaditya 0:e708f9673603 52 unsigned char RL;
gustavaditya 0:e708f9673603 53 unsigned int button_click;
gustavaditya 0:e708f9673603 54 unsigned int RL_click;
gustavaditya 0:e708f9673603 55
gustavaditya 0:e708f9673603 56 void setup_joystik()
gustavaditya 0:e708f9673603 57 {
gustavaditya 0:e708f9673603 58 while (!Serial) // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
gustavaditya 0:e708f9673603 59 {
gustavaditya 0:e708f9673603 60 Serial.write(0x88);
gustavaditya 0:e708f9673603 61 Serial.write(0x09);
gustavaditya 0:e708f9673603 62 }
gustavaditya 0:e708f9673603 63 if (Usb.Init() == -1) {
gustavaditya 0:e708f9673603 64 //Serial.print(F("\r\nOSC did not start"));
gustavaditya 0:e708f9673603 65 while (1) //halt
gustavaditya 0:e708f9673603 66 {
gustavaditya 0:e708f9673603 67 Serial.write(0x88);
gustavaditya 0:e708f9673603 68 Serial.write(0x09);
gustavaditya 0:e708f9673603 69 }
gustavaditya 0:e708f9673603 70 }
gustavaditya 0:e708f9673603 71 //Serial.print(F("\r\nPS3 USB Library Started"));
gustavaditya 0:e708f9673603 72 }
gustavaditya 0:e708f9673603 73
gustavaditya 0:e708f9673603 74 /*********************************************************************************************/
gustavaditya 0:e708f9673603 75 /** **/
gustavaditya 0:e708f9673603 76 /** FUNGSI PENGIRIMAN DATA **/
gustavaditya 0:e708f9673603 77 /** - Data yang akan dikirim adalah paket data 8-bit dengan urutan sebagai berikut **/
gustavaditya 0:e708f9673603 78 /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/
gustavaditya 0:e708f9673603 79 /** | 0x88 | 0x08 | button | RL | button_click | RL_click | R2 | L2 | RX | RY | LX | LY | **/
gustavaditya 0:e708f9673603 80 /** |------|------|--------|----|--------------|----------|----|----|----|----|----|----| **/
gustavaditya 0:e708f9673603 81 /** **/
gustavaditya 0:e708f9673603 82 /*********************************************************************************************/
gustavaditya 0:e708f9673603 83
gustavaditya 0:e708f9673603 84 void kirimdatajoystik()
gustavaditya 0:e708f9673603 85 {
gustavaditya 0:e708f9673603 86
gustavaditya 0:e708f9673603 87 Serial.write(0x88);
gustavaditya 0:e708f9673603 88 Serial.write(0x08);
gustavaditya 0:e708f9673603 89 Serial.write(button);
gustavaditya 0:e708f9673603 90 Serial.write(RL);
gustavaditya 0:e708f9673603 91 Serial.write(button_click);
gustavaditya 0:e708f9673603 92 Serial.write(RL_click);
gustavaditya 0:e708f9673603 93 Serial.write(aR2);
gustavaditya 0:e708f9673603 94 Serial.write(aL2);
gustavaditya 0:e708f9673603 95 Serial.write(RX);
gustavaditya 0:e708f9673603 96 Serial.write(RY);
gustavaditya 0:e708f9673603 97 Serial.write(LX);
gustavaditya 0:e708f9673603 98 Serial.write(LY);
gustavaditya 0:e708f9673603 99
gustavaditya 0:e708f9673603 100 // Debug
gustavaditya 0:e708f9673603 101
gustavaditya 0:e708f9673603 102 /*
gustavaditya 0:e708f9673603 103 Serial.print(millis());
gustavaditya 0:e708f9673603 104 Serial.print("\t");
gustavaditya 0:e708f9673603 105 Serial.print(button);
gustavaditya 0:e708f9673603 106 Serial.print("\t");
gustavaditya 0:e708f9673603 107 Serial.print(RL);
gustavaditya 0:e708f9673603 108 Serial.print("\t");
gustavaditya 0:e708f9673603 109 Serial.print(button_click);
gustavaditya 0:e708f9673603 110 Serial.print("\t");
gustavaditya 0:e708f9673603 111 Serial.print(RL_click);
gustavaditya 0:e708f9673603 112 Serial.print("\t");
gustavaditya 0:e708f9673603 113 Serial.print(aR2);
gustavaditya 0:e708f9673603 114 Serial.print("\t");
gustavaditya 0:e708f9673603 115 Serial.print(aL2);
gustavaditya 0:e708f9673603 116 Serial.print("\t");
gustavaditya 0:e708f9673603 117 Serial.print(RX);
gustavaditya 0:e708f9673603 118 Serial.print("\t");
gustavaditya 0:e708f9673603 119 Serial.print(RY);
gustavaditya 0:e708f9673603 120 Serial.print("\t");
gustavaditya 0:e708f9673603 121 Serial.print(LX);
gustavaditya 0:e708f9673603 122 Serial.print("\t");
gustavaditya 0:e708f9673603 123 Serial.println(LY);
gustavaditya 0:e708f9673603 124 */
gustavaditya 0:e708f9673603 125 }
gustavaditya 0:e708f9673603 126
gustavaditya 0:e708f9673603 127 /*****************************************************************************************/
gustavaditya 0:e708f9673603 128 /** SETUP REGISTER dan INISIALISASI **/
gustavaditya 0:e708f9673603 129 /** - Setup Joystik **/
gustavaditya 0:e708f9673603 130 /** - Baud Rate Serial 115200, 8-bit, 1 stop, 0 parity **/
gustavaditya 0:e708f9673603 131 /*****************************************************************************************/
gustavaditya 0:e708f9673603 132
gustavaditya 0:e708f9673603 133 void setup() {
gustavaditya 0:e708f9673603 134 Serial.begin(115200);
gustavaditya 0:e708f9673603 135
gustavaditya 0:e708f9673603 136 setup_joystik();
gustavaditya 0:e708f9673603 137 }
gustavaditya 0:e708f9673603 138
gustavaditya 0:e708f9673603 139
gustavaditya 0:e708f9673603 140 /*****************************************************************************************/
gustavaditya 0:e708f9673603 141 /** **/
gustavaditya 0:e708f9673603 142 /** FUNGSI PEMBACAAN DATA JOYSTIK **/
gustavaditya 0:e708f9673603 143 /** - Data dari Joystik dikirim melalui Bluetooth. **/
gustavaditya 0:e708f9673603 144 /** Lihat Library "PS3BT.h" **/
gustavaditya 0:e708f9673603 145 /** - Data tombol dari joystik adalah data 1-bit. Pengiriman data melalui USART **/
gustavaditya 0:e708f9673603 146 /** adalah 8-bit. Agar pengiriman data efisien, maka data 1-bit digabungkan **/
gustavaditya 0:e708f9673603 147 /** agar terbentuk data 8-bit **/
gustavaditya 0:e708f9673603 148 /** - Penggabungan data segitiga, longkaran, silang, kotak, arah atas, arah kanan, **/
gustavaditya 0:e708f9673603 149 /** arah bawah, arah kiri disimpan dalam variabel "button" **/
gustavaditya 0:e708f9673603 150 /** - Urutan data pada variabel "button" dan "button_click" **/
gustavaditya 0:e708f9673603 151 /** adalah sebagai berikut **/
gustavaditya 0:e708f9673603 152 /** **/
gustavaditya 0:e708f9673603 153 /** |------|-------|-------|------|-------|--------|-----------|----------| **/
gustavaditya 0:e708f9673603 154 /** Bit Ke | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/
gustavaditya 0:e708f9673603 155 /** |------|-------|-------|------|-------|--------|-----------|----------| **/
gustavaditya 0:e708f9673603 156 /** Data | kiri | bawah | kanan | atas | kotak | silang | lingkaran | segitiga | **/
gustavaditya 0:e708f9673603 157 /** |------|-------|-------|------|-------|--------|-----------|----------| **/
gustavaditya 0:e708f9673603 158 /** **/
gustavaditya 0:e708f9673603 159 /** - Penggabungan data R1, R2, L1, L2, R3, L3, START, dan SELECT disimpan dalam **/
gustavaditya 0:e708f9673603 160 /** variabel "RL" **/
gustavaditya 0:e708f9673603 161 /** - Urutan data pada variabel "RL" dan "RL_click" adalah **/
gustavaditya 0:e708f9673603 162 /** sebagai berikut **/
gustavaditya 0:e708f9673603 163 /** **/
gustavaditya 0:e708f9673603 164 /** |----|--------|-------|----|----|----|----| **/
gustavaditya 0:e708f9673603 165 /** Bit Ke | 6 | 5 | 4 | 3 | 2 | 1 | 0 | **/
gustavaditya 0:e708f9673603 166 /** |----|--------|-------|----|----|----|----| **/
gustavaditya 0:e708f9673603 167 /** Data | PS | SELECT | START | L3 | L1 | R3 | R1 | **/
gustavaditya 0:e708f9673603 168 /** |----|--------|-------|----|----|----|----| **/
gustavaditya 0:e708f9673603 169 /** **/
gustavaditya 0:e708f9673603 170 /*****************************************************************************************/
gustavaditya 0:e708f9673603 171
gustavaditya 0:e708f9673603 172 void loop() {
gustavaditya 0:e708f9673603 173 button = 0;
gustavaditya 0:e708f9673603 174 RL = 0;
gustavaditya 0:e708f9673603 175 button_click=0;
gustavaditya 0:e708f9673603 176 RL_click=0;
gustavaditya 0:e708f9673603 177 Usb.Task();
gustavaditya 0:e708f9673603 178
gustavaditya 0:e708f9673603 179 // Pembacaan data joystik dilakukan jika PS3 tersambung ke Arduino
gustavaditya 0:e708f9673603 180 if (PS3.PS3Connected || PS3.PS3NavigationConnected) {
gustavaditya 0:e708f9673603 181 // Pembacaan dan penggabungan data segitiga, lingkaran, silang, kotak, atas, kanan, bawah, kiri
gustavaditya 0:e708f9673603 182 // Data bernilai '1' jika tombol ditekan
gustavaditya 0:e708f9673603 183 if(PS3.getButtonPress(TRIANGLE)){
gustavaditya 0:e708f9673603 184 button = button + (0x1 << 0);
gustavaditya 0:e708f9673603 185 }
gustavaditya 0:e708f9673603 186 if(PS3.getButtonPress(CIRCLE)){
gustavaditya 0:e708f9673603 187 button = button + (0x1 << 1);
gustavaditya 0:e708f9673603 188 }
gustavaditya 0:e708f9673603 189 if(PS3.getButtonPress(CROSS)){
gustavaditya 0:e708f9673603 190 button = button + (0x1 << 2);
gustavaditya 0:e708f9673603 191 }
gustavaditya 0:e708f9673603 192 if(PS3.getButtonPress(SQUARE)){
gustavaditya 0:e708f9673603 193 button = button + (0x1 << 3);
gustavaditya 0:e708f9673603 194 }
gustavaditya 0:e708f9673603 195 if(PS3.getButtonPress(UP)){
gustavaditya 0:e708f9673603 196 button = button + (0x1 << 4);
gustavaditya 0:e708f9673603 197 }
gustavaditya 0:e708f9673603 198 if(PS3.getButtonPress(RIGHT)){
gustavaditya 0:e708f9673603 199 button = button + (0x1 << 5);
gustavaditya 0:e708f9673603 200 }
gustavaditya 0:e708f9673603 201 if(PS3.getButtonPress(DOWN)){
gustavaditya 0:e708f9673603 202 button = button + (0x1 << 6);
gustavaditya 0:e708f9673603 203 }
gustavaditya 0:e708f9673603 204 if(PS3.getButtonPress(LEFT)){
gustavaditya 0:e708f9673603 205 button = button + (0x1 << 7);
gustavaditya 0:e708f9673603 206 }
gustavaditya 0:e708f9673603 207
gustavaditya 0:e708f9673603 208 // Pembacaan dan penggabungan data R1, R3, L1, L3, START, SELECT, dan PS
gustavaditya 0:e708f9673603 209 // Data bernilai '1' jika tombol ditekan
gustavaditya 0:e708f9673603 210 if(PS3.getButtonPress(R1)){
gustavaditya 0:e708f9673603 211 RL = RL + (0x1 << 0);
gustavaditya 0:e708f9673603 212 }
gustavaditya 0:e708f9673603 213 if(PS3.getButtonPress(R3)){
gustavaditya 0:e708f9673603 214 RL = RL + (0x1 << 1);
gustavaditya 0:e708f9673603 215 }
gustavaditya 0:e708f9673603 216 if(PS3.getButtonPress(L1)){
gustavaditya 0:e708f9673603 217 RL = RL + (0x1 << 2);
gustavaditya 0:e708f9673603 218 }
gustavaditya 0:e708f9673603 219 if(PS3.getButtonPress(L3)){
gustavaditya 0:e708f9673603 220 RL = RL + (0x1 << 3);
gustavaditya 0:e708f9673603 221 }
gustavaditya 0:e708f9673603 222 if(PS3.getButtonPress(START)){
gustavaditya 0:e708f9673603 223 RL = RL + (0x1 << 4);
gustavaditya 0:e708f9673603 224 }
gustavaditya 0:e708f9673603 225 if(PS3.getButtonPress(SELECT)){
gustavaditya 0:e708f9673603 226 RL = RL + (0x1 << 5);
gustavaditya 0:e708f9673603 227 }
gustavaditya 0:e708f9673603 228 if(PS3.getButtonPress(PS)){
gustavaditya 0:e708f9673603 229 RL = RL + (0x1 << 6);
gustavaditya 0:e708f9673603 230 }
gustavaditya 0:e708f9673603 231
gustavaditya 0:e708f9673603 232 // Pembacaan dan penggabungan data segitiga, lingkaran, silang, kotak, atas, kanan, bawah, kiri
gustavaditya 0:e708f9673603 233 // Data bernilai '1' hanya saat tombol pertama kali ditekan
gustavaditya 0:e708f9673603 234 if(PS3.getButtonClick(TRIANGLE)){
gustavaditya 0:e708f9673603 235 button_click = button_click + (0x1 << 0);
gustavaditya 0:e708f9673603 236 }
gustavaditya 0:e708f9673603 237 if(PS3.getButtonClick(CIRCLE)){
gustavaditya 0:e708f9673603 238 button_click = button_click + (0x1 << 1);
gustavaditya 0:e708f9673603 239 }
gustavaditya 0:e708f9673603 240 if(PS3.getButtonClick(CROSS)){
gustavaditya 0:e708f9673603 241 button_click = button_click + (0x1 << 2);
gustavaditya 0:e708f9673603 242 }
gustavaditya 0:e708f9673603 243 if(PS3.getButtonClick(SQUARE)){
gustavaditya 0:e708f9673603 244 button_click = button_click + (0x1 << 3);
gustavaditya 0:e708f9673603 245 }
gustavaditya 0:e708f9673603 246 if(PS3.getButtonClick(UP)){
gustavaditya 0:e708f9673603 247 button_click = button_click + (0x1 << 4);
gustavaditya 0:e708f9673603 248 }
gustavaditya 0:e708f9673603 249 if(PS3.getButtonClick(RIGHT)){
gustavaditya 0:e708f9673603 250 button_click = button_click + (0x1 << 5);
gustavaditya 0:e708f9673603 251 }
gustavaditya 0:e708f9673603 252 if(PS3.getButtonClick(DOWN)){
gustavaditya 0:e708f9673603 253 button_click = button_click + (0x1 << 6);
gustavaditya 0:e708f9673603 254 }
gustavaditya 0:e708f9673603 255 if(PS3.getButtonClick(LEFT)){
gustavaditya 0:e708f9673603 256 button_click = button_click + (0x1 << 7);
gustavaditya 0:e708f9673603 257 }
gustavaditya 0:e708f9673603 258
gustavaditya 0:e708f9673603 259 if(PS3.getButtonClick(R1)){
gustavaditya 0:e708f9673603 260 RL_click = RL_click + (0x1 << 0);
gustavaditya 0:e708f9673603 261 }
gustavaditya 0:e708f9673603 262 if(PS3.getButtonClick(R3)){
gustavaditya 0:e708f9673603 263 RL_click = RL_click + (0x1 << 1);
gustavaditya 0:e708f9673603 264 }
gustavaditya 0:e708f9673603 265 if(PS3.getButtonClick(L1)){
gustavaditya 0:e708f9673603 266 RL_click = RL_click + (0x1 << 2);
gustavaditya 0:e708f9673603 267 }
gustavaditya 0:e708f9673603 268 if(PS3.getButtonClick(L3)){
gustavaditya 0:e708f9673603 269 RL_click = RL_click + (0x1 << 3);
gustavaditya 0:e708f9673603 270 }
gustavaditya 0:e708f9673603 271 if(PS3.getButtonClick(START)){
gustavaditya 0:e708f9673603 272 RL_click = RL_click + (0x1 << 4);
gustavaditya 0:e708f9673603 273 }
gustavaditya 0:e708f9673603 274 if(PS3.getButtonClick(SELECT)){
gustavaditya 0:e708f9673603 275 RL_click = RL_click + (0x1 << 5);
gustavaditya 0:e708f9673603 276 }
gustavaditya 0:e708f9673603 277 if(PS3.getButtonClick(PS)){
gustavaditya 0:e708f9673603 278 RL_click = RL_click + (0x1 << 6);
gustavaditya 0:e708f9673603 279 }
gustavaditya 0:e708f9673603 280
gustavaditya 0:e708f9673603 281 // Tombol Analog
gustavaditya 0:e708f9673603 282 LX = PS3.getAnalogHat(LeftHatX);
gustavaditya 0:e708f9673603 283 LY = PS3.getAnalogHat(LeftHatY);
gustavaditya 0:e708f9673603 284 RX = PS3.getAnalogHat(RightHatX);
gustavaditya 0:e708f9673603 285 RY = PS3.getAnalogHat(RightHatY);
gustavaditya 0:e708f9673603 286
gustavaditya 0:e708f9673603 287 aL2 = PS3.getAnalogButton(L2);
gustavaditya 0:e708f9673603 288 aR2 = PS3.getAnalogButton(R2);
gustavaditya 0:e708f9673603 289
gustavaditya 0:e708f9673603 290 kirimdatajoystik();
gustavaditya 0:e708f9673603 291 } else {
gustavaditya 0:e708f9673603 292 // PS3 Disconnected
gustavaditya 0:e708f9673603 293 Serial.write(0x88);
gustavaditya 0:e708f9673603 294 Serial.write(0x09);
gustavaditya 0:e708f9673603 295 }
gustavaditya 0:e708f9673603 296 delay(3);
gustavaditya 0:e708f9673603 297 }
gustavaditya 0:e708f9673603 298
gustavaditya 0:e708f9673603 299