If you wont to knock me down, look this file...
Revision 0:4df75b08b14a, committed 2019-05-03
- Comitter:
- Ryosei
- Date:
- Fri May 03 11:47:27 2019 +0000
- Commit message:
- a
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/XBee/XBee.cpp Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,112 @@
+#include "XBee.h"
+
+#include <stdint.h>
+#include "mbed.h"
+
+namespace XBEE
+{
+ Ticker xbee_timer;
+ Serial xbee_uart(XBEE_TX, XBEE_RX);
+ DigitalOut XBee_LED(LED1);
+
+ void uartUpdate(void);
+ void lostCheck(void);
+
+ namespace
+ {
+ ControllerData ctrData;
+ ControllerData keepCtrData;
+ const uint8_t defaultData[4] = CTR_DEFAULT_DATA;
+ const char check[] = "DT=";
+ volatile char packet[24];
+
+ bool controllerLost = false;
+ uint8_t timerCount = 0;
+ }
+
+ void Controller::Initialize(void) {
+ xbee_timer.attach(lostCheck, 0.025);
+ xbee_uart.baud(4800);
+ xbee_uart.attach(uartUpdate, Serial::RxIrq);
+ DataReset();
+ }
+
+ ControllerData* Controller::GetData(void) {
+ __disable_irq();
+ for(uint8_t i = 0; i < CTR_DATA_LENGTH; i++) keepCtrData.buf[i] = ctrData.buf[i];
+ __enable_irq();
+ return &keepCtrData;
+ }
+
+ void Controller::DataReset(void) {
+ __disable_irq();
+ for(uint8_t i = 0; i < CTR_DATA_LENGTH; i++) ctrData.buf[i] = defaultData[i];
+ __enable_irq();
+ }
+
+ bool Controller::CheckControllerLost(void) {
+ return controllerLost;
+ }
+
+ void uartUpdate(void) {
+ static bool phase = false;
+ static uint8_t count = 0;
+
+ char data = xbee_uart.getc();
+
+ if(phase)
+ {
+ packet[count] = data;
+ if(count < 2)
+ {
+ if(data != check[count])
+ {
+ phase = false;
+ controllerLost = true;
+ XBee_LED = LED_OFF;
+ }
+ }
+ else if(count == 8)
+ {
+ if(data != '\r')
+ {
+ phase = false;
+ controllerLost = true;
+ XBee_LED = LED_OFF;
+ }
+ else
+ {
+ ctrData.buf[0] = packet[4];
+ ctrData.buf[1] = packet[5];
+ ctrData.buf[2] = packet[6];
+ ctrData.buf[3] = packet[7];
+ phase = false;
+ timerCount = 0;
+ controllerLost = false;
+ XBee_LED = LED_ON;
+ }
+ }
+ count++;
+ }
+ else
+ {
+ if(data == '@')
+ {
+ count = 0;
+ phase = true;
+ }
+ }
+ }
+
+ void lostCheck(void) {
+ timerCount++;
+ if(timerCount == 2) XBee_LED = LED_OFF;
+ if(timerCount >= 20) {
+ controllerLost = true;
+ Controller::DataReset();
+ timerCount = 0;
+ XBee_LED = LED_OFF;
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/XBee/XBee.h Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,61 @@
+#ifndef XBEE_H_
+#define XBEE_H_
+
+#include <stdint.h>
+
+namespace XBEE
+{
+ #define CTR_DATA_LENGTH 4
+ #define CTR_DEFAULT_DATA {0x00, 0x00, 0x77, 0x77}
+
+ #define XBEE_TX D1
+ #define XBEE_RX D0
+
+ #define LED_OFF 0
+ #define LED_ON 1
+
+ typedef union
+ {
+ struct {
+ struct {
+ unsigned int X:1;
+ unsigned int A:1;
+ unsigned int B:1;
+ unsigned int Y:1;
+ unsigned int UP:1;
+ unsigned int RIGHT:1;
+ unsigned int DOWN:1;
+ unsigned int LEFT:1;
+ unsigned int SELECT:1;
+ unsigned int HOME:1;
+ unsigned int START:1;
+ unsigned int ZL:1;
+ unsigned int ZR:1;
+ unsigned int L:1;
+ unsigned int R:1;
+ unsigned int :1;
+ } __attribute__ ((packed)) Button;
+ struct {
+ unsigned int Y:4;
+ unsigned int X:4;
+ } __attribute__ ((packed)) AnalogL;
+ struct {
+ unsigned int Y:4;
+ unsigned int X:4;
+ } __attribute__ ((packed)) AnalogR;
+ } __attribute__ ((packed)) ;
+ uint8_t buf[CTR_DATA_LENGTH];
+ }ControllerData;
+
+ class Controller
+ {
+ public:
+ static void Initialize(void);
+ static ControllerData* GetData(void);
+ static void DataReset(void);
+ static bool CheckControllerLost(void);
+ };
+}
+
+#endif
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/Switch/Switch.cpp Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,20 @@
+#include "Switch.h"
+#include <stdint.h>
+
+DigitalIn limitSw[] = {
+ DigitalIn(LIMITSW0_PIN),
+ DigitalIn(LIMITSW1_PIN),
+ DigitalIn(LIMITSW2_PIN),
+ DigitalIn(LIMITSW3_PIN),
+};
+
+namespace SWITCH
+{
+ void Switch::Initialize(void) {
+ for(uint8_t i = 0; i < MOUNTING_LIMITSW_NUM; i++) limitSw[i].mode(PullUp);
+ }
+
+ bool Switch::checkPushed(int mySwitch) {
+ return mySwitch ? false : true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/Switch/Switch.h Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,25 @@
+#ifndef SWITCH_H_
+#define SWITCH_H_
+
+#include "mbed.h"
+
+extern DigitalIn limitSw[];
+
+namespace SWITCH
+{
+ #define LIMITSW0_PIN A7
+ #define LIMITSW1_PIN A6
+ #define LIMITSW2_PIN A5
+ #define LIMITSW3_PIN A4
+
+ #define MOUNTING_LIMITSW_NUM 4
+
+ class Switch
+ {
+ public:
+ static void Initialize(void);
+ static bool checkPushed(int mySwitch);
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Output/Motor/Motor.cpp Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,78 @@
+#include "Motor.h"
+
+#include <stdint.h>
+#include "mbed.h"
+
+namespace MOTOR
+{
+ namespace
+ {
+ MotorStatus motor[MOUNTING_MOTOR_NUM];
+ DigitalOut directions[] = {
+ DigitalOut(MOTOR0_D1_PIN),
+ DigitalOut(MOTOR0_D2_PIN),
+ DigitalOut(MOTOR1_D1_PIN),
+ DigitalOut(MOTOR1_D2_PIN),
+ DigitalOut(MOTOR2_D1_PIN),
+ DigitalOut(MOTOR2_D2_PIN),
+ DigitalOut(MOTOR3_D1_PIN),
+ DigitalOut(MOTOR3_D2_PIN),
+ DigitalOut(MOTOR4_D1_PIN),
+ DigitalOut(MOTOR4_D2_PIN),
+ };
+ PwmOut pwms[] = {
+ PwmOut(MOTOR0_PWM_PIN),
+ PwmOut(MOTOR1_PWM_PIN),
+ PwmOut(MOTOR2_PWM_PIN),
+ PwmOut(MOTOR3_PWM_PIN),
+ PwmOut(MOTOR4_PWM_PIN),
+ };
+ }
+
+ float percentage_to_ratio(float percentage);
+
+ void Motor::Initialize(void) {
+ //Port Initialize
+ for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM * 2; i++) {
+ directions[i] = 0;
+ }
+
+ //Pwm Initialize
+ for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) {
+ pwms[i].period_us(50); //20kHz
+ pwms[i] = 0.0;
+ }
+
+ SetDefault();
+ }
+
+ void Motor::SetDefault(void) {
+ for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) {
+ motor[i].dir = FREE;
+ motor[i].pwm = 0;
+ }
+ }
+
+ void Motor::Update(MotorStatus *status) {
+ for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) motor[i] = status[i];
+
+ //PWM Update
+ for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) pwms[i] = percentage_to_ratio(motor[i].pwm);
+
+ //Port Update
+ for(uint8_t i = MOTOR_START_NUM; i < MOUNTING_MOTOR_NUM; i++) {
+ directions[i * 2] = motor[i].d1;
+ directions[i * 2 + 1] = motor[i].d2;
+ }
+ }
+
+ float percentage_to_ratio(float percentage) {
+ return percentage / 100.0;
+ }
+
+ int Motor::SetStatus(float pwm) {
+ if(pwm > 0.0) return FOR;
+ else if(pwm < 0.0) return BACK;
+ else return BRAKE;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Output/Motor/Motor.h Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,75 @@
+#ifndef MOTOR_H_
+#define MOTOR_H_
+
+#include <stdint.h>
+
+//#define USE_MOTOR0_SENSOR
+namespace MOTOR
+{
+ #define FREE 0
+ #define BACK 1
+ #define FOR 2
+ #define BRAKE 3
+
+ #define MOUNTING_MOTOR_NUM 5
+
+ #define MOTOR0_D1 directions[0]
+ #define MOTOR0_D2 directions[1]
+ #define MOTOR1_D1 directions[2]
+ #define MOTOR1_D2 directions[3]
+ #define MOTOR2_D1 directions[4]
+ #define MOTOR2_D2 directions[5]
+ #define MOTOR3_D1 directions[6]
+ #define MOTOR3_D2 directions[7]
+ #define MOTOR4_D1 directions[8]
+ #define MOTOR4_D2 directions[9]
+
+ #define MOTOR0_D1_PIN D3
+ #define MOTOR0_D2_PIN D4
+ #define MOTOR1_D1_PIN D5
+ #define MOTOR1_D2_PIN D6
+ #define MOTOR2_D1_PIN D8
+ #define MOTOR2_D2_PIN D9
+ #define MOTOR3_D1_PIN D12
+ #define MOTOR3_D2_PIN A3
+ #define MOTOR4_D1_PIN A1
+ #define MOTOR4_D2_PIN A0
+
+ #define MOTOR0_PWM_PIN D2
+ #define MOTOR1_PWM_PIN D7
+ #define MOTOR2_PWM_PIN D10
+ #define MOTOR3_PWM_PIN D11
+ #define MOTOR4_PWM_PIN A2
+
+ #ifdef USE_MOTOR0_SENSOR
+ #define MOTOR_START_NUM 1
+ #else
+ #define MOTOR_START_NUM 0
+ #endif
+
+ typedef struct
+ {
+ union
+ {
+ struct
+ {
+ unsigned int d2 : 1;
+ unsigned int d1 : 1;
+ unsigned int : 6;
+ };
+ uint8_t dir;
+ };
+ float pwm;
+ }MotorStatus;
+
+ class Motor
+ {
+ public:
+ static void Initialize(void);
+ static void Update(MotorStatus *status);
+ static void SetDefault(void);
+ static int SetStatus(float pwm);
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Output/Servo.lib Fri May 03 11:47:27 2019 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/Servo/#36b69a7ced07
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/System/Initialize/Initialize.cpp Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,16 @@
+#include "Initialize.h"
+
+#include "mbed.h"
+#include "../../Communication/XBee/XBee.h"
+#include "../../Input/Switch/Switch.h"
+#include ".././Output/Motor/Motor.h"
+
+void SystemInitialize(void) {
+ XBEE::Controller::Initialize();
+// SWITCH::Switch::Initialize();
+ MOTOR::Motor::Initialize();
+
+ //割り込み許可
+ __enable_irq();
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/Initialize/Initialize.h Fri May 03 11:47:27 2019 +0000 @@ -0,0 +1,7 @@ +#ifndef INITIALIZE_H_ +#define INITIALIZE_H_ + +void SystemInitialize(void); + +#endif +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/System/Process/Process.cpp Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,538 @@
+
+
+
+/*
+このプログラムを見る人へ
+
+用語解説
+
+ご挨拶モード:足回りでロボットを左右に振りご挨拶しつつ、回路リセットを行うおれたおになくてはならないモード
+足回り:宮川は十字キー足回りを、新村はアナログスティック足回りを担当しました。宮川のプログラムは猫でも書けますが、新村のは難易度S+です。わからないことがあれば新村へ
+
+わからないことがあればアナログスティック以外、なんでも宮川に聞いてください
+*/
+
+
+
+
+//------------------------------------------------------------------------------------------------------------------------------------------
+#include "Process.h"
+
+#include "mbed.h"
+#include "../../Communication/XBee/XBee.h"
+//#include "../../Input/Switch/Switch.h"
+#include "../../Output/Motor/Motor.h"
+#include "../../Output/Servo/Servo.h"
+
+//_____________________
+/*---------------- HOW TO WRITE ----------------/
+
+ ・motor の割り当てを決める
+ #define TIRE_L 1
+
+ ・リミットスイッチの割り当てを決める
+ #define ARM_L 1
+
+ ・他にも自由に定義してもいいです (pwmとか)
+
+/---------------- HOW TO WRITE ----------------*/
+//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
+
+
+#define TIRE_1 0
+#define TIRE_2 1
+#define TIRE_3 2
+#define ARM 3
+
+#define ARMlim 0
+
+int Air0=0;
+int Air1=1;
+
+#define a 0
+#define b 1
+#define c 2
+
+int a_array[15][15] = {
+ { -30, -20, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30 },
+ { -40, -30, -20, -10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 40 },
+ { -50, -40, -30, -20, -10, 0, 0, 0, 0, 0, 10, 20, 30, 40, 50 },
+ { -60, -50, -40, -30, -20, -10, 0, 0, 0, 10, 20, 30, 40, 50, 60 },
+ { -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70 },
+ { -80, -70, -60, -50, -40, -30, -20, 0, 20, 30, 40, 50, 60, 70, 80 },
+ { -90, -80, -70, -60, -50, -40, -30, 0, 30, 40, 50, 60, 70, 80, 90 },
+ { -100, -90, -80, -70, -60, -50, -40, 0, 40, 50, 60, 70, 80, 90, 100 },
+ { -90, -80, -70, -60, -50, -40, -30, 0, 30, 40, 50, 60, 70, 80, 90 },
+ { -80, -70, -60, -50, -40, -30, -20, 0, 20, 30, 40, 50, 60, 70, 80 },
+ { -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70 },
+ { -60, -50, -40, -30, -20, -10, 0, 0, 0, 10, 20, 30, 40, 50, 60 },
+ { -50, -40, -30, -20, -10, 0, 0, 0, 0, 0, 10, 20, 30, 40, 50 },
+ { -40, -30, -20, -10, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30, 40 },
+ { -30, -20, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 30 }
+};
+
+int b_array[15][15] = {
+ { 100, 92, 84, 76, 68, 60, 52, 100, 36, 28, 20, 12, 4, 0, 0 },
+ { 92, 84, 76, 68, 60, 52, 44, 36, 28, 20, 12, 4, 0, 0, 0 },
+ { 84, 76, 68, 60, 52, 44, 36, 28, 20, 12, 4, 0, 0, 0, -4 },
+ { 76, 68, 60, 52, 44, 36, 28, 20, 12, 4, 0, 0, 0, -4, -12 },
+ { 68, 60, 52, 44, 36, 28, 20, 12, 4, 0, 0, 0, -4, -12, -20 },
+ { 60, 52, 44, 36, 28, 20, 12, 4, 0, 0, 0, -4, -12, -20, -28 },
+ { 52, 44, 36, 28, 20, 12, 4, 0, 0, 0, -4, -12, -20, -28, -36 },
+ { 100, 36, 28, 20, 12, 4, 0, 0, 0, -4, -12, -20, -28, -36, -44 },
+ { 85, 28, 20, 12, 4, 0, 0, 0, -4, -12, -20, -28, -36, -44, -52 },
+ { 70, 20, 12, 4, 0, 0, 0, -4, -12, -20, -28, -36, -44, -52, -60 },
+ { 55, 12, 4, 0, 0, 0, -4, -12, -20, -28, -36, -44, -52, -60, -68 },
+ { 40, 4, 0, 0, 0, -4, -12, -20, -28, -36, -44, -52, -60, -68, -76 },
+ { 25, 0, 0, 0, -4, -12, -20, -28, -36, -44, -52, -60, -68, -76, -84 },
+ { 10, 0, 0, -4, -12, -20, -28, -36, -44, -52, -60, -68, -76, -84, -92 },
+ { 0, 0, -4, -12, -20, -28, -36, -100, -52, -60, -68, -76, -84, -92, -100 }
+};
+
+
+int c_array[15][15] = {
+ { 0, 0, 4, 12, 20, 28, 36, 100, 52, 60, 68, 76, 84, 92, 100 },
+ { 0, 0, 0, 4, 12, 20, 28, 36, 44, 52, 60, 68, 76, 84, 92 },
+ { -4, 0, 0, 0, 4, 12, 20, 28, 36, 44, 52, 60, 68, 76, 84 },
+ { -12, -4, 0, 0, 0, 4, 12, 20, 28, 36, 44, 52, 60, 68, 76 },
+ { -20, -12, -4, 0, 0, 0, 4, 12, 20, 28, 36, 44, 52, 60, 68 },
+ { -28, -20, -12, -4, 0, 0, 0, 4, 12, 20, 28, 36, 44, 52, 60 },
+ { -36, -28, -20, -12, -4, 0, 0, 0, 4, 12, 20, 28, 36, 44, 52 },
+ { -44, -36, -28, -20, -12, -4, 0, 0, 0, 4, 12, 20, 28, 36, 44 },
+ { -52, -44, -36, -28, -20, -12, 4, 0, 0, 0, 4, 12, 20, 28, 36 },
+ { -60, -52, -44, -36, -28, -20, -12, -4, 0, 0, 0, 4, 12, 20, 28 },
+ { -68, -60, -52, -44, -36, -28, -20, -12, -4, 0, 0, 0, 4, 12, 20 },
+ { -76, -68, -60, -52, -44, -36, -28, -20, -12, -4, 0, 0, 0, 4, 12 },
+ { -84, -76, -68, -60, -52, -44, -36, -28, -20, -12, -4, 0, 0, 0, 4 },
+ { -92, -84, -76, -68, -60, -52, -44, -36, -28, -20, -12, -4, 0, 0, 0 },
+ { -100, -92, -84, -76, -76, -60, -100, -100, -36, -28, -20, -12, -4, 0, 0 }
+};
+
+int pwm_array[15] = { 30, 25, 20, 15, 10, 5, 0, 0, 0, -5, -10, -15, -20, -25, -30 };
+
+#define usiro 0
+#define mae 0
+uint8_t motorData[5];
+uint8_t pwmData[5];
+
+int conlx;
+int conly;
+int conrx;
+int conry;
+int conba;
+int conbb;
+int conbx;
+int conby;
+int homes=0;
+//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
+//_____________________
+
+//#define USE_USB_SERIAL
+#ifdef USE_USB_SERIAL
+Serial pc(SERIAL_TX, SERIAL_RX);
+#endif
+Serial pc(SERIAL_TX,SERIAL_RX);
+XBEE::ControllerData *controller;
+MOTOR::MotorStatus motor[MOUNTING_MOTOR_NUM];
+//////////////////////////////////
+//関数、タイマーの宣言
+DigitalOut Air[]= {
+ DigitalOut(A5),
+ DigitalOut(A4),
+};
+DigitalIn limit[]= {
+ DigitalIn(A7),
+ DigitalIn(A6),
+};
+Timer Airtime;
+Timer home;
+void AirOut(int pin,int mode)
+{
+ Air[pin]=mode;
+}
+bool LimitRead(int pin)
+{
+ int x;
+ x=limit[pin];
+ if(x==0) {
+ return false;
+ } else if(x==1) {
+ return true;
+ } else {
+ return false;
+ }
+}
+//関数、タイマーの宣言
+//////////////////////////////////
+//using namespace SWITCH;
+
+void SystemProcess(void)
+{
+ while(true) {
+ controller = XBEE::Controller::GetData();
+//____________________________
+ /*------------------------ HOW TO WRITE ------------------------/
+
+ ここにメインのプログラムを書く
+
+ ・コントローラから受け取ったデータをもとに動作のプログラムを書く
+ (コントローラのデータは controller-> で取る)
+
+ if(controller->Button.RIGHT) {
+ motor[TIRE_L].dir = FOR;
+ motor[TIRE_R].dir = BACK;
+ motor[TIRE_L].pwm = 12.3;
+ motor[TIRE_R].pwm = 12.3;
+ }
+
+ motor[0].dirは FOR (正転)
+ BACK (逆転)
+ BRAKE (ブレーキ)
+ FREE (フリー)
+
+ motor[0].pwmは 0.0(%) ~ 100.0(%)
+
+ controllerは XBee.hの構造体の中身
+
+ (AnalogL・Rを使いたかったら、頑張って考える or 聞いてください)
+
+ ・リミットスイッチの値をもとに動作のプログラムを書く
+
+ if(Switch::CheckPushed(ARM_L))
+ {
+ if(controller->Button.L)
+ {
+ motor[ARM].dir = FOR;
+ motor[ARM].pwm = 80.0;
+ }
+ if(motor[ARM].dir == BACK)
+ {
+ motor[ARM].dir = BRAKE;
+ }
+ }
+
+ →関数 Switch::CheckPushed の引数はリミットスイッチの名前 (limitSw[0]みたいな), 返り値はbool型 (true or false)
+
+ ・他にもやりたいことがあったら自由にどうぞ
+
+ ps.わからないことがあったら聞いてください
+
+ /------------------------ HOW TO WRITE ------------------------*/
+//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
+
+ float precision; //精密モード変数
+ float s=Airtime.read();//エアータイム
+ float hometime=home.read();//ホームタイム(ご挨拶モード兼回路リセット)
+ float goaisatsu_time=0.2;//ご挨拶タイム
+ //////////////////////////////////////////////////////////////////////////////////
+ //ご挨拶モード
+
+ if(controller->Button.HOME) {
+ home.start();
+ homes=1;
+ }
+
+ if((hometime<=goaisatsu_time)&&(!(homes==0))) {
+ homes=2;
+ } else if(hometime<=2*goaisatsu_time) {
+ homes=1;
+ } else if(hometime<=3*goaisatsu_time) {
+ homes=2;
+ } else if(hometime<4*goaisatsu_time) {
+ homes=1;
+ } else if(hometime<5*goaisatsu_time) {
+ homes=0;
+ home.stop();
+ home.reset();
+ } else {
+ homes=0;
+ home.stop();
+ home.reset();
+ }
+
+ //ご挨拶モード
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ //精密モード
+ if(controller->Button.ZR) {
+ precision=0.5;
+ } else {
+ precision=1.0;
+ }
+ //精密モード
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ //アーム機構
+ //motor[ARM].pwm=100;
+
+ if(controller->Button.X) {
+ if(LimitRead(0)){
+ motor[ARM].dir = BACK;
+ motor[ARM].pwm = 100;
+ }else{
+ motor[ARM].dir = FREE;
+ motor[ARM].pwm = 100;
+ }
+ }else if(controller->Button.Y) {
+ motor[ARM].dir = FOR;
+ motor[ARM].pwm = 100;
+ }else{
+ motor[ARM].dir = FREE;
+ motor[ARM].pwm = 100;
+ }
+
+ //アーム機構
+ ////////////////////////////////////////////////////////////////////////////////////
+
+ ////////////////////////////////////////////////////////////////////////////////////
+ //十字キー足回り(宮川ver)
+
+ if(controller->Button.L) {
+ motor[TIRE_1].dir = FOR;
+ motor[TIRE_2].dir = FOR;
+ motor[TIRE_3].dir = FOR;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 100*precision;
+ motor[TIRE_3].pwm = 100*precision;
+ } else if(controller->Button.R) {
+ motor[TIRE_1].dir = BACK;
+ motor[TIRE_2].dir = BACK;
+ motor[TIRE_3].dir = BACK;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 100*precision;
+ motor[TIRE_3].pwm = 100*precision;
+ } else if(controller->Button.RIGHT) {
+ motor[TIRE_1].dir = BACK;
+ motor[TIRE_2].dir = FOR;
+ motor[TIRE_3].dir = FOR;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 60*precision;
+ motor[TIRE_3].pwm = 60*precision;
+ } else if(controller->Button.LEFT) {
+ motor[TIRE_1].dir = FOR;
+ motor[TIRE_2].dir = BACK;
+ motor[TIRE_3].dir = BACK;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 60*precision;
+ motor[TIRE_3].pwm = 60*precision;
+ } else if(controller->Button.DOWN) {
+ motor[TIRE_1].dir = BRAKE;
+ motor[TIRE_2].dir = FOR;
+ motor[TIRE_3].dir = BACK;
+ motor[TIRE_1].pwm = 100;
+ motor[TIRE_2].pwm = 100*precision;
+ motor[TIRE_3].pwm = 100*precision;
+ } else if(controller->Button.UP) {
+ motor[TIRE_1].dir = BRAKE;
+ motor[TIRE_2].dir = BACK;
+ motor[TIRE_3].dir = FOR;
+ motor[TIRE_1].pwm = 100;
+ motor[TIRE_2].pwm = 100*precision;
+ motor[TIRE_3].pwm = 100*precision;
+ } else if((controller->Button.UP) && (controller->Button.RIGHT)) {
+ motor[TIRE_1].dir = BACK;
+ motor[TIRE_2].dir = BRAKE;
+ motor[TIRE_3].dir = FOR;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 100;
+ motor[TIRE_3].pwm = 100*precision;
+ } else if((controller->Button.UP) && (controller->Button.LEFT)) {
+ motor[TIRE_1].dir = FOR;
+ motor[TIRE_2].dir = BACK;
+ motor[TIRE_3].dir = BRAKE;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 100*precision;
+ motor[TIRE_3].pwm = 100;
+ } else if((controller->Button.DOWN) && (controller->Button.RIGHT)) {
+ motor[TIRE_1].dir = BACK;
+ motor[TIRE_2].dir = FOR;
+ motor[TIRE_3].dir = BRAKE;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 100*precision;
+ motor[TIRE_3].pwm = 100;
+ } else if((controller->Button.DOWN) && (controller->Button.LEFT)) {
+ motor[TIRE_1].dir = FOR;
+ motor[TIRE_2].dir = BRAKE;
+ motor[TIRE_3].dir = BACK;
+ motor[TIRE_1].pwm = 100*precision;
+ motor[TIRE_2].pwm = 100;
+ motor[TIRE_3].pwm = 100*precision;
+ } else if(homes==1) {
+ motor[TIRE_1].dir = FOR;
+ motor[TIRE_2].dir = FOR;
+ motor[TIRE_3].dir = FOR;
+ motor[TIRE_1].pwm = 70*precision;
+ motor[TIRE_2].pwm = 70*precision;
+ motor[TIRE_3].pwm = 70*precision;
+ } else if(homes==2) {
+ motor[TIRE_1].dir = BACK;
+ motor[TIRE_2].dir = BACK;
+ motor[TIRE_3].dir = BACK;
+ motor[TIRE_1].pwm = 70*precision;
+ motor[TIRE_2].pwm = 70*precision;
+ motor[TIRE_3].pwm = 70*precision;
+ } else {
+ motor[TIRE_1].dir=BRAKE;
+ motor[TIRE_2].dir=BRAKE;
+ motor[TIRE_3].dir=BRAKE;
+ motor[TIRE_1].pwm=100;
+ motor[TIRE_2].pwm=100;
+ motor[TIRE_3].pwm=100;
+ }
+ //十字キー足回り(みやがわver)
+ ///////////////////////////////////
+
+ ///////////////////////////////////
+ //課題1
+ if(controller->Button.A) {
+ AirOut(Air0,1);
+ } else if(controller->Button.B) {
+ AirOut(Air0,0);
+ }
+
+ if(controller->Button.ZL) {
+ Airtime.start();
+ AirOut(Air1,0);
+ }
+ if(s>1) {
+ Airtime.stop();
+ Airtime.reset();
+ AirOut(Air1,1);
+ }
+ //課題1
+ ///////////////////////////////////
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ //アナログスティック足回り(新村ver)
+
+ conlx = controller->AnalogL.X;
+ conly = controller->AnalogL.Y;
+ conrx = controller->AnalogR.X;
+ conry = controller->AnalogR.Y;
+ if((!(controller->Button.RIGHT))&&(!(controller->Button.DOWN))&&
+ (!(controller->Button.LEFT))&&(!(controller->Button.UP))&&
+ (!(controller->Button.L))&&(!(controller->Button.R))&&
+ (!(controller->Button.HOME))) {
+ if(((conlx >6) && (conly <8)) ||((conrx >6)&&(conry <8))) {
+ motor[a].dir = BRAKE;
+ motor[b].dir = BRAKE;
+ motor[c].dir = BRAKE;
+ motor[a].pwm = 100.0;
+ motor[b].pwm = 100.0;
+ motor[c].pwm = 100.0;
+ }
+
+ if(a_array[conly][conlx]<0) {
+ motor[a].pwm = -1*a_array[conly][conlx]*precision;
+ motor[a].dir = FOR;
+ } else if(a_array[conly][conlx] > 0) {
+ motor[a].pwm = a_array[conly][conlx]*precision;
+ motor[a].dir = BACK;
+ } else if(a_array[conly][conlx] == 0) {
+ if(conry < 6) {
+ motor[a].dir = BACK;
+ motor[b].dir = BACK;
+ motor[c].dir = BACK;
+ motor[a].pwm = 100.0*precision;
+ motor[b].pwm = 100.0*precision;
+ motor[c].pwm = 100.0*precision;
+ } else if(conry > 8) {
+ motor[a].dir = FOR;
+ motor[b].dir = FOR;
+ motor[c].dir = FOR;
+ motor[a].pwm = 100.0*precision;
+ motor[b].pwm = 100.0*precision;
+ motor[c].pwm = 100.0*precision;
+ } else {
+ motor[a].dir = BRAKE;
+ motor[b].dir = BRAKE;
+ motor[c].dir = BRAKE;
+ motor[a].pwm = 100.0;
+ motor[b].pwm = 100.0;
+ motor[c].pwm = 100.0;
+ }
+ }
+
+ if(b_array[conly][conlx] <0 ) {
+ motor[b].pwm = -1*b_array[conly][conlx]*precision;
+ motor[b].dir = FOR;
+ } else if(b_array[conly][conlx] > 0) {
+ motor[b].pwm = b_array[conly][conlx]*precision;
+ motor[b].dir = BACK;
+ } else if(a_array[conly][conlx] == 0 ) {
+ if(conrx < 6 ) {
+ motor[a].dir = BACK;
+ motor[b].dir = BACK;
+ motor[c].dir = BACK;
+ motor[a].pwm = 100.0*precision;
+ motor[b].pwm = 100.0*precision;
+ motor[c].pwm = 100.0*precision;
+ } else if(conrx > 8) {
+ motor[a].dir = FOR*precision;
+ motor[b].dir = FOR*precision;
+ motor[c].dir = FOR*precision;
+ motor[a].pwm = 100.0*precision;
+ motor[b].pwm = 100.0*precision;
+ motor[c].pwm = 100.0*precision;
+ } else {
+ motor[a].dir = BRAKE;
+ motor[b].dir = BRAKE;
+ motor[c].dir = BRAKE;
+ motor[a].pwm = 100.0;
+ motor[b].pwm = 100.0;
+ motor[c].pwm = 100.0;
+ }
+ }
+
+
+ if(c_array[conly][conlx] <0 ) {
+ motor[c].pwm =-1*c_array[conly][conlx]*precision;
+ motor[c].dir = BACK;
+ } else if(c_array[conly][conlx] > 0) {
+ motor[c].pwm = c_array[conly][conlx]*precision;
+ motor[c].dir = FOR;
+ } else if(a_array[conly][conlx] == 0 ) {
+ if(conrx < 6 ) {
+ motor[a].dir = BACK;
+ motor[b].dir = BACK;
+ motor[c].dir = BACK;
+ motor[a].pwm = 100.0*precision;
+ motor[b].pwm = 100.0*precision;
+ motor[c].pwm = 100.0*precision;
+ } else if(conrx > 8) {
+ motor[a].dir = FOR;
+ motor[b].dir = FOR;
+ motor[c].dir = FOR;
+ motor[a].pwm = 100.0*precision;
+ motor[b].pwm = 100.0*precision;
+ motor[c].pwm = 100.0*precision;
+ } else {
+ motor[a].dir = BRAKE;
+ motor[b].dir = BRAKE;
+ motor[c].dir = BRAKE;
+ motor[a].pwm = 100.0;
+ motor[b].pwm = 100.0;
+ motor[c].pwm = 100.0;
+ }
+ //アナログスティック足回り(新村ver)
+ /////////////////////////////////////////////////////////////////////////////////////
+
+
+
+
+
+
+ }
+ }
+
+
+
+//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
+
+
+ MOTOR::Motor::Update(motor);
+ }
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/Process/Process.h Fri May 03 11:47:27 2019 +0000 @@ -0,0 +1,7 @@ +#ifndef PROCESS_H_ +#define PROCESS_H_ + +void SystemProcess(void); + +#endif +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri May 03 11:47:27 2019 +0000
@@ -0,0 +1,10 @@
+#include "mbed.h"
+
+#include "System/Initialize/Initialize.h"
+#include "System/Process/Process.h"
+
+int main(void) {
+ SystemInitialize();
+ SystemProcess();
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri May 03 11:47:27 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file