Simple program to test a steppermotor. Min/maxspeed, accelleration, distance and steps/m can be changed while the program is running for quick adjustment.
Fork of cmsis_rtos_queue by
Diff: main.cpp
- Revision:
- 4:09c35ecb3218
- Parent:
- 3:08c16b8a78bf
- Child:
- 5:63fe92075b71
--- a/main.cpp Sun Jun 15 10:34:39 2014 +0000 +++ b/main.cpp Sun Jun 15 20:57:59 2014 +0000 @@ -19,8 +19,10 @@ osMessageQDef(queue, 16, stepcmd); osMessageQId queue; +int qcnt = 0; -void read_thread (void const *args) { +void read_thread (void const *args) +{ while (true) { osEvent evt = osMessageGet(queue, 0); if (evt.status == osEventMessage) { @@ -30,39 +32,48 @@ osDelay(100); StepLED = 0; osPoolFree(cmdpool, cmd); + qcnt--; } else { // assume no info available osDelay(100); } - osDelay(100); + osDelay(2000); } } osThreadDef(read_thread, osPriorityNormal, DEFAULT_STACK_SIZE); -int main (void) { +int main (void) +{ cmdpool = osPoolCreate(osPool(cmdpool)); queue = osMessageCreate(osMessageQ(queue), NULL); - + osThreadCreate(osThread(read_thread), NULL); bool mydir = true; + while (true) { const float startspeed = 0.05; // speed in m/s const float maxspeed = 2; // speed in m/s const float accel = 2; // accelleration in m/s^2 const float distance = 1.26; // maximum distance on the rod in m const int steps = 36000; // steps per meter - stepcmd *cmd = (stepcmd*)osPoolAlloc(cmdpool); - cmd -> minspeed = int(startspeed * steps); - cmd -> maxspeed = int(maxspeed * steps); - cmd -> accel = int(accel * steps); - cmd -> steps = int(distance * steps); - cmd -> speed = cmd -> minspeed; - cmd -> dir = mydir; - mydir = !mydir; - osStatus res = osMessagePut(queue, (uint32_t)cmd, 0); - while (res != osOK) { - osDelay(500); - res = osMessagePut(queue, (uint32_t)cmd, 0); + if (qcnt < 15) { + stepcmd *cmd = (stepcmd*)osPoolAlloc(cmdpool); + cmd -> minspeed = int(startspeed * steps); + cmd -> maxspeed = int(maxspeed * steps); + cmd -> accel = int(accel * steps); + cmd -> steps = int(distance * steps); + cmd -> speed = cmd -> minspeed; + cmd -> dir = mydir; + mydir = !mydir; + + osStatus res = osMessagePut(queue, (uint32_t)cmd, 0); + while (res != osOK) { + osDelay(500); + res = osMessagePut(queue, (uint32_t)cmd, 0); + } + printf("Storage succeeded %d\n\r", ++qcnt); + } else { + printf("Storage full\n\r"); } osDelay(1000); CmdLED = ! CmdLED;