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.
main.cpp@0:9f2b4b5956c0, 2022-03-17 (annotated)
- Committer:
- cspista
- Date:
- Thu Mar 17 13:03:30 2022 +0000
- Revision:
- 0:9f2b4b5956c0
Final version
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cspista | 0:9f2b4b5956c0 | 1 | #include "mbed.h" |
| cspista | 0:9f2b4b5956c0 | 2 | #include "rtos.h" |
| cspista | 0:9f2b4b5956c0 | 3 | PwmOut rled(D3); |
| cspista | 0:9f2b4b5956c0 | 4 | PwmOut gled(D5); |
| cspista | 0:9f2b4b5956c0 | 5 | PwmOut bled(D6); |
| cspista | 0:9f2b4b5956c0 | 6 | DigitalOut led_common(D4); |
| cspista | 0:9f2b4b5956c0 | 7 | |
| cspista | 0:9f2b4b5956c0 | 8 | typedef struct { |
| cspista | 0:9f2b4b5956c0 | 9 | float red; |
| cspista | 0:9f2b4b5956c0 | 10 | float green; |
| cspista | 0:9f2b4b5956c0 | 11 | float blue; |
| cspista | 0:9f2b4b5956c0 | 12 | } message_t; |
| cspista | 0:9f2b4b5956c0 | 13 | |
| cspista | 0:9f2b4b5956c0 | 14 | Mail <message_t,4> mbox; //Mailbox for 4 messages |
| cspista | 0:9f2b4b5956c0 | 15 | |
| cspista | 0:9f2b4b5956c0 | 16 | void led_thread(void const *argument) { |
| cspista | 0:9f2b4b5956c0 | 17 | rled.period_ms(20); //Set period to 20 ms |
| cspista | 0:9f2b4b5956c0 | 18 | rled.write(1.0f); //Initialize to 0% duty cycle |
| cspista | 0:9f2b4b5956c0 | 19 | gled.period_ms(20); //Set period to 20 ms |
| cspista | 0:9f2b4b5956c0 | 20 | gled.write(1.0f); //Initialize to 0% duty cycle |
| cspista | 0:9f2b4b5956c0 | 21 | bled.period_ms(20); //Set period to 20 ms |
| cspista | 0:9f2b4b5956c0 | 22 | bled.write(1.0f); //Initialize to 0% duty cycle |
| cspista | 0:9f2b4b5956c0 | 23 | while (true) { |
| cspista | 0:9f2b4b5956c0 | 24 | osEvent evt = mbox.get(); //Wait for a message |
| cspista | 0:9f2b4b5956c0 | 25 | if(evt.status == osEventMail) { |
| cspista | 0:9f2b4b5956c0 | 26 | message_t *mymessage = (message_t*)evt.value.p; |
| cspista | 0:9f2b4b5956c0 | 27 | rled = 1.0f - mymessage->red; |
| cspista | 0:9f2b4b5956c0 | 28 | gled = 1.0f - mymessage->green; |
| cspista | 0:9f2b4b5956c0 | 29 | bled = 1.0f - mymessage->blue; |
| cspista | 0:9f2b4b5956c0 | 30 | mbox.free(mymessage); //Free up memory |
| cspista | 0:9f2b4b5956c0 | 31 | } |
| cspista | 0:9f2b4b5956c0 | 32 | } |
| cspista | 0:9f2b4b5956c0 | 33 | } |
| cspista | 0:9f2b4b5956c0 | 34 | |
| cspista | 0:9f2b4b5956c0 | 35 | float frand(void) { |
| cspista | 0:9f2b4b5956c0 | 36 | int32_t rv = 0x8000 -(rand()&0xFFFF); |
| cspista | 0:9f2b4b5956c0 | 37 | return (rv*rv/1073741824.0f); |
| cspista | 0:9f2b4b5956c0 | 38 | } |
| cspista | 0:9f2b4b5956c0 | 39 | |
| cspista | 0:9f2b4b5956c0 | 40 | int main (void) { |
| cspista | 0:9f2b4b5956c0 | 41 | float RGB1[3]; |
| cspista | 0:9f2b4b5956c0 | 42 | float RGB2[3]; |
| cspista | 0:9f2b4b5956c0 | 43 | float INC[3]; |
| cspista | 0:9f2b4b5956c0 | 44 | led_common = 1; // for commono anode... |
| cspista | 0:9f2b4b5956c0 | 45 | Thread thread2(led_thread); |
| cspista | 0:9f2b4b5956c0 | 46 | //--- Create a random color --------------------- |
| cspista | 0:9f2b4b5956c0 | 47 | for (int x=0; x<3; x++) { |
| cspista | 0:9f2b4b5956c0 | 48 | RGB1[x] = frand(); |
| cspista | 0:9f2b4b5956c0 | 49 | } |
| cspista | 0:9f2b4b5956c0 | 50 | |
| cspista | 0:9f2b4b5956c0 | 51 | while (true) { |
| cspista | 0:9f2b4b5956c0 | 52 | //--- Create a new random color ----------------- |
| cspista | 0:9f2b4b5956c0 | 53 | for (int x=0; x<3; x++) { |
| cspista | 0:9f2b4b5956c0 | 54 | RGB2[x] = frand(); |
| cspista | 0:9f2b4b5956c0 | 55 | } |
| cspista | 0:9f2b4b5956c0 | 56 | //--- Determine increments to go from color 1 to color 2 in 25 steps |
| cspista | 0:9f2b4b5956c0 | 57 | for (int x=0; x<3; x++) { |
| cspista | 0:9f2b4b5956c0 | 58 | INC[x] = (RGB1[x] - RGB2[x]) / 25; |
| cspista | 0:9f2b4b5956c0 | 59 | } |
| cspista | 0:9f2b4b5956c0 | 60 | //--- Send color codes to thread2 --------------- |
| cspista | 0:9f2b4b5956c0 | 61 | for (int s=0; s<25; s++) { |
| cspista | 0:9f2b4b5956c0 | 62 | message_t *message = mbox.alloc(); //Allocate memory |
| cspista | 0:9f2b4b5956c0 | 63 | message->red = RGB1[0]; |
| cspista | 0:9f2b4b5956c0 | 64 | message->green = RGB1[1]; |
| cspista | 0:9f2b4b5956c0 | 65 | message->blue = RGB1[2]; |
| cspista | 0:9f2b4b5956c0 | 66 | mbox.put(message); //Send data as message |
| cspista | 0:9f2b4b5956c0 | 67 | Thread::wait(100); |
| cspista | 0:9f2b4b5956c0 | 68 | for (int x=0; x<3; x++) { |
| cspista | 0:9f2b4b5956c0 | 69 | RGB1[x] -= INC[x]; //Approach to second colour |
| cspista | 0:9f2b4b5956c0 | 70 | } |
| cspista | 0:9f2b4b5956c0 | 71 | } |
| cspista | 0:9f2b4b5956c0 | 72 | } |
| cspista | 0:9f2b4b5956c0 | 73 | } |