Miya Miyagawa
/
NRP2020_main
Outher...Miura Souta
Revision 1:5b0303768126, committed 2020-01-21
- Comitter:
- M_souta
- Date:
- Tue Jan 21 11:10:33 2020 +0000
- Parent:
- 0:db8d4af513c0
- Child:
- 2:32d2cd7d744b
- Commit message:
- lll
Changed in this revision
--- a/MCP/MCP.cpp Mon Jan 20 08:46:24 2020 +0000 +++ b/MCP/MCP.cpp Tue Jan 21 11:10:33 2020 +0000 @@ -1,14 +1,50 @@ #include "MCP.h" #include "mbed.h" +#include "MCP23017.h" MCP::MCP(PinName sda, PinName scl, uint8_t device_address) - :i2c(sda, scl) + :i2c(sda, scl), mcp(i2c, device_address) { - _write_opcode = device_address & 0xFE; // low order bit = 0 for write - _read_opcode = device_address | 0x01; // low order bit = 1 for read; + _iodir_data.all = 0xffff; + _pull_data.all = 0x0000; + _read_data.all = 0x0000; + _write_data.all = 0x0000; +} + +void MCP::PinMode(uint8_t pin, pin_mode mode) +{ + if(mode == OUTPUT) { + _iodir_data.all &= ~(0x0001 << pin); + } else if(mode == INPUT) { + _iodir_data.all |= (0x0001 << pin); + } else if(mode == INPUT_PULLUP) { + _iodir_data.all |= (0x0001 << pin); + _pull_data.all |= (0x0001 << pin); + } } -void MCP::PinMode(uint8_t pin, uint8_t mode) +void MCP::Write(uint8_t pin, bool signal) +{ + if(signal == 1) { + _write_data.all |= (0x0001 << pin); + } else { + _write_data.all &= ~(0x0001 << pin); + } +} + +bool MCP::Read(uint8_t pin) { - //_pull_data -} \ No newline at end of file + return (_read_data.all >> pin) & 0x01; +} + +void MCP::Update(void) +{ + mcp.direction(PORT_A, _iodir_data.port.port_A); + mcp.direction(PORT_B, _iodir_data.port.port_B); + mcp.configurePullUps(PORT_A, _pull_data.port.port_A); + mcp.configurePullUps(PORT_B, _pull_data.port.port_B); + _read_data.port.port_A = mcp.read(PORT_A); + _read_data.port.port_B = mcp.read(PORT_B); + // mcp.write(PORT_A, _write_data.port_A); + // mcp.write(PORT_B, _write_data.port_B); +}
--- a/MCP/MCP.h Mon Jan 20 08:46:24 2020 +0000 +++ b/MCP/MCP.h Tue Jan 21 11:10:33 2020 +0000 @@ -2,35 +2,34 @@ #define MCP_H_ #include "mbed.h" +#include "MCP23017.h" #define SDA PB_7 #define SCL PB_6 #define MCP_ADDRESS 0x40 -// MCP register address -#define IODIRA 0x00 -#define IODIRB 0x01 -#define IPOLA 0x02 -#define IPOLB 0x03 -#define GPINTENA 0x04 -#define GPINTENB 0x05 -#define DEFVALA 0x06 -#define DEFVALB 0x07 -#define INTCONA 0x08 -#define INTCONB 0x09 -#define IOCONA 0x0A -#define IOCONB 0x0B -#define GPPUA 0x0C -#define GPPUB 0x0D -#define INTFA 0x0E -#define INTFB 0x0F -#define INTCAPA 0x10 -#define INTCAPB 0x11 -#define GPIOA 0x12 -#define GPIOB 0x13 -#define OLATA 0x14 -#define OLATB 0x15 + + +typedef enum { + a0 = 0, + a1 = 1, + a2 = 2, + a3 = 3, + a4 = 4, + a5 = 5, + a6 = 6, + a7 = 7, + b0 = 8, + b1 = 9, + b2 = 10, + b3 = 11, + b4 = 12, + b5 = 13, + b6 = 14, + b7 = 15, +}pin_name; + typedef enum { OUTPUT, @@ -38,10 +37,15 @@ INPUT_PULLUP, }pin_mode; +typedef struct byte{ + uint8_t port_A; + uint8_t port_B; +}byte; + typedef union { - uint8_t port_A, port_B; + byte port; uint16_t all; -}mcp_register; +}mcp_data; class MCP { public: @@ -50,11 +54,11 @@ / */ MCP(PinName sda, PinName scl, uint8_t device_address); // MCP pin define * pin number is 0 ~ 15 - void PinMode(uint8_t pin, uint8_t mode); + void PinMode(uint8_t pin, pin_mode mode); // MCP DigitalWrite * pin number is 0 ~ 15 void Write(uint8_t pin, bool signal); // MCP DigitalRead * pin number is 0 ~ 15 - bool Read(uint8_t pin, bool signal); + bool Read(uint8_t pin); // MCP initialize void Initialize(void); // MCP register update and read new data @@ -64,15 +68,17 @@ private: I2C i2c; + MCP23017 mcp; char _read_opcode; char _write_opcode; - uint16_t _pull_data; - uint16_t _read_data; - uint16_t _write_data; + mcp_data _iodir_data; + mcp_data _pull_data; + mcp_data _read_data; + mcp_data _write_data; void _Write(uint8_t address, uint8_t data); - void _Read(uint8_t address, uint8_t data); + void _Read(uint8_t address, uint8_t data); };
--- a/Motor/Motor.cpp Mon Jan 20 08:46:24 2020 +0000 +++ b/Motor/Motor.cpp Tue Jan 21 11:10:33 2020 +0000 @@ -7,23 +7,24 @@ { D1_.write(0); D2_.write(0); + pwm_.period_us(50); // 20kHz pwm_.write(0); } void MOTOR::Dir(dire mode, uint8_t pwm) { D1_.write((char)mode & 0x01); - D1_.write((char)mode & 0x02); - pwm_.write((float)(pwm / 100.0)); + D2_.write((char)mode & 0x02); + pwm_.write((float)(pwm / 255.0)); } void MOTOR::Dir(dire mode) { D1_.write((char)mode & 0x01); - D1_.write((char)mode & 0x02); + D2_.write((char)mode & 0x02); } void MOTOR::PWM(uint8_t pwm) { - pwm_.write((float)(pwm / 100.0)); + pwm_.write((float)(pwm / 255.0)); } \ No newline at end of file
--- a/Motor/Motor.h Mon Jan 20 08:46:24 2020 +0000 +++ b/Motor/Motor.h Tue Jan 21 11:10:33 2020 +0000 @@ -21,7 +21,7 @@ BRAKE */ /* pwm - pwm is 0 ~ 100(%) + pwm is 0 ~ 255(%) */ // durection and pwm set void Dir(dire mode, uint8_t pwm);
--- a/main.cpp Mon Jan 20 08:46:24 2020 +0000 +++ b/main.cpp Tue Jan 21 11:10:33 2020 +0000 @@ -9,15 +9,25 @@ MCP MCP(SDA, SCL, MCP_ADDRESS); +Serial pc(USBTX, USBRX); + XBEE::ControllerData *controller; int main() { + for(int i = 0; i < 16; i++) { + MCP.PinMode(i, INPUT_PULLUP); + } + while(1) { controller = XBEE::Controller::GetData(); + MCP.Update(); /* write ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ - - + //for(int i = 0; i < 16; i++) { + int a = MCP.Read(7); + pc.printf("%d",a); + //} + pc.printf("\n\r"); } }