for helge just for testing
Dependencies: Freetronics_16x2_LCD mbed-rtos mbed
Fork of Freetronics_16x2_LCD by
main.cpp@4:c0b34f33643f, 2016-08-14 (annotated)
- Committer:
- juergen0001
- Date:
- Sun Aug 14 09:53:28 2016 +0000
- Revision:
- 4:c0b34f33643f
- Parent:
- 2:4e0ed7dc6420
test for helge
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 2:4e0ed7dc6420 | 1 | /* Copyright (c) 2010-2011 mbed.org, MIT License |
screamer | 2:4e0ed7dc6420 | 2 | * |
screamer | 2:4e0ed7dc6420 | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy of this software |
screamer | 2:4e0ed7dc6420 | 4 | * and associated documentation files (the "Software"), to deal in the Software without |
screamer | 2:4e0ed7dc6420 | 5 | * restriction, including without limitation the rights to use, copy, modify, merge, publish, |
screamer | 2:4e0ed7dc6420 | 6 | * distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the |
screamer | 2:4e0ed7dc6420 | 7 | * Software is furnished to do so, subject to the following conditions: |
screamer | 2:4e0ed7dc6420 | 8 | * |
screamer | 2:4e0ed7dc6420 | 9 | * The above copyright notice and this permission notice shall be included in all copies or |
screamer | 2:4e0ed7dc6420 | 10 | * substantial portions of the Software. |
screamer | 2:4e0ed7dc6420 | 11 | * |
screamer | 2:4e0ed7dc6420 | 12 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING |
screamer | 2:4e0ed7dc6420 | 13 | * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
screamer | 2:4e0ed7dc6420 | 14 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
screamer | 2:4e0ed7dc6420 | 15 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
screamer | 2:4e0ed7dc6420 | 16 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
screamer | 2:4e0ed7dc6420 | 17 | */ |
screamer | 2:4e0ed7dc6420 | 18 | |
screamer | 0:4a0b425b71ff | 19 | #include "mbed.h" |
screamer | 0:4a0b425b71ff | 20 | #include "freetronicsLCDShield.h" |
juergen0001 | 4:c0b34f33643f | 21 | #include "rtos.h" |
screamer | 0:4a0b425b71ff | 22 | |
juergen0001 | 4:c0b34f33643f | 23 | #include "keys.h" |
juergen0001 | 4:c0b34f33643f | 24 | |
juergen0001 | 4:c0b34f33643f | 25 | float clock_s() { return us_ticker_read() / 1000000.0f; } |
juergen0001 | 4:c0b34f33643f | 26 | uint64_t clock_ms() { return us_ticker_read() / 1000; } |
juergen0001 | 4:c0b34f33643f | 27 | uint64_t clock_us() { return us_ticker_read(); } |
screamer | 0:4a0b425b71ff | 28 | |
juergen0001 | 4:c0b34f33643f | 29 | //freetronicsLCDShield::freetronicsLCDShield (PinName rs, PinName e, PinName d0, PinName d1, PinName d2, PinName d3, PinName bl, PinName a0) |
juergen0001 | 4:c0b34f33643f | 30 | //freetronicsLCDShield lcd(D12, D11, D5, D4, D3, D2, D9, A0); |
juergen0001 | 4:c0b34f33643f | 31 | freetronicsLCDShield lcd(D8, D9, D4, D5, D6, D7, D10, A0); |
juergen0001 | 4:c0b34f33643f | 32 | |
juergen0001 | 4:c0b34f33643f | 33 | DigitalOut led2(LED2); |
juergen0001 | 4:c0b34f33643f | 34 | Serial pc(SERIAL_TX, SERIAL_RX); |
juergen0001 | 4:c0b34f33643f | 35 | |
juergen0001 | 4:c0b34f33643f | 36 | void lcdThread (void const *arg) |
juergen0001 | 4:c0b34f33643f | 37 | { |
juergen0001 | 4:c0b34f33643f | 38 | char text[16]; |
screamer | 0:4a0b425b71ff | 39 | // turn on the back light (it's off by default) |
screamer | 0:4a0b425b71ff | 40 | lcd.setBackLight(true); |
screamer | 0:4a0b425b71ff | 41 | // print the first line and wait 3 sec |
juergen0001 | 4:c0b34f33643f | 42 | write_lcd(0,0,"schorschs"); |
screamer | 0:4a0b425b71ff | 43 | wait(3); |
screamer | 0:4a0b425b71ff | 44 | |
screamer | 0:4a0b425b71ff | 45 | // print the counter prefix; the number will be printed in the while loop |
juergen0001 | 4:c0b34f33643f | 46 | write_lcd(1, 0,"cnt:"); |
screamer | 0:4a0b425b71ff | 47 | int i=1; |
screamer | 0:4a0b425b71ff | 48 | while (i++) { |
juergen0001 | 4:c0b34f33643f | 49 | sprintf (text, "%4d", (i/100) % 10000); |
juergen0001 | 4:c0b34f33643f | 50 | write_lcd (1, 4, text); |
juergen0001 | 4:c0b34f33643f | 51 | Thread::wait(1); |
juergen0001 | 4:c0b34f33643f | 52 | } |
juergen0001 | 4:c0b34f33643f | 53 | } |
juergen0001 | 4:c0b34f33643f | 54 | /* |
juergen0001 | 4:c0b34f33643f | 55 | * thread safe positioning and writing |
juergen0001 | 4:c0b34f33643f | 56 | */ |
juergen0001 | 4:c0b34f33643f | 57 | Mutex lcdMtx; |
juergen0001 | 4:c0b34f33643f | 58 | void write_lcd (uint8_t x, uint8_t y, char *txt) |
juergen0001 | 4:c0b34f33643f | 59 | { |
juergen0001 | 4:c0b34f33643f | 60 | lcdMtx.lock(0); |
juergen0001 | 4:c0b34f33643f | 61 | lcd.setCursorPosition(x, y); |
juergen0001 | 4:c0b34f33643f | 62 | lcd.printf("%s", txt); |
juergen0001 | 4:c0b34f33643f | 63 | lcdMtx.unlock(); |
juergen0001 | 4:c0b34f33643f | 64 | } |
juergen0001 | 4:c0b34f33643f | 65 | |
juergen0001 | 4:c0b34f33643f | 66 | /* |
juergen0001 | 4:c0b34f33643f | 67 | * LED blinkt zufaellig |
juergen0001 | 4:c0b34f33643f | 68 | */ |
juergen0001 | 4:c0b34f33643f | 69 | void ledThread (void const *arg) |
juergen0001 | 4:c0b34f33643f | 70 | { |
juergen0001 | 4:c0b34f33643f | 71 | uint8_t ison = 0; |
juergen0001 | 4:c0b34f33643f | 72 | while (1) { |
juergen0001 | 4:c0b34f33643f | 73 | |
juergen0001 | 4:c0b34f33643f | 74 | Thread::wait(1); |
juergen0001 | 4:c0b34f33643f | 75 | if ((clock_ms() % 100) == 1) |
juergen0001 | 4:c0b34f33643f | 76 | ison ^= 1; |
juergen0001 | 4:c0b34f33643f | 77 | led2 = ison; |
juergen0001 | 4:c0b34f33643f | 78 | //pc.printf("LED%d\n", cnt++); |
screamer | 0:4a0b425b71ff | 79 | } |
screamer | 0:4a0b425b71ff | 80 | } |
juergen0001 | 4:c0b34f33643f | 81 | |
juergen0001 | 4:c0b34f33643f | 82 | #define VOLTAGE_KEY_0 0.0f //right |
juergen0001 | 4:c0b34f33643f | 83 | #define VOLTAGE_KEY_1 0.125f //up |
juergen0001 | 4:c0b34f33643f | 84 | #define VOLTAGE_KEY_2 0.277f //dn |
juergen0001 | 4:c0b34f33643f | 85 | #define VOLTAGE_KEY_3 0.411f //left |
juergen0001 | 4:c0b34f33643f | 86 | #define VOLTAGE_KEY_4 0.578f //select |
juergen0001 | 4:c0b34f33643f | 87 | #define VOLTAGE_KEY_IDLE 0.760f |
juergen0001 | 4:c0b34f33643f | 88 | static void keypressed_callback (key_t *k) |
juergen0001 | 4:c0b34f33643f | 89 | { |
juergen0001 | 4:c0b34f33643f | 90 | if (NULL == k) |
juergen0001 | 4:c0b34f33643f | 91 | return; |
juergen0001 | 4:c0b34f33643f | 92 | pc.printf ("%s pressed\n", k->name); |
juergen0001 | 4:c0b34f33643f | 93 | write_lcd (1, 10, k->name); |
juergen0001 | 4:c0b34f33643f | 94 | } |
juergen0001 | 4:c0b34f33643f | 95 | static void keyreleased_callback (key_t *k) |
juergen0001 | 4:c0b34f33643f | 96 | { |
juergen0001 | 4:c0b34f33643f | 97 | if (NULL == k) |
juergen0001 | 4:c0b34f33643f | 98 | return; |
juergen0001 | 4:c0b34f33643f | 99 | pc.printf ("%s released\n", k->name); |
juergen0001 | 4:c0b34f33643f | 100 | write_lcd (1, 10, " "); |
juergen0001 | 4:c0b34f33643f | 101 | } |
juergen0001 | 4:c0b34f33643f | 102 | |
juergen0001 | 4:c0b34f33643f | 103 | static void init_keys (void) |
juergen0001 | 4:c0b34f33643f | 104 | { |
juergen0001 | 4:c0b34f33643f | 105 | keys_init( |
juergen0001 | 4:c0b34f33643f | 106 | A0, 20, (float [6]){ |
juergen0001 | 4:c0b34f33643f | 107 | VOLTAGE_KEY_0, |
juergen0001 | 4:c0b34f33643f | 108 | VOLTAGE_KEY_1, |
juergen0001 | 4:c0b34f33643f | 109 | VOLTAGE_KEY_2, |
juergen0001 | 4:c0b34f33643f | 110 | VOLTAGE_KEY_3, |
juergen0001 | 4:c0b34f33643f | 111 | VOLTAGE_KEY_4, |
juergen0001 | 4:c0b34f33643f | 112 | VOLTAGE_KEY_IDLE |
juergen0001 | 4:c0b34f33643f | 113 | } |
juergen0001 | 4:c0b34f33643f | 114 | ); |
juergen0001 | 4:c0b34f33643f | 115 | register_key_callback (0, KEYCB_PRESS, keypressed_callback); |
juergen0001 | 4:c0b34f33643f | 116 | register_key_callback (1, KEYCB_PRESS, keypressed_callback); |
juergen0001 | 4:c0b34f33643f | 117 | register_key_callback (2, KEYCB_PRESS, keypressed_callback); |
juergen0001 | 4:c0b34f33643f | 118 | register_key_callback (3, KEYCB_PRESS, keypressed_callback); |
juergen0001 | 4:c0b34f33643f | 119 | register_key_callback (4, KEYCB_PRESS, keypressed_callback); |
juergen0001 | 4:c0b34f33643f | 120 | register_key_callback (0, KEYCB_RELEASE, keyreleased_callback); |
juergen0001 | 4:c0b34f33643f | 121 | register_key_callback (1, KEYCB_RELEASE, keyreleased_callback); |
juergen0001 | 4:c0b34f33643f | 122 | register_key_callback (2, KEYCB_RELEASE, keyreleased_callback); |
juergen0001 | 4:c0b34f33643f | 123 | register_key_callback (3, KEYCB_RELEASE, keyreleased_callback); |
juergen0001 | 4:c0b34f33643f | 124 | register_key_callback (4, KEYCB_RELEASE, keyreleased_callback); |
juergen0001 | 4:c0b34f33643f | 125 | } |
juergen0001 | 4:c0b34f33643f | 126 | int main() { |
juergen0001 | 4:c0b34f33643f | 127 | init_keys(); |
juergen0001 | 4:c0b34f33643f | 128 | |
juergen0001 | 4:c0b34f33643f | 129 | Thread lcdT(lcdThread); |
juergen0001 | 4:c0b34f33643f | 130 | Thread ledT(ledThread); |
juergen0001 | 4:c0b34f33643f | 131 | |
juergen0001 | 4:c0b34f33643f | 132 | lcdT.join(); |
juergen0001 | 4:c0b34f33643f | 133 | ledT.join(); |
juergen0001 | 4:c0b34f33643f | 134 | } |