ikarashiMDCslaveの改良(?)版 スピード制御の分解能が2byte
Dependencies: mbed SoftPWM MotorSMLAP
main.cpp
- Committer:
- WAT34
- Date:
- 2017-08-12
- Revision:
- 3:22c5eb74817f
- Parent:
- 2:de85eb142f32
- Parent:
- 1:d802a9793080
- Child:
- 4:2fb782334564
File content as of revision 3:22c5eb74817f:
#include "mbed.h" #include "motorsmlap.h" motorSmLap motor[]={ motorSmLap(PA_2,PB_15), // motorSmLap(,NULL), // motorSmLap(NULL,NULL), // motorSmLap(NULL,NULL) }; Serial serial(PB_10,PB_11); DigitalOut serialControl(PA_8); DigitalOut addrChecked(PB_13); DigitalOut headerRecieved(PB_14); Timeout timeout; uint8_t pointedMotor; bool estop =false,doubleHeader = false; BusIn addr(PB_4,PB_5,PB_6); DigitalOut beep(PB_7); int mode = SM; void forceStop() { for(int i = 0;i < 1; i++) { motor[i].setMotorSpeed(0); } } void callback(){ uint8_t data; data = serial.getc(); if(data == 255) //header { if(headerRecieved) doubleHeader =true; else if (doubleHeader) { estop = true; return; } addrChecked = false; headerRecieved = true; }else if(headerRecieved && !addrChecked) { doubleHeader=false; if((data>>4) == addr.read()) { addrChecked =true; pointedMotor = data%4; serialControl = 1; serial.putc(addr.read()); serialControl = 0; } }else if(headerRecieved && addrChecked && !estop) { doubleHeader = false; motor[pointedMotor].setMotorSpeed(data/126.0-1.0); addrChecked = false; headerRecieved = false; //timeout.attach(&forceStop,0.1); } } int main() { beep = 0; addrChecked=false,headerRecieved=false; motor[0].setMotorSpeed(0); serial.baud(115200); addr.mode(PullUp); serialControl = 0; serial.attach(&callback); while(1) { if(estop) forceStop(); beep = estop; //led = !led } }