Code for a quadrapod robot.

Dependencies:   ArthropodIK MMA8451Q MODSERIAL TSI TextLCD mbed-rtos mbed PolyServo

Committer:
ikrase
Date:
Wed Jun 24 08:27:24 2015 +0000
Revision:
2:1f7ee9f3276b
Parent:
0:838403674a8f
Child:
3:9916f013d978
Begun implementing IK. ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ikrase 0:838403674a8f 1 #include "mbed.h"
ikrase 0:838403674a8f 2 #include "rtos.h"
ikrase 0:838403674a8f 3 #include "MODSERIAL.h"
ikrase 0:838403674a8f 4
ikrase 0:838403674a8f 5 #include "quadrapod_defs.h" //Includes pins and stuff
ikrase 2:1f7ee9f3276b 6 #include "ArthropodIK.h" // IK solver based on Oscar Liang.
ikrase 0:838403674a8f 7
ikrase 0:838403674a8f 8 /**************************************************************************
ikrase 0:838403674a8f 9 This is the Quadrupod control software.
ikrase 0:838403674a8f 10 ***************************************************************************/
ikrase 0:838403674a8f 11
ikrase 0:838403674a8f 12
ikrase 0:838403674a8f 13 MODSERIAL serial(USBTX, USBRX);
ikrase 0:838403674a8f 14
ikrase 0:838403674a8f 15 DigitalOut led_green(LED_GREEN);
ikrase 0:838403674a8f 16 DigitalOut led_red(LED_RED);
ikrase 0:838403674a8f 17 PwmOut led_blue(LED_BLUE);
ikrase 0:838403674a8f 18
ikrase 0:838403674a8f 19 void led_fade_thread(void const *args) {
ikrase 0:838403674a8f 20 // Note that this function doesn't terminate, which is fine since it runs in
ikrase 0:838403674a8f 21 // a thread.
ikrase 0:838403674a8f 22 while (1) {
ikrase 0:838403674a8f 23 // Since the internal LED is active low, inert the duty cycle.
ikrase 0:838403674a8f 24 led_blue.write(1 - 0);
ikrase 0:838403674a8f 25 Thread::wait(250);
ikrase 0:838403674a8f 26 led_blue.write(1 - 0.25);
ikrase 0:838403674a8f 27 Thread::wait(250);
ikrase 0:838403674a8f 28 led_blue.write(1 - 0.5);
ikrase 0:838403674a8f 29 Thread::wait(250);
ikrase 0:838403674a8f 30 led_blue.write(1 - 0.75);
ikrase 0:838403674a8f 31 Thread::wait(250);
ikrase 0:838403674a8f 32 }
ikrase 0:838403674a8f 33 }
ikrase 0:838403674a8f 34
ikrase 0:838403674a8f 35 void led_blink_periodic(void const *args) {
ikrase 0:838403674a8f 36 // Toggle the red LED when this function is called.
ikrase 0:838403674a8f 37 led_red = !led_red;
ikrase 0:838403674a8f 38 }
ikrase 0:838403674a8f 39
ikrase 0:838403674a8f 40 int main() {
ikrase 0:838403674a8f 41 // It's always nice to know what version is deployed.
ikrase 0:838403674a8f 42 serial.printf("Built " __DATE__ " " __TIME__ "\r\n");
ikrase 0:838403674a8f 43
ikrase 0:838403674a8f 44 // Quick blink on startup.
ikrase 0:838403674a8f 45 led_green = 0; // Note that the internal LED is active low.
ikrase 0:838403674a8f 46 wait(0.25);
ikrase 0:838403674a8f 47 led_green = 1;
ikrase 0:838403674a8f 48 wait(0.25);
ikrase 0:838403674a8f 49
ikrase 0:838403674a8f 50 // Mandatory "Hello, world!".
ikrase 0:838403674a8f 51 serial.printf("Hello, world!\r\n");
ikrase 0:838403674a8f 52
ikrase 0:838403674a8f 53 // Start a thread running led_fade_thread().
ikrase 0:838403674a8f 54 Thread ledFadeThread(led_fade_thread);
ikrase 0:838403674a8f 55
ikrase 0:838403674a8f 56 // Set a timer to periodically call led_blink_periodic().
ikrase 0:838403674a8f 57 RtosTimer ledBlinkTimer(led_blink_periodic);
ikrase 0:838403674a8f 58 ledBlinkTimer.start(1000);
ikrase 0:838403674a8f 59
ikrase 0:838403674a8f 60 // Work is done in the threads, so main() can sleep.
ikrase 0:838403674a8f 61 Thread::wait(osWaitForever);
ikrase 0:838403674a8f 62 }