Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:669ef71cba68, committed 2018-09-08
- Comitter:
- t_yamamoto
- Date:
- Sat Sep 08 06:05:22 2018 +0000
- Child:
- 1:b1219d8ca117
- Commit message:
- ???????
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommonLibraries/RingBuffer/RingBuffer.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,103 @@
+/*
+* RingBuffer.cpp
+*
+* Created: 2016/08/10 12:14:47
+* Author: masuk
+*/
+
+#include "mbed.h"
+#include "RingBuffer.h"
+
+namespace RINGBUFFER
+{
+
+ RingBuffer::RingBuffer(char *bufPtr, int size)
+ {
+ Buffer.data = bufPtr;
+ Buffer.size = size;
+ Buffer.top = 0;
+ Buffer.bottom = 0;
+ Buffer.fullup = false;
+ }
+
+ void RingBuffer::PutData(char data, bool ASCIItoNum /* = false */)
+ {
+ __disable_irq();
+ if(!Buffer.fullup)
+ {
+ if(ASCIItoNum) Buffer.data[Buffer.top] = data+48;
+ else Buffer.data[Buffer.top] = data;
+ Buffer.length++;
+ Buffer.top++;
+ Buffer.top %= Buffer.size;
+ Buffer.fullup = false;
+ if(Buffer.length>=Buffer.size) Buffer.fullup = true;
+ }
+ __enable_irq();
+ }
+
+ void RingBuffer::PutData(char *data, int length)
+ {
+ __disable_irq();
+ for(int i=0; i<length; i++)
+ {
+ if(!Buffer.fullup)
+ {
+ Buffer.data[Buffer.top] = data[i];
+ Buffer.length++;
+ Buffer.top++;
+ Buffer.top %= Buffer.size;
+ Buffer.fullup = false;
+ if(Buffer.length>=Buffer.size) Buffer.fullup = true;
+ }
+ }
+ __enable_irq();
+ }
+
+ void RingBuffer::PutData(const char *str)
+ {
+ __disable_irq();
+ for( ; *str!='\0'; str++)
+ {
+ if(!Buffer.fullup)
+ {
+ Buffer.data[Buffer.top] = *str;
+ Buffer.length++;
+ Buffer.top++;
+ Buffer.top %= Buffer.size;
+ if(Buffer.length>=Buffer.size) Buffer.fullup = true;
+ else Buffer.fullup = false;
+ }
+ }
+ __enable_irq();
+ }
+
+ char RingBuffer::GetData()
+ {
+ __disable_irq();
+ char data;
+ if(Buffer.length > 0)
+ {
+ data = Buffer.data[Buffer.bottom];
+ Buffer.length--;
+ Buffer.bottom++;
+ Buffer.bottom %= Buffer.size;
+ if(Buffer.length<Buffer.size) Buffer.fullup = false;
+ }
+ else data = '\0';
+ __enable_irq();
+ return data;
+ }
+
+ bool RingBuffer::IsFullup()
+ {
+ return Buffer.fullup;
+ }
+
+ bool RingBuffer::InAnyData()
+ {
+ if(Buffer.length > 0) return true;
+ else return false;
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/CommonLibraries/RingBuffer/RingBuffer.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,49 @@
+/*
+ * RingBuffer.h
+ *
+ * Created: 2016/08/10 12:15:08
+ * Author: masuk
+ */
+
+
+#ifndef RINGBUFFER_H_
+#define RINGBUFFER_H_
+
+#include <stdint.h>
+
+namespace RINGBUFFER
+{
+ //循環型バッファ 使用するバッファの配列と大きさを指定してください
+ class RingBuffer
+ {
+ struct
+ {
+ char *data;
+ int size;
+ uint8_t top;
+ uint8_t bottom;
+ uint8_t length;
+ bool fullup;
+ }Buffer;
+
+ public:
+ RingBuffer(char *bufPtr, int size);
+
+ //バッファにデータを追加
+ void PutData(char data, bool ASCIItoNum = false);
+ void PutData(char *data, int length);
+ void PutData(const char *str);
+
+ //バッファからデータを1byte読み出し
+ char GetData();
+
+ //バッファが飽和しているか確認
+ bool IsFullup();
+ //バッファにデータが存在するか確認
+ bool InAnyData();
+ };
+}
+
+
+
+#endif /* RINGBUFFER_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/Controller/Controller.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,100 @@
+#include "Controller.h"
+
+#include "Mu/Mu.h"
+#include "../../../LED/LED.h"
+
+using namespace MU;
+
+namespace CONTROLLER {
+ Ticker MuTimer;
+
+ void UartUpdate();
+ void LostCheck();
+
+ namespace {
+ ControllerData ctrData;
+ ControllerData keepCtrData;
+ const uint8_t defaultData[4] = CTR_DEFAULT_DATA;
+ const char check[] = "DR=";
+ volatile char packet[24];
+
+ bool controllerLost = false;
+
+ uint8_t timerCount = 0;
+ }
+
+ void Controller::Initialize() {
+ MuUart.attach(UartUpdate, Serial::RxIrq);
+ MuTimer.attach(LostCheck, 0.025);
+ DataReset();
+ }
+
+ ControllerData* Controller::GetData() {
+ __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() {
+ // __disable_irq();
+ for(uint8_t i=0; i<CTR_DATA_LENGTH; i++) ctrData.buf[i] = defaultData[i];
+ // __enable_irq();
+ }
+
+ bool Controller::CheckControllerLost() {
+ return controllerLost;
+ }
+
+ void UartUpdate() {
+ static bool phase = false;
+ static uint8_t count = 0;
+ static uint8_t ledCount = 0;
+
+ char data = MuUart.getc();
+
+ if(phase) {
+ packet[count] = data;
+ if(count < 2) {
+ if(data != check[count]) {
+ phase = false;
+ // controllerLost = true;
+ LED_MU = LED_OFF;
+ }
+ }
+ else if(count == 9) {
+ if(data != '\r') {
+ phase = false;
+ count = 0;
+ } else {
+ ctrData.buf[0] = packet[5];
+ ctrData.buf[1] = packet[6];
+ ctrData.buf[2] = packet[7];
+ ctrData.buf[3] = packet[8];
+ phase = false;
+ timerCount = 0;
+ controllerLost = false;
+ LED_MU = LED_ON;
+ }
+ }
+ count++;
+ }
+ else {
+ if(data == '*') {
+ count = 0;
+ phase = true;
+ }
+ }
+ }
+
+ void LostCheck() {
+ timerCount++;
+ if(timerCount == 2) LED_MU = LED_OFF;
+ if(timerCount >= 20) {
+ controllerLost = true;
+ Controller::DataReset();
+ timerCount = 0;
+ LED_MU = LED_OFF;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/Controller/Controller.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,56 @@
+#ifndef CONTROLLER_H_
+#define CONTROLLER_H_
+
+#include <stdint.h>
+
+namespace CONTROLLER {
+ #define MU_TX PC_6
+ #define MU_RX PC_7
+
+ #define CTR_DATA_LENGTH 4
+ #define CTR_DEFAULT_DATA {0x00, 0x00, 0x77, 0x77}
+
+ 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/Communication/Controller/Mu/Mu.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,33 @@
+#include "Mu.h"
+
+namespace MU {
+ Serial MuUart(MU_TX, MU_RX);
+
+ namespace {
+ char Group[][4] = {"01", "02", "03", "04"};
+ char Channel[][4] = {"08", "14", "1F", "2E"};
+ char DI[][4] = {"10", "20", "40", "80"};
+ char EI[][4] = {"01", "02", "04", "08"};
+ }
+
+ void Mu::SendCommand(char *command, char *value, uint8_t valueLength) {
+ MuUart.putc('@');
+ MuUart.putc(command[0]);
+ MuUart.putc(command[1]);
+ while(valueLength--) {
+ MuUart.putc(*value);
+ value++;
+ }
+ MuUart.putc('\r');
+ MuUart.putc('\n');
+ }
+
+ void Mu::Initialize(uint8_t select) {
+ MuUart.baud(19200);
+
+ Mu::SendCommand("GI",Group[select],2);
+ Mu::SendCommand("CH",Channel[select],2);
+ Mu::SendCommand("DI",DI[select],2);
+ Mu::SendCommand("EI",EI[select],2);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/Controller/Mu/Mu.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,20 @@
+#ifndef MU_H_
+#define MU_H_
+
+#include <stdint.h>
+#include "mbed.h"
+
+namespace MU {
+ #define MU_TX PC_6
+ #define MU_RX PC_7
+
+ class Mu {
+ public:
+ static void Initialize(uint8_t select);
+ static void SendCommand(char *command, char *data, uint8_t dataLength);
+ };
+
+ extern Serial MuUart;
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/RS485/ActuatorHub/ActuatorHub.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,186 @@
+#include "ActuatorHub.h"
+#include "mbed.h"
+
+#include "../../../CommonLibraries/RingBuffer/RingBuffer.h"
+#include "../../../System/Using.h"
+
+static char RS485Send[RS485_BUFFER_SIZE];
+static char BluetoothSend[BLUETOOTH_BUFFER_SIZE];
+
+RINGBUFFER::RingBuffer RS485SendBuffer = RINGBUFFER::RingBuffer(RS485Send, RS485_BUFFER_SIZE);
+RINGBUFFER::RingBuffer BluetoothSendBuffer = RINGBUFFER::RingBuffer(BluetoothSend, BLUETOOTH_BUFFER_SIZE);
+
+namespace ACTUATORHUB {
+ namespace MOTOR {
+ AllMotorData sendMotorData[(MOUNTING_MOTOR_NUM+12) / 13];
+
+ namespace {
+ MotorStatus motor[MOUNTING_MOTOR_NUM];
+ }
+
+ void Motor::Initialize() {
+ #if MOUNTING_MOTOR_NUM > 0
+ sendMotorData[0].direction0to3.all = 0;
+ sendMotorData[0].direction4to7.all = 0;
+ sendMotorData[0].direction8to9.all = 0;
+ #endif
+ #if MOUNTING_MOTOR_NUM > 13
+ sendMotorData[1].direction0to3.all = 0;
+ sendMotorData[1].direction4to7.all = 0;
+ sendMotorData[1].direction8to9.all = 0;
+ #endif
+ #if MOUNTING_MOTOR_NUM > 26
+ sendMotorData[2].direction0to3.all = 0;
+ sendMotorData[2].direction4to7.all = 0;
+ sendMotorData[2].direction8to9.all = 0;
+ #endif
+
+ uint8_t* pwmPo = &sendMotorData[0].pwm0;
+ for(uint8_t i=0; i<MOUNTING_MOTOR_NUM; i++) {
+ *pwmPo = 0;
+ pwmPo++;
+ }
+
+ SetDefault();
+ }
+
+ void Motor::Update(MotorStatus *status) {
+ for(uint8_t i=0; i<MOUNTING_MOTOR_NUM; i++) motor[i] = status[i];
+
+ #if MOUNTING_MOTOR_NUM > 0
+ sendMotorData[0].direction0to3.data0 = motor[0].dir;
+ sendMotorData[0].direction0to3.data1 = motor[1].dir;
+ sendMotorData[0].direction0to3.data2 = motor[2].dir;
+ sendMotorData[0].direction0to3.data3 = motor[3].dir;
+ sendMotorData[0].direction4to7.data0 = motor[4].dir;
+ sendMotorData[0].direction4to7.data1 = motor[5].dir;
+ sendMotorData[0].direction4to7.data2 = motor[6].dir;
+ sendMotorData[0].direction4to7.data3 = motor[7].dir;
+ sendMotorData[0].direction8to9.data0 = motor[8].dir;
+ sendMotorData[0].direction8to9.data1 = motor[9].dir;
+ #endif
+ #if MOUNTING_MOTOR_NUM > 13
+ sendMotorData[1].direction0to3.data0 = motor[13].dir;
+ sendMotorData[1].direction0to3.data1 = motor[14].dir;
+ sendMotorData[1].direction0to3.data2 = motor[15].dir;
+ sendMotorData[1].direction0to3.data3 = motor[16].dir;
+ sendMotorData[1].direction4to7.data0 = motor[17].dir;
+ sendMotorData[1].direction4to7.data1 = motor[18].dir;
+ sendMotorData[1].direction4to7.data2 = motor[19].dir;
+ sendMotorData[1].direction4to7.data3 = motor[20].dir;
+ sendMotorData[1].direction8to9.data0 = motor[21].dir;
+ sendMotorData[1].direction8to9.data1 = motor[22].dir;
+ #endif
+ #if MOUNTING_MOTOR_NUM > 26
+ sendMotorData[2].direction0to3.data0 = motor[26].dir;
+ sendMotorData[2].direction0to3.data1 = motor[27].dir;
+ sendMotorData[2].direction0to3.data2 = motor[28].dir;
+ sendMotorData[2].direction0to3.data3 = motor[29].dir;
+ sendMotorData[2].direction4to7.data0 = motor[30].dir;
+ sendMotorData[2].direction4to7.data1 = motor[31].dir;
+ sendMotorData[2].direction4to7.data2 = motor[32].dir;
+ sendMotorData[2].direction4to7.data3 = motor[33].dir;
+ sendMotorData[2].direction8to9.data0 = motor[34].dir;
+ sendMotorData[2].direction8to9.data1 = motor[35].dir;
+ #endif
+
+ uint8_t* pwmPo = &sendMotorData[0].pwm0;
+ for (uint8_t i = 0;i < MOUNTING_MOTOR_NUM;i++)
+ {
+ *pwmPo = motor[i].pwm;
+ pwmPo++;
+ }
+ }
+
+ void Motor::SetDefault() {
+ for(uint8_t i=0; i<MOUNTING_MOTOR_NUM; i++) {
+ motor[i].dir = FREE;
+ motor[i].pwm = 0;
+ }
+ }
+ }
+
+ namespace SOLENOID {
+ SolenoidStatus sendSolenoidData;
+
+ void Solenoid::Initialize() {
+ sendSolenoidData.all = ALL_SOLENOID_OFF;
+ }
+
+ void Solenoid::Update(SolenoidStatus status) {
+ sendSolenoidData.all = status.all;
+ }
+ }
+
+ void ActuatorHub::Update() {
+ if(!RS485SendBuffer.InAnyData()) {
+ // __disable_irq();
+
+ #ifdef USE_MOTOR
+ #if MOUNTING_MOTOR_NUM > 0
+ RS485SendBuffer.PutData('*');
+ RS485SendBuffer.PutData(MOTOR_ADDR);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[0].direction0to3.all);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[0].direction4to7.all);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[0].direction8to9.all);
+ uint8_t* pwmPo = &MOTOR::sendMotorData[0].pwm0;
+ for(uint8_t i=0; i<13; i++) {
+ RS485SendBuffer.PutData(*pwmPo);
+ pwmPo++;
+ }
+ RS485SendBuffer.PutData('\r');
+ #endif
+
+ #if MOUNTING_MOTOR_NUM > 13
+ RS485SendBuffer.PutData('*');
+ RS485SendBuffer.PutData(MOTOR2_ADDR);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[1].direction0to3.all);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[1].direction4to7.all);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[1].direction8to9.all);
+ pwmPo = &MOTOR::sendMotorData[1].pwm0;
+ for(uint8_t i=0; i<13; i++) {
+ RS485SendBuffer.PutData(*pwmPo);
+ pwmPo++;
+ }
+ RS485SendBuffer.PutData('\r');
+ #endif
+
+ #if MOUNTING_MOTOR_NUM > 26
+ RS485SendBuffer.PutData('*');
+ RS485SendBuffer.PutData(MOTOR3_ADDR);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[2].direction0to3.all);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[2].direction4to7.all);
+ RS485SendBuffer.PutData(MOTOR::sendMotorData[2].direction8to9.all);
+ pwmPo = &MOTOR::sendMotorData[2].pwm0;
+ for(uint8_t i=0; i<(MOUNTING_MOTOR_NUM-26); i++) {
+ RS485SendBuffer.PutData(*pwmPo);
+ pwmPo++;
+ }
+ RS485SendBuffer.PutData('\r');
+ #endif
+ #endif
+
+ #ifdef USE_SOLENOID
+ RS485SendBuffer.PutData('*');
+ RS485SendBuffer.PutData(SOLENOID_ADDR);
+ RS485SendBuffer.PutData((SOLENOID::sendSolenoidData.all & 0xff00) >> 8);
+ RS485SendBuffer.PutData(SOLENOID::sendSolenoidData.all & 0x00ff);
+ RS485SendBuffer.PutData('\r');
+ #endif
+
+ #ifdef USE_BLUETOOTH
+ if(BluetoothSendBuffer.InAnyData()) {
+ RS485SendBuffer.PutData('*');
+ RS485SendBuffer.PutData(BLUETOOTH_ADDR);
+ while(BluetoothSendBuffer.InAnyData()) {
+ RS485SendBuffer.PutData(BluetoothSendBuffer.GetData());
+ }
+ RS485SendBuffer.PutData(disconnect);
+ }
+ #endif
+
+ // __enable_irq();
+ }
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/RS485/ActuatorHub/ActuatorHub.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,104 @@
+#ifndef ACTUATORHUB_H_
+#define ACTUATORHUB_H_
+
+#include "../../../CommonLibraries/RingBuffer/RingBuffer.h"
+
+extern RINGBUFFER::RingBuffer RS485SendBuffer;
+extern RINGBUFFER::RingBuffer BluetoothSendBuffer;
+
+namespace ACTUATORHUB {
+ #define MOTOR_ADDR 'M'
+ #define MOTOR2_ADDR 'N'
+ #define MOTOR3_ADDR 'O'
+ #define SOLENOID_ADDR 'S'
+ #define BLUETOOTH_ADDR 'B'
+
+ namespace MOTOR {
+ #define FREE 0
+ #define BACK 1
+ #define FOR 2
+ #define BRAKE 3
+
+ typedef struct {
+ uint8_t dir;
+ uint8_t pwm;
+ }MotorStatus;
+
+ typedef union {
+ struct {
+ int data3 : 2;
+ int data2 : 2;
+ int data1 : 2;
+ int data0 : 2;
+ };
+ uint8_t all;
+ }MotorDirectionData;
+
+ typedef struct {
+ MotorDirectionData direction0to3;
+ MotorDirectionData direction4to7;
+ MotorDirectionData direction8to9;
+
+ uint8_t pwm0;
+ uint8_t pwm1;
+ uint8_t pwm2;
+ uint8_t pwm3;
+ uint8_t pwm4;
+ uint8_t pwm5;
+ uint8_t pwm6;
+ uint8_t pwm7;
+ uint8_t pwm8;
+ uint8_t pwm9;
+ uint8_t pwm10;
+ uint8_t pwm11;
+ uint8_t pwm12;
+ }AllMotorData;
+
+ class Motor {
+ public:
+ static void Initialize();
+ static void Update(MotorStatus *status);
+ static void SetDefault();
+ };
+ }
+
+ namespace SOLENOID {
+ #define SOLENOID_ON 1
+ #define SOLENOID_OFF 0
+
+ #define ALL_SOLENOID_ON 0xffff
+ #define ALL_SOLENOID_OFF 0
+
+ typedef union {
+ struct {
+ int : 4;
+ int solenoid11 : 1;
+ int solenoid10 : 1;
+ int solenoid9 : 1;
+ int solenoid8 : 1;
+ int solenoid7 : 1;
+ int solenoid6 : 1;
+ int solenoid5 : 1;
+ int solenoid4 : 1;
+ int solenoid3 : 1;
+ int solenoid2 : 1;
+ int solenoid1 : 1;
+ int solenoid0 : 1;
+ };
+ uint16_t all;
+ }SolenoidStatus;
+
+ class Solenoid {
+ public:
+ static void Initialize();
+ static void Update(SolenoidStatus status);
+ };
+ }
+
+ class ActuatorHub {
+ public:
+ static void Update();
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/RS485/RS485.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,32 @@
+#include "RS485.h"
+#include "mbed.h"
+#include "ActuatorHub/ActuatorHub.h"
+#include "../../LED/LED.h"
+#include "../../System/Using.h"
+
+namespace RS485 {
+ DigitalOut selectBit(SELECTBIT_PIN);
+ Serial RS485Uart(RS485UART_TX, RS485UART_RX);
+
+ void Transmit();
+
+ void RS485::Initialize() {
+ selectBit = 1; //送信固定
+ RS485Uart.baud(38400);
+ RS485Uart.attach(Transmit, Serial::TxIrq);
+ }
+
+ void Transmit() {
+ static uint8_t count = 0;
+ __disable_irq();
+ RS485Uart.putc(RS485SendBuffer.GetData());
+ if(count >= 200) {
+ #ifdef USE_MOTOR
+ LED_DEBUG2 = !LED_DEBUG2;
+ #endif
+
+ count = 0;
+ } else count++;
+ __enable_irq();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Communication/RS485/RS485.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,16 @@
+#ifndef RS485_H_
+#define RS485_H_
+
+namespace RS485 {
+ #define SELECTBIT_PIN PB_7
+
+ #define RS485UART_TX PA_9
+ #define RS485UART_RX PA_10
+
+ class RS485 {
+ public:
+ static void Initialize();
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/ExternalInt/ExternalInt.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,58 @@
+#include "ExternalInt.h"
+#include "mbed.h"
+
+#include "../../System/Process/InterruptProcess.h"
+
+InterruptIn BoardInt[] = {
+ InterruptIn(INT0_PIN),
+ InterruptIn(INT1_PIN),
+ InterruptIn(INT2_PIN),
+ InterruptIn(INT3_PIN),
+ InterruptIn(INT4_PIN),
+ InterruptIn(INT5_PIN),
+ InterruptIn(INT6_PIN),
+ InterruptIn(INT7_PIN),
+ InterruptIn(INT8_PIN),
+ InterruptIn(INT9_PIN),
+ InterruptIn(INT10_PIN),
+ InterruptIn(INT11_PIN),
+ InterruptIn(INT12_PIN),
+ InterruptIn(INT13_PIN),
+ InterruptIn(INT14_PIN),
+};
+
+namespace EXTERNALINT {
+ void Int::Initialize() {
+ BoardInt[0].mode(PullUp);
+ BoardInt[1].mode(PullUp);
+ BoardInt[2].mode(PullUp);
+ BoardInt[3].mode(PullUp);
+ BoardInt[4].mode(PullUp);
+ BoardInt[5].mode(PullUp);
+ BoardInt[6].mode(PullUp);
+ BoardInt[7].mode(PullUp);
+ BoardInt[8].mode(PullUp);
+ BoardInt[9].mode(PullUp);
+ BoardInt[10].mode(PullUp);
+ BoardInt[11].mode(PullUp);
+ BoardInt[12].mode(PullUp);
+ BoardInt[13].mode(PullUp);
+ BoardInt[14].mode(PullUp);
+
+ BoardInt[0].fall(int0);
+ BoardInt[1].fall(int1);
+ BoardInt[2].fall(int2);
+ BoardInt[3].fall(int3);
+ BoardInt[4].fall(int4);
+ BoardInt[5].fall(int5);
+ BoardInt[6].fall(int6);
+ BoardInt[7].fall(int7);
+ BoardInt[8].fall(int8);
+ BoardInt[9].fall(int9);
+ BoardInt[10].fall(int10);
+ BoardInt[11].fall(int11);
+ BoardInt[12].fall(int12);
+ BoardInt[13].fall(int13);
+ BoardInt[14].fall(int14);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/ExternalInt/ExternalInt.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,27 @@
+#ifndef EXTERNALINT_H_
+#define EXTERNALINT_H_
+
+namespace EXTERNALINT {
+ #define INT0_PIN PC_5
+ #define INT1_PIN PA_12
+ #define INT2_PIN PA_11
+ #define INT3_PIN PB_12
+ #define INT4_PIN PB_2
+ #define INT5_PIN PB_1
+ #define INT6_PIN PB_15
+ #define INT7_PIN PB_14
+ #define INT8_PIN PB_13
+ #define INT9_PIN PC_4
+ #define INT10_PIN PB_3
+ #define INT11_PIN PB_5
+ #define INT12_PIN PB_4
+ #define INT13_PIN PB_10
+ #define INT14_PIN PA_8
+
+ class Int {
+ public:
+ static void Initialize();
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/Potentiometer/Potentiometer.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,11 @@
+#include "Potentiometer.h"
+#include "mbed.h"
+
+namespace POTENTIOMETER {
+ AnalogIn adc[] = {
+ AnalogIn(ADC0_PIN),
+ AnalogIn(ADC1_PIN),
+ AnalogIn(ADC2_PIN),
+ AnalogIn(ADC3_PIN),
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/Potentiometer/Potentiometer.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,15 @@
+#ifndef POTENTIOMETER_H_
+#define POTENTIOMETER_H_
+
+#include "mbed.h"
+
+namespace POTENTIOMETER {
+ #define ADC0_PIN PC_2
+ #define ADC1_PIN PC_3
+ #define ADC2_PIN PC_0
+ #define ADC3_PIN PC_1
+
+ extern AnalogIn adc[];
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/Switch/Switch.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,59 @@
+#include "Switch.h"
+
+#include <stdint.h>
+#include "mbed.h"
+
+namespace SWITCH {
+ DigitalIn dipSw[] = {
+ DigitalIn(DIP0_PIN),
+ DigitalIn(DIP1_PIN),
+ DigitalIn(DIP2_PIN),
+ DigitalIn(DIP3_PIN),
+ };
+
+ DigitalIn limitSw(LS_PIN);
+ DigitalOut selectPin[] = {
+ DigitalOut(SELECT0_PIN),
+ DigitalOut(SELECT1_PIN),
+ DigitalOut(SELECT2_PIN),
+ DigitalOut(SELECT3_PIN),
+ };
+
+ void DipSw::Initialize() {
+ for(uint8_t i=0; i < sizeof(dipSw)/sizeof(dipSw[0]); i++) {
+ dipSw[i].mode(PullUp);
+ }
+ }
+
+ uint8_t DipSw::GetStatus() {
+ if(DIP0 == SW_ON) return 0;
+ else if(DIP1 == SW_ON) return 1;
+ else if(DIP2 == SW_ON) return 2;
+ else if(DIP3 == SW_ON) return 3;
+
+ return 0;
+ }
+
+ void LimitSw::Initialize() {
+ for(uint8_t i=0; i<4; i++) selectPin[i] = 0;
+ limitSw.mode(PullUp);
+ }
+
+ bool LimitSw::IsPressed(int index) {
+ // if(index > 0x0f) return false;
+
+ printf("%d\n", index);
+
+ MP_Channel ch;
+ ch.all = index;
+
+ selectPin[0] = ch.s0;
+ selectPin[1] = ch.s1;
+ selectPin[2] = ch.s2;
+ selectPin[3] = ch.s3;
+
+ while(1);
+
+ return limitSw ? false : true;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Input/Switch/Switch.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,51 @@
+#ifndef SWITCH_H_
+#define SWITCH_H_
+
+#include "mbed.h"
+#include <stdint.h>
+
+namespace SWITCH {
+ #define SW_ON 0
+ #define SW_OFF 1
+
+ #define DIP0_PIN PB_0
+ #define DIP1_PIN PA_4
+ #define DIP2_PIN PA_1
+ #define DIP3_PIN PA_0
+
+ #define LS_PIN PB_6
+ #define SELECT0_PIN PC_8
+ #define SELECT1_PIN PC_9
+ #define SELECT2_PIN PB_9
+ #define SELECT3_PIN PB_8
+
+ #define DIP0 dipSw[0]
+ #define DIP1 dipSw[1]
+ #define DIP2 dipSw[2]
+ #define DIP3 dipSw[3]
+
+ class DipSw {
+ public:
+ static void Initialize();
+ static uint8_t GetStatus();
+ };
+
+ class LimitSw {
+ public:
+ static void Initialize();
+ static bool IsPressed(int index);
+ };
+
+ typedef union {
+ struct {
+ int s0 : 1;
+ int s1 : 1;
+ int s2 : 1;
+ int s3 : 1;
+ int : 4;
+ };
+ uint8_t all;
+ } MP_Channel;
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LED/LED.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,20 @@
+#include "LED.h"
+
+#include "../System/Using.h"
+#include "mbed.h"
+#include <stdint.h>
+
+namespace LED {
+ DigitalOut boardLED[USE_LED_NUM] = {
+ DigitalOut(LED_DEBUG0_PIN),
+ DigitalOut(LED_DEBUG1_PIN),
+ DigitalOut(LED_DEBUG2_PIN),
+ DigitalOut(LED_MU_PIN),
+ };
+
+ void LED::Initialize() {
+ for(uint8_t i=0; i < USE_LED_NUM; i++) {
+ boardLED[i] = LED_OFF;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/LED/LED.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,29 @@
+#ifndef LED_H_
+#define LED_H_
+
+#include "mbed.h"
+#include <stdint.h>
+
+namespace LED {
+ extern DigitalOut boardLED[];
+
+ #define LED_ON 0
+ #define LED_OFF 1
+
+ #define LED_DEBUG0_PIN PC_11
+ #define LED_DEBUG1_PIN PC_10
+ #define LED_DEBUG2_PIN PC_12
+ #define LED_MU_PIN PC_13
+
+ #define LED_DEBUG0 LED::boardLED[0]
+ #define LED_DEBUG1 LED::boardLED[1]
+ #define LED_DEBUG2 LED::boardLED[2]
+ #define LED_MU LED::boardLED[3]
+
+ class LED {
+ public:
+ static void Initialize();
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Safty/Safty.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,18 @@
+#include "Safty.h"
+
+#include "../Communication/Controller/Controller.h"
+#include "../Input/Switch/Switch.h"
+
+using namespace SWITCH;
+
+
+namespace SAFTY {
+ ErrorStatus ErrorCheck::Check() {
+ ErrorStatus error = 0;
+ CONTROLLER::Controller::CheckControllerLost() ? error |= Error::ControllerLost : error &=~ Error::ControllerLost;
+ // #ifdef USE_DRIVECHECK
+ (DRIVECHECK_LIMITSW == SW_OFF) ? error |= Error::DrivePowerLost : error &=~ Error::DrivePowerLost;
+ // #endif
+ return error;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Safty/Safty.h Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,27 @@
+#ifndef SAFTY_H_
+#define SAFTY_H_
+
+#include <stdint.h>
+#include "Input/Switch/Switch.h"
+
+namespace SAFTY {
+ #define DRIVECHECK_LIMITSW SWITCH::LimitSw::IsPressed(11)
+
+ typedef struct
+ {
+ enum Elem
+ {
+ None = 0x00,
+ DrivePowerLost = 0x01,
+ ControllerLost = 0x02,
+ };
+ }Error;
+ typedef uint8_t ErrorStatus;
+
+ class ErrorCheck {
+ public:
+ static ErrorStatus Check();
+ };
+}
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/System/Initialize/Initialize.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,45 @@
+#include "Initialize.h"
+#include "../Using.h"
+
+#include "../../Input/Switch/Switch.h"
+#include "../../Communication/Controller/Mu/Mu.h"
+#include "../../Communication/Controller/Controller.h"
+#include "../../Communication/RS485/ActuatorHub/ActuatorHub.h"
+#include "../../Communication/RS485/RS485.h"
+#include "../../Input/ExternalInt/ExternalInt.h"
+#include "../../Input/Switch/Switch.h"
+#include "../../LED/LED.h"
+
+void SystemInitialize() {
+ #ifdef USE_SWITCH
+ SWITCH::DipSw::Initialize();
+ SWITCH::LimitSw::Initialize();
+ #endif
+
+ #ifdef USE_MU
+ MU::Mu::Initialize(SWITCH::DipSw::GetStatus());
+ CONTROLLER::Controller::Initialize();
+ #endif
+
+ #ifdef USE_INT
+ EXTERNALINT::Int::Initialize();
+ #endif
+
+ #ifdef USE_LED
+ LED::LED::Initialize();
+ #endif
+
+ #ifdef USE_RS485
+ RS485::RS485::Initialize();
+ #endif
+
+ #ifdef USE_MOTOR
+ ACTUATORHUB::MOTOR::Motor::Initialize();
+ #endif
+
+ #ifdef USE_SOLENOID
+ ACTUATORHUB::SOLENOID::Solenoid::Initialize();
+ #endif
+
+ __enable_irq();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/Initialize/Initialize.h Sat Sep 08 06:05:22 2018 +0000 @@ -0,0 +1,6 @@ +#ifndef INITIALIZE_H_ +#define INITIALIZE_H_ + +void SystemInitialize(); + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/System/Process/InterruptProcess.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,82 @@
+#include "InterruptProcess.h"
+
+#include "../../LED/LED.h"
+#include "Process.h"
+
+#pragma region INT_PROCESS
+void int0()//
+{
+
+}
+
+void int1()//
+{
+
+}
+
+void int2()
+{
+
+}
+
+void int3()
+{
+
+}
+
+void int4()
+{
+
+}
+
+void int5()
+{
+
+}
+
+void int6()
+{
+
+}
+
+void int7()
+{
+
+}
+
+void int8()
+{
+
+}
+
+void int9()//
+{
+
+}
+
+void int10()
+{
+
+}
+
+void int11()
+{
+
+}
+
+void int12()
+{
+
+}
+
+void int13()
+{
+
+}
+
+void int14()
+{
+
+}
+
+#pragma endregion INT_PROCESS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/Process/InterruptProcess.h Sat Sep 08 06:05:22 2018 +0000 @@ -0,0 +1,20 @@ +#ifndef INTERRUPTPROCESS_H_ +#define INTERRUPTPROCESS_H_ + +void int0(); +void int1(); +void int2(); +void int3(); +void int4(); +void int5(); +void int6(); +void int7(); +void int8(); +void int9(); +void int10(); +void int11(); +void int12(); +void int13(); +void int14(); + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/System/Process/Process.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,277 @@
+#include "mbed.h"
+#include "Process.h"
+
+#include "../../Communication/RS485/ActuatorHub/ActuatorHub.h"
+#include "../../Communication/Controller/Controller.h"
+#include "../../Input/ExternalInt/ExternalInt.h"
+#include "../../Input/Switch/Switch.h"
+#include "../../Input/Potentiometer/Potentiometer.h"
+#include "../../LED/LED.h"
+#include "../../Safty/Safty.h"
+#include "../Using.h"
+
+using namespace SWITCH;
+
+static CONTROLLER::ControllerData *controller;
+ACTUATORHUB::MOTOR::MotorStatus motor[MOUNTING_MOTOR_NUM];
+ACTUATORHUB::SOLENOID::SolenoidStatus solenoid;
+
+static bool lock;
+static bool processChangeComp;
+static int current;
+
+static void AllActuatorReset();
+
+#ifdef USE_SUBPROCESS
+static void (*Process[USE_PROCESS_NUM])(void);
+#endif
+
+#pragma region USER-DEFINED_VARIABLES_AND_PROTOTYPE
+
+/*Replace here with the definition code of your variables.*/
+
+#pragma endregion USER-DEFINED_VARIABLES_AND_PROTOTYPE
+
+#ifdef USE_SUBPROCESS
+#if USE_PROCESS_NUM>0
+static void Process0(void);
+#endif
+#if USE_PROCESS_NUM>1
+static void Process1(void);
+#endif
+#if USE_PROCESS_NUM>2
+static void Process2(void);
+#endif
+#if USE_PROCESS_NUM>3
+static void Process3(void);
+#endif
+#if USE_PROCESS_NUM>4
+static void Process4(void);
+#endif
+#if USE_PROCESS_NUM>5
+static void Process5(void);
+#endif
+#if USE_PROCESS_NUM>6
+static void Process6(void);
+#endif
+#if USE_PROCESS_NUM>7
+static void Process7(void);
+#endif
+#if USE_PROCESS_NUM>8
+static void Process8(void);
+#endif
+#if USE_PROCESS_NUM>9
+static void Process9(void);
+#endif
+#endif
+
+void SystemProcessInitialize()
+{
+ #pragma region USER-DEFINED_VARIABLE_INIT
+
+ /*Replace here with the initialization code of your variables.*/
+
+ #pragma endregion USER-DEFINED_VARIABLE_INIT
+
+ lock = true;
+ processChangeComp = true;
+ current = DEFAULT_PROCESS;
+
+ #ifdef USE_SUBPROCESS
+ #if USE_PROCESS_NUM>0
+ Process[0] = Process0;
+ #endif
+ #if USE_PROCESS_NUM>1
+ Process[1] = Process1;
+ #endif
+ #if USE_PROCESS_NUM>2
+ Process[2] = Process2;
+ #endif
+ #if USE_PROCESS_NUM>3
+ Process[3] = Process3;
+ #endif
+ #if USE_PROCESS_NUM>4
+ Process[4] = Process4;
+ #endif
+ #if USE_PROCESS_NUM>5
+ Process[5] = Process5;
+ #endif
+ #if USE_PROCESS_NUM>6
+ Process[6] = Process6;
+ #endif
+ #if USE_PROCESS_NUM>7
+ Process[7] = Process7;
+ #endif
+ #if USE_PROCESS_NUM>8
+ Process[8] = Process8;
+ #endif
+ #if USE_PROCESS_NUM>9
+ Process[9] = Process9;
+ #endif
+ #endif
+}
+
+static void SystemProcessUpdate()
+{
+ #ifdef USE_SUBPROCESS
+ if(controller->Button.HOME) lock = false;
+
+ if(controller->Button.START && processChangeComp)
+ {
+ current++;
+ if (USE_PROCESS_NUM < current) current = USE_PROCESS_NUM;
+ processChangeComp = false;
+ }
+ else if(controller->Button.SELECT && processChangeComp)
+ {
+ current--;
+ if (current < 0) current = 0;
+ processChangeComp = false;
+ }
+ else if(!controller->Button.SELECT && !controller->Button.START) processChangeComp = true;
+ #endif
+
+ #ifdef USE_MOTOR
+ ACTUATORHUB::MOTOR::Motor::Update(motor);
+ #endif
+
+ #ifdef USE_SOLENOID
+ ACTUATORHUB::SOLENOID::Solenoid::Update(solenoid);
+ #endif
+
+ #ifdef USE_RS485
+ ACTUATORHUB::ActuatorHub::Update();
+ #endif
+
+}
+
+void SystemProcess()
+{
+ SystemProcessInitialize();
+
+ while(1)
+ {
+ #ifdef USE_MU
+ controller = CONTROLLER::Controller::GetData();
+ #endif
+
+ #ifdef USE_ERRORCHECK
+ if(SAFTY::ErrorCheck::Check() & SAFTY::Error::ControllerLost)
+ {
+ CONTROLLER::Controller::DataReset();
+ AllActuatorReset();
+ lock = true;
+ }
+ else
+ #endif
+ {
+
+ #ifdef USE_SUBPROCESS
+ if(!lock)
+ {
+ Process[current]();
+ }
+ else
+ #endif
+ {
+ //ロック時の処理
+ }
+ }
+
+ SystemProcessUpdate();
+ }
+}
+
+#pragma region PROCESS
+#ifdef USE_SUBPROCESS
+#if USE_PROCESS_NUM>0
+static void Process0()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>1
+static void Process1()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>2
+static void Process2()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>3
+static void Process3()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>4
+static void Process4()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>5
+static void Process5()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>6
+static void Process6()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>7
+static void Process7()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>8
+static void Process8()
+{
+
+}
+#endif
+
+#if USE_PROCESS_NUM>9
+static void Process9()
+{
+
+}
+#endif
+#endif
+#pragma endregion PROCESS
+
+static void AllActuatorReset()
+{
+
+ #ifdef USE_SOLENOID
+ solenoid.all = ALL_SOLENOID_OFF;
+ #endif
+
+ #ifdef USE_MOTOR
+ for (uint8_t i = 0; i < MOUNTING_MOTOR_NUM; i++)
+ {
+ motor[i].dir = FREE;
+ motor[i].pwm = 0;
+ }
+ #endif
+}
+
+#pragma region USER-DEFINED-FUNCTIONS
+
+#pragma endregion
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/Process/Process.h Sat Sep 08 06:05:22 2018 +0000 @@ -0,0 +1,69 @@ +#ifndef PROCESS_H_ +#define PROCESS_H_ + +#include "mbed.h" + +void SystemProcess(); + +#define ROLLER_LF motor[ROLLER_LF_NUM] +#define ROLLER_LL motor[ROLLER_LL_NUM] +#define ROLLER_LB motor[ROLLER_LB_NUM] +#define ROLLER_LR motor[ROLLER_LR_NUM] +#define ROLLER_CF motor[ROLLER_CF_NUM] +#define ROLLER_CL motor[ROLLER_CL_NUM] +#define ROLLER_CB motor[ROLLER_CB_NUM] +#define ROLLER_CR motor[ROLLER_CR_NUM] +#define ROLLER_RF motor[ROLLER_RF_NUM] +#define ROLLER_RL motor[ROLLER_RL_NUM] +#define ROLLER_RB motor[ROLLER_RB_NUM] +#define ROLLER_RR motor[ROLLER_RR_NUM] + +#define ROLLER_LF_NUM 8 +#define ROLLER_LL_NUM 9 +#define ROLLER_LB_NUM 13 +#define ROLLER_LR_NUM 14 +#define ROLLER_CF_NUM 15 +#define ROLLER_CL_NUM 16 +#define ROLLER_CB_NUM 17 +#define ROLLER_CR_NUM 18 +#define ROLLER_RF_NUM 19 +#define ROLLER_RL_NUM 20 +#define ROLLER_RB_NUM 21 +#define ROLLER_RR_NUM 22 + +#define FRONT_R tire[0] +#define FRONT_L tire[1] +#define REAR_L tire[2] +#define REAR_R tire[3] + +#define TIRE_FR motor[0] +#define TIRE_FL motor[1] +#define TIRE_RL motor[2] +#define TIRE_RR motor[3] +#define STR_FR motor[4] +#define STR_FL motor[5] +#define STR_RL motor[6] +#define STR_RR motor[7] + +#define SENSOR_FR POTENTIOMETER::adc[1].read_u16() +#define SENSOR_FL (POTENTIOMETER::adc[2].read_u16() / 65535.0 * 1024.0) +#define SENSOR_RL POTENTIOMETER::adc[3] +#define SENSOR_RR POTENTIOMETER::adc[4] + +#define PLUS90_FR 605 +// #define PLUS90_FL 31100 +#define PLUS90_FL 480 +#define PLUS90_RL 505 +#define PLUS90_RR 550 + +#define ZERO_FR 880 +// #define ZERO_FL 48800 +#define ZERO_FL 760 +#define ZERO_RL 775 +#define ZERO_RR 800 + +extern Timer rollerTimer[4]; +extern float rollerSpeed[4]; + + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/System/Using.h Sat Sep 08 06:05:22 2018 +0000 @@ -0,0 +1,63 @@ +#ifndef USING_H_ +#define USING_H_ + +//Communication +#define USE_MU + +#define USE_BLUETOOTH +#ifdef USE_BLUETOOTH +# define BLUETOOTH_BUFFER_SIZE 64 +const char disconnect = 0x03; +#else +# define BLUETOOTH_BUFFER_SIZE 0 +#endif + +#define USE_MOTOR +#ifdef USE_MOTOR +# define MOUNTING_MOTOR_NUM 13 +#else +# define MOUNTING_MOTOR_NUM 0 +#endif + +#define USE_RS485 +#ifdef USE_RS485 +# define RS485_BUFFER_SIZE 26 + BLUETOOTH_BUFFER_SIZE + MOUNTING_MOTOR_NUM-13 +#else +# define RS485_BUFFER_SIZE 0 +#endif + +#define USE_SOLENOID + +//Communication + +//Output +#define USE_LED +#define USE_LED_NUM 4 +//Output + +//Input + +#define USE_SWITCH + +#define USE_POTENTIOMETER +#ifdef USE_POTENTIOMETER +# define USE_POTENTIOMETER_NUM 4 +#else +# define USE_POTENTIOMETER_NUM 0 +#endif + +#define USE_INT + +//Input + +#define USE_ERRORCHECK +#define USE_DRIVECHECK + +#define USE_SUBPROCESS +#ifdef USE_SUBPROCESS +# define USE_PROCESS_NUM 10 //0 ~ 10 +# define DEFAULT_PROCESS 0 +#endif + + +#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Sat Sep 08 06:05:22 2018 +0000
@@ -0,0 +1,9 @@
+#include "System/Initialize/Initialize.h"
+#include "System/Process/Process.h"
+
+#include <float.h>
+
+int main(void) {
+ SystemInitialize();
+ SystemProcess();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sat Sep 08 06:05:22 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187 \ No newline at end of file