Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ArthropodIK MMA8451Q MODSERIAL TSI TextLCD mbed-rtos mbed
Fork of Quadrapod by
main.cpp@2:1f7ee9f3276b, 2015-06-24 (annotated)
- 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?
| User | Revision | Line number | New 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 | } | 
