![](/media/cache/profiles/LogoEMCU_EU_2.png.50x50_q85.jpg)
For make this example you must use a NUCLEO board (we tested this example on NUCLEO-F411RE) and connect it the components below: A potentiometer - Connect it to 3,3v and GND and the central pin of the potentiometer must connect to A5 (PA_10). A RC motor - Connect the BLACK wire to GND, RED wire to 5v and ORANGE wire to D2 (PC_0).
Revision 0:2a4e076aeefa, committed 2017-12-17
- Comitter:
- emcu
- Date:
- Sun Dec 17 22:35:50 2017 +0000
- Commit message:
- Simple test for RC motor.
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 2a4e076aeefa main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Dec 17 22:35:50 2017 +0000 @@ -0,0 +1,178 @@ +#include "mbed.h" + +/* + By www.emcu.eu + Date December 2018 + Simple test for RC motor + Version 1.0 + Tested on the NUCLEO-F411RE and MG996R RC motor + + For make this example you must use a NUCLEO board (we tested this example on + NUCLEO-F411RE) and connect it the components below: + A potentiometer - Connect it to 3,3v and GND and the central pin of the + potentiometer must connect to A5 (PA_10). + A RC motor - Connect the BLACK wire to GND, RED wire to 5v and + ORANGE wire to D2 (PC_0). + + For more info see here: + http://www.emcu.eu/test-board-for-rc-motors + + For use this example turn the potentiometer all to right and you must see the motor that move to right and a LED that flash. + If you move the potentiometer all to left you must see the motor that move left. + If you move the potentiometer in the middle position the RC motor is in stop and the LED flash fast. + If the potentiometer is in the middle and you press Blue button you start an automatic sequence. + + For see the message from the SW open TeraTerm (terminal emulation) and configure it to: 8N1 + + Tested on Servo Motor: + MG996R - http://www.electronicoscaldas.com/datasheet/MG996R_Tower-Pro.pdf + + RED - + Vcc from 4,5 to 7,2V + BLACK - GND + ORANGE - PWM + + Duty - example: 1.9 (mS) + \ / + \/ + __ +__| |_____________ + ... 20mS...... + + For rotate to right use value 1 for Duty + For rotate to left use value 5 for Duty + +*/ + +AnalogIn adc_chA5(PC_0); +DigitalOut Drive(PA_10); +DigitalOut led(LED1); +DigitalIn mybutton(USER_BUTTON); + +#define Right 1 // Move to Right -> DESTRA or DX +#define Left 5 // Move to LEFT <- SINISTRA or SX + +void Move(double); +void Seq1(int n); +void Seq2(void); + +int main() +{ + float Pot = 0; + int Movimento = 1; + + printf("\n\r STM32 RC motor test ver.1.0\n\r"); + + Pot=adc_chA5; + + while(1) + { + led = !led; + wait(0.1); + + Pot = adc_chA5; + Pot = Pot * 3300; // Change the value to be in the 0 to 3300 range + Movimento = Pot/1000; + printf(" 1 - Val.Pot %.0f mV - Movimento %d \n\r",Pot,Movimento); + + if(Pot>=1000 & Pot<=2900) + { + printf("\n\r *** RC motor stopped - Press Blue button for automatic sequence ***\n\r"); + led = 0; + if (mybutton == 0) + Seq2(); + } + else + { + if (Movimento <= 1) + Movimento = 1; + else + Movimento = 5; + printf(" 2 - Val.Pot %.0f mV - Movimento %d \n\r",Pot,Movimento); + Seq1(Movimento); + wait(1); + } + + wait(0.2); + } +} + +void Move(double ON) +{ +Drive=1; +wait_ms(ON); +Drive=0; +wait_ms(25); +} + + + +void Seq1(int n) +{ + if (n<=1) + { + n=5; + printf("\n\rMove to RIGHT ->\n\r"); + } + else + { + n=1; + printf("\n\rMove to LEFT <-\n\r"); + } + Move(n); +} + +void Seq2(void) +{ + int n=0; + + printf("\n\rSequ n.2\n\r"); + led = 1; + + printf("Move to 20 times to <-\n\r"); + for(n=0; n<20; n++) + Move(Left); + wait(0.3); + printf("Move to 20 times to ->\n\r"); + for(n=0; n<20; n++) + Move(Right); + wait(0.3); + + printf("Move to 8 times to <-\n\r"); + for(n=0; n<8; n++) + Move(Left); + wait(0.3); + printf("Move to 5 times to ->\n\r"); + for(n=0; n<5; n++) + Move(Right); + wait(0.3); + + printf("Move to 3 times to <-\n\r"); + for(n=0; n<3; n++) + Move(Left); + wait(0.3); + printf("Move to 3 times to ->\n\r"); + for(n=0; n<3; n++) + Move(Right); + wait(0.3); + + printf("Move to 2 times to <-\n\r"); + for(n=0; n<2; n++) + Move(Left); + wait(0.3); + printf("Move to 2 times to ->\n\r"); + for(n=0; n<2; n++) + Move(Right); + wait(0.3); + + printf("Move to 1 times to <-\n\r"); + for(n=0; n<1; n++) + Move(Left); + wait(0.3); + printf("Move to 1 times to ->\n\r"); + for(n=0; n<1; n++) + Move(Right); + wait(0.3); + + printf("END - Seq n.2\n\r"); + led = 0; +}
diff -r 000000000000 -r 2a4e076aeefa mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Dec 17 22:35:50 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/e7ca05fa8600 \ No newline at end of file