for helge just for testing

Dependencies:   Freetronics_16x2_LCD mbed-rtos mbed

Fork of Freetronics_16x2_LCD by Shields

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?

UserRevisionLine numberNew 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 }