BASE ROTASI OTOMATIS SEKUENSIAL

Dependencies:   Motor PID mbed millis

Committer:
gustavaditya
Date:
Sun Jun 11 19:22:01 2017 +0000
Revision:
0:312d1d0781ac
BASE ROTASI OTOMATIS SEKUENSIAL

Who changed what in which revision?

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