Communicate with PS3 controller

Dependencies:   omni_wheel PID jy901 solenoid Master kohiMD lpf SerialArduino RCJESC

Committer:
piroro4560
Date:
Tue Jun 14 05:06:23 2022 +0000
Revision:
1:692623e55ff7
Parent:
0:00ce070b2f06
Child:
2:7da4a8e74955
Motor testing with buttons

Who changed what in which revision?

UserRevisionLine numberNew contents of line
piroro4560 0:00ce070b2f06 1 /** 300_PS3com
piroro4560 0:00ce070b2f06 2 * PS3と通信して表示、ボタンに応じてモーターを動かす
piroro4560 0:00ce070b2f06 3 * モーターのピン確認、通信の確認用
piroro4560 0:00ce070b2f06 4 * ButtonEnumを実装したい
piroro4560 0:00ce070b2f06 5 * ライブラリの実装したい
piroro4560 0:00ce070b2f06 6 */
piroro4560 0:00ce070b2f06 7
piroro4560 0:00ce070b2f06 8 //--------操作方法--------
piroro4560 0:00ce070b2f06 9 // ボタン1:モード変更
piroro4560 0:00ce070b2f06 10 // ボタン2:スタート、ストップ
piroro4560 0:00ce070b2f06 11 // ボタン3:動作1
piroro4560 0:00ce070b2f06 12 // ボタン4:動作2
piroro4560 0:00ce070b2f06 13
piroro4560 0:00ce070b2f06 14
piroro4560 0:00ce070b2f06 15 #include "main.h"
piroro4560 0:00ce070b2f06 16 #include "Master.h"
piroro4560 0:00ce070b2f06 17 #include "SerialArduino.h"
piroro4560 0:00ce070b2f06 18
piroro4560 1:692623e55ff7 19 #define PS3COM 1
piroro4560 0:00ce070b2f06 20 #define PS3UI 0
piroro4560 0:00ce070b2f06 21
piroro4560 0:00ce070b2f06 22 DigitalOut led(LED1);
piroro4560 0:00ce070b2f06 23 Master Master;// 出力等の基本クラス
piroro4560 0:00ce070b2f06 24
piroro4560 0:00ce070b2f06 25 #if PS3COM
piroro4560 0:00ce070b2f06 26 SerialArduino mini(A0, A1, 115200);// Arduinoを用いてPS3コントローラと通信するクラス
piroro4560 1:692623e55ff7 27 void PS3get(void);
piroro4560 0:00ce070b2f06 28 #endif
piroro4560 0:00ce070b2f06 29
piroro4560 0:00ce070b2f06 30 #if PS3UI
piroro4560 0:00ce070b2f06 31 DigitalIn uiToggle[3] = {};
piroro4560 0:00ce070b2f06 32 DigitalIn uiButton();
piroro4560 0:00ce070b2f06 33 #endif
piroro4560 0:00ce070b2f06 34
piroro4560 1:692623e55ff7 35 uint8_t h1,h2;
piroro4560 1:692623e55ff7 36 bool b[12]= {};
piroro4560 1:692623e55ff7 37 uint8_t st[4]= {};
piroro4560 1:692623e55ff7 38 uint8_t tr[2]= {};
piroro4560 1:692623e55ff7 39
piroro4560 0:00ce070b2f06 40 int main()
piroro4560 0:00ce070b2f06 41 {
piroro4560 0:00ce070b2f06 42 uint8_t mode=0;
piroro4560 0:00ce070b2f06 43 bool EdgeToggle[3]= {};
piroro4560 0:00ce070b2f06 44 bool pretoggle[3]= {};
piroro4560 0:00ce070b2f06 45
piroro4560 1:692623e55ff7 46 double pwm[4] = {};
piroro4560 0:00ce070b2f06 47
piroro4560 1:692623e55ff7 48 Master.SetPS3Address(b, tr, st);
piroro4560 1:692623e55ff7 49 // 以下ループ
piroro4560 0:00ce070b2f06 50 while (true) {
piroro4560 0:00ce070b2f06 51
piroro4560 0:00ce070b2f06 52 // モーター出力値の計算
piroro4560 0:00ce070b2f06 53 for(int i=0; i < 4; i++) {
piroro4560 1:692623e55ff7 54 if (b[i+4]) {
piroro4560 1:692623e55ff7 55 pwm[i] = 0.5;
piroro4560 1:692623e55ff7 56 } else if (b[i+4+4]) {
piroro4560 1:692623e55ff7 57 pwm[i] = -0.5;
piroro4560 0:00ce070b2f06 58 } else {
piroro4560 1:692623e55ff7 59 pwm[i] = 0;
piroro4560 0:00ce070b2f06 60 }
piroro4560 0:00ce070b2f06 61 }
piroro4560 0:00ce070b2f06 62
piroro4560 0:00ce070b2f06 63 #if PS3COM
piroro4560 1:692623e55ff7 64 PS3get();
piroro4560 0:00ce070b2f06 65 #endif
piroro4560 0:00ce070b2f06 66
piroro4560 0:00ce070b2f06 67 #if PS3UI
piroro4560 0:00ce070b2f06 68 for (int i=0; i<3; i++) {
piroro4560 0:00ce070b2f06 69 if (preToggle[i] && !((int)uiToggle[i])) EdgeToggle = 1;
piroro4560 0:00ce070b2f06 70 preToggle[i] = (int)uiToggle[i];
piroro4560 0:00ce070b2f06 71 }
piroro4560 0:00ce070b2f06 72 if (uiButton) {
piroro4560 0:00ce070b2f06 73 switch mode {
piroro4560 0:00ce070b2f06 74 case 0:
piroro4560 0:00ce070b2f06 75 Master.PS3Com();
piroro4560 0:00ce070b2f06 76 break;
piroro4560 0:00ce070b2f06 77 case 1:
piroro4560 0:00ce070b2f06 78 Master.Shot();
piroro4560 0:00ce070b2f06 79 break;
piroro4560 0:00ce070b2f06 80 case 2:
piroro4560 0:00ce070b2f06 81 Master.Dribble();
piroro4560 0:00ce070b2f06 82 break;
piroro4560 0:00ce070b2f06 83 }
piroro4560 0:00ce070b2f06 84 }
piroro4560 0:00ce070b2f06 85 #endif
piroro4560 1:692623e55ff7 86 for (int i=0; i<4; i++) {
piroro4560 1:692623e55ff7 87 Master.SetValueMotor(i, pwm[i]);
piroro4560 1:692623e55ff7 88 }
piroro4560 0:00ce070b2f06 89 }
piroro4560 1:692623e55ff7 90 }
piroro4560 1:692623e55ff7 91
piroro4560 1:692623e55ff7 92 #if PS3COM
piroro4560 1:692623e55ff7 93 void PS3get(void)
piroro4560 1:692623e55ff7 94 {
piroro4560 1:692623e55ff7 95 h1 = mini.getHedder1();
piroro4560 1:692623e55ff7 96 h2 = mini.getHedder2();
piroro4560 1:692623e55ff7 97 for(int i=0; i<12; i++) {
piroro4560 1:692623e55ff7 98 b[i] = mini.getButton(i);
piroro4560 1:692623e55ff7 99 }
piroro4560 1:692623e55ff7 100 for(int i=0; i<2; i++) {
piroro4560 1:692623e55ff7 101 tr[i] = mini.getTrigger(i);
piroro4560 1:692623e55ff7 102 }
piroro4560 1:692623e55ff7 103 for(int i=0; i<4; i++) {
piroro4560 1:692623e55ff7 104 st[i] = mini.getStick(i);
piroro4560 1:692623e55ff7 105 }
piroro4560 1:692623e55ff7 106 for(int i=0; i<12; i++) printf("%d ",b[i]);
piroro4560 1:692623e55ff7 107 printf("|");
piroro4560 1:692623e55ff7 108 for(int i=0; i<2; i++) printf("%3d ",tr[i]);
piroro4560 1:692623e55ff7 109 printf("|");
piroro4560 1:692623e55ff7 110 for(int i=0; i<4; i++) printf("%3d ",st[i]);
piroro4560 1:692623e55ff7 111 if(mini.getState()) printf("ok");
piroro4560 1:692623e55ff7 112 else printf("bad");
piroro4560 1:692623e55ff7 113 printf("\r\n");
piroro4560 1:692623e55ff7 114 }
piroro4560 1:692623e55ff7 115 #endif