Controlling the servo expansion board at https://hackaday.io/project/157951-stm32-servo-expansion-board
Dependencies: SerialTerm Servo WiiNunchuck
Fork of mbed-os-example-mbed5-blinky by
Revision 67:6e183e1e9bcd, committed 2018-05-20
- Comitter:
- villetiukuvaara
- Date:
- Sun May 20 02:56:49 2018 +0000
- Parent:
- 66:e408ae75c632
- Commit message:
- Testing out servo control.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SerialTerm.lib Sun May 20 02:56:49 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Tobias/code/SerialTerm/#07da1704cfd8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Servo.lib Sun May 20 02:56:49 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/villetiukuvaara/code/Servo/#9a48389dcf50
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WiiNunchuck.lib Sun May 20 02:56:49 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/knaka/code/WiiNunchuck/#9652195745e8
--- a/main.cpp Thu May 10 05:15:08 2018 +0100 +++ b/main.cpp Sun May 20 02:56:49 2018 +0000 @@ -1,12 +1,151 @@ #include "mbed.h" +#include "WiiNunchuck.h" +#include "Servo.h" + +#define LED1 PC_10 +#define LED2 PC_12 +#define LED3 PC_11 + +#define SERVO1 PA_6 +#define SERVO2 PA_7 +#define SERVO3 PB_11 +#define SERVO4 PB_1 +#define SERVO5 PB_10 +#define SERVO6 PB_3 + +//#define PWM_PERIOD 20 // ms +//#define PULSE_MIN 500.0 // us +//#define PULSE_MAX 2500.0 // us + + +#define SWITCH1 PC_8 +#define SWITCH2 PC_6 + +#define SDA PC_1 +#define SCL PC_0 + +#define POW_EN PA_4 + +WiiNunchuck nchk(SDA, SCL); +Serial pc(USBTX, USBRX); DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalInOut pow_en(POW_EN); + +InterruptIn switch1(SWITCH1); +InterruptIn switch2(SWITCH2); + +Servo servo_vert(SERVO1); +Servo servo_horz(SERVO2); +Servo servo_rot(SERVO4); +Servo servo_grab(SERVO5); + +int accx, accy, accz; +unsigned char joyx, joyy; +bool buttonx, buttonz; + +void init(); +void switch1_irq(); +void switch2_irq(); +void enable_servos(bool on); +void servo_angle(PwmOut *servo, float angle); + +bool servos_enabled = false; + // main() runs in its own thread in the OS -int main() { - while (true) { - led1 = !led1; - wait(0.5); +int main() +{ + init(); + + while(1) + { + char key = pc.getc(); + if(key==0x1B) + { //If the keypress was an arrow key + key = pc.getc(); //Check again! + if (key == 0x5B) + { + key = pc.getc(); + switch(key) { //Check to see which arrow key... + case 0x41: //It was the UP arrow key... + servo_vert = servo_vert + 0.01; + pc.printf("vert %f", servo_vert.read()); + break; + case 0x42: //It was the DOWN arrow key... + servo_vert = servo_vert - 0.01; + pc.printf("vert %f", servo_vert.read()); + break; + case 0x43: //It was the RIGHT arrow key... + servo_rot = servo_rot + 0.01; + pc.printf("\n\r RIGHT!"); + break; + case 0x44: //It was the LEFT arrow key... + servo_rot = servo_rot - 0.01; + pc.printf("\n\r LEFT!"); + break; + } + } + } + + wait(0.01); } } +void init() +{ + pow_en.output(); + pow_en.mode(OpenDrain); + enable_servos(false); + + servo_vert.calibrate(0.0007, 90) + + servo_vert = 0.5; + servo_horz = 0.5; + servo_rot = 0.5; + servo_grab = 0.5; + /*servo_horz.position(90); + servo_rot.position(90); + servo_grab.position(90);*/ + + switch1.mode(PullUp); + switch1.fall(&switch1_irq); + switch2.mode(PullUp); + switch2.fall(&switch2_irq); + + //led1 = 1; +} + +void switch1_irq() +{ + if(servos_enabled) + enable_servos(false); + else + enable_servos(true); +} + +void switch2_irq() +{ +} + +void enable_servos(bool on) +{ + if(on) + { + pow_en.output(); + pow_en = 0; + servos_enabled = true; + led2 = 1; + } + else + { + pow_en = 1; + //pow_en.mode(OpenDrain); + pow_en.input(); + servos_enabled = false; + led2 = 0; + } +} +