RoboCup Base Station
Dependencies: mbed mbed-rtos Wireless Drivers
main.cpp@0:a606cf2249ad, 2014-12-31 (annotated)
- Committer:
- jjones646
- Date:
- Wed Dec 31 02:45:31 2014 +0000
- Revision:
- 0:a606cf2249ad
- Child:
- 1:e5373c63f642
initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jjones646 | 0:a606cf2249ad | 1 | // Cycle through a 7-segment LCD display |
jjones646 | 0:a606cf2249ad | 2 | |
jjones646 | 0:a606cf2249ad | 3 | #include "mbed.h" |
jjones646 | 0:a606cf2249ad | 4 | |
jjones646 | 0:a606cf2249ad | 5 | // Outputs used as input values to the 7-segment binary decoder |
jjones646 | 0:a606cf2249ad | 6 | DigitalOut signal[4] = {p17, p18, p19, p20}; |
jjones646 | 0:a606cf2249ad | 7 | |
jjones646 | 0:a606cf2249ad | 8 | // For latching the 7 segment led's output |
jjones646 | 0:a606cf2249ad | 9 | DigitalOut latch(p16); |
jjones646 | 0:a606cf2249ad | 10 | |
jjones646 | 0:a606cf2249ad | 11 | // To show that the mbed is running |
jjones646 | 0:a606cf2249ad | 12 | DigitalOut status_led(LED1); |
jjones646 | 0:a606cf2249ad | 13 | |
jjones646 | 0:a606cf2249ad | 14 | // Function for writing a number to the 7-segment display |
jjones646 | 0:a606cf2249ad | 15 | void writeSegment(uint8_t val) |
jjones646 | 0:a606cf2249ad | 16 | { |
jjones646 | 0:a606cf2249ad | 17 | // write out the new value |
jjones646 | 0:a606cf2249ad | 18 | for (int i=0; i<4; i++) |
jjones646 | 0:a606cf2249ad | 19 | signal[i] = ((1<<i) & (val)) & 0x0F; |
jjones646 | 0:a606cf2249ad | 20 | |
jjones646 | 0:a606cf2249ad | 21 | // latch the value |
jjones646 | 0:a606cf2249ad | 22 | for (int i=0; i<2; i++) |
jjones646 | 0:a606cf2249ad | 23 | latch = !latch; |
jjones646 | 0:a606cf2249ad | 24 | } |
jjones646 | 0:a606cf2249ad | 25 | |
jjones646 | 0:a606cf2249ad | 26 | int main() |
jjones646 | 0:a606cf2249ad | 27 | { |
jjones646 | 0:a606cf2249ad | 28 | latch = 0; // initialize the latch pin for the CD4511B decoder |
jjones646 | 0:a606cf2249ad | 29 | status_led = 0; // initialize & turn off led for startup operations |
jjones646 | 0:a606cf2249ad | 30 | |
jjones646 | 0:a606cf2249ad | 31 | uint8_t channel; // limit to 4 bits (0x00 to 0x0F) |
jjones646 | 0:a606cf2249ad | 32 | channel = 8; // light up all of the 7-segment's segments at startup - allows for the user to detect if there's a problem |
jjones646 | 0:a606cf2249ad | 33 | writeSegment(channel); |
jjones646 | 0:a606cf2249ad | 34 | wait(1.0); // wait 2 seconds to ensure user sees the startup operation |
jjones646 | 0:a606cf2249ad | 35 | |
jjones646 | 0:a606cf2249ad | 36 | channel = 0; // start back over at 0 |
jjones646 | 0:a606cf2249ad | 37 | |
jjones646 | 0:a606cf2249ad | 38 | while(1) { |
jjones646 | 0:a606cf2249ad | 39 | // send numerical value to 7-segment & hold for a while |
jjones646 | 0:a606cf2249ad | 40 | writeSegment(channel++); |
jjones646 | 0:a606cf2249ad | 41 | wait(0.3); |
jjones646 | 0:a606cf2249ad | 42 | status_led = !status_led; |
jjones646 | 0:a606cf2249ad | 43 | |
jjones646 | 0:a606cf2249ad | 44 | // wait again just so that the status led and segment are out of sync |
jjones646 | 0:a606cf2249ad | 45 | wait(0.2); |
jjones646 | 0:a606cf2249ad | 46 | |
jjones646 | 0:a606cf2249ad | 47 | // reset value if too high |
jjones646 | 0:a606cf2249ad | 48 | channel = channel > 9 ? 0 : channel; |
jjones646 | 0:a606cf2249ad | 49 | } |
jjones646 | 0:a606cf2249ad | 50 | } |