![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
s
Dependencies: LM75B C12832_lcd LCD_fonts
main.cpp@0:e4434d058310, 2019-11-19 (annotated)
- Committer:
- Lukas_Adlboller
- Date:
- Tue Nov 19 09:07:36 2019 +0000
- Revision:
- 0:e4434d058310
- Child:
- 1:133129bd3d45
Super Cool Programm
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Lukas_Adlboller | 0:e4434d058310 | 1 | #include "mbed.h" |
Lukas_Adlboller | 0:e4434d058310 | 2 | #include "LM75B.h" |
Lukas_Adlboller | 0:e4434d058310 | 3 | #include "C12832_lcd.h" |
Lukas_Adlboller | 0:e4434d058310 | 4 | #include "MMA7660.h" |
Lukas_Adlboller | 0:e4434d058310 | 5 | |
Lukas_Adlboller | 0:e4434d058310 | 6 | DigitalOut startLED(LED3); |
Lukas_Adlboller | 0:e4434d058310 | 7 | DigitalOut rgbLED[] = {DigitalOut(p23), DigitalOut(p24), DigitalOut(p25)}; |
Lukas_Adlboller | 0:e4434d058310 | 8 | InterruptIn fireInterrupt(p14); |
Lukas_Adlboller | 0:e4434d058310 | 9 | Timeout startChecker; |
Lukas_Adlboller | 0:e4434d058310 | 10 | LM75B tempSensor(p28, p27); |
Lukas_Adlboller | 0:e4434d058310 | 11 | MMA7660 MMA(p28, p27); |
Lukas_Adlboller | 0:e4434d058310 | 12 | C12832_LCD lcdDisplay; |
Lukas_Adlboller | 0:e4434d058310 | 13 | Thread temp_thread; |
Lukas_Adlboller | 0:e4434d058310 | 14 | Thread gyro_thread; |
Lukas_Adlboller | 0:e4434d058310 | 15 | Mutex lcdMutex; |
Lukas_Adlboller | 0:e4434d058310 | 16 | |
Lukas_Adlboller | 0:e4434d058310 | 17 | bool boardStarted = false; |
Lukas_Adlboller | 0:e4434d058310 | 18 | bool tempThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 19 | bool gyroThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 20 | |
Lukas_Adlboller | 0:e4434d058310 | 21 | void tmpThread() |
Lukas_Adlboller | 0:e4434d058310 | 22 | { |
Lukas_Adlboller | 0:e4434d058310 | 23 | tempThreadRunning = true; |
Lukas_Adlboller | 0:e4434d058310 | 24 | |
Lukas_Adlboller | 0:e4434d058310 | 25 | while(boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 26 | { |
Lukas_Adlboller | 0:e4434d058310 | 27 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 28 | |
Lukas_Adlboller | 0:e4434d058310 | 29 | lcdDisplay.cls(); |
Lukas_Adlboller | 0:e4434d058310 | 30 | lcdDisplay.locate(0, 0); |
Lukas_Adlboller | 0:e4434d058310 | 31 | lcdDisplay.printf("Temp: %.2f", tempSensor.read()); |
Lukas_Adlboller | 0:e4434d058310 | 32 | |
Lukas_Adlboller | 0:e4434d058310 | 33 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 34 | wait(0.5); |
Lukas_Adlboller | 0:e4434d058310 | 35 | } |
Lukas_Adlboller | 0:e4434d058310 | 36 | |
Lukas_Adlboller | 0:e4434d058310 | 37 | tempThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 38 | } |
Lukas_Adlboller | 0:e4434d058310 | 39 | |
Lukas_Adlboller | 0:e4434d058310 | 40 | void gyroThread() |
Lukas_Adlboller | 0:e4434d058310 | 41 | { |
Lukas_Adlboller | 0:e4434d058310 | 42 | gyroThreadRunning = true; |
Lukas_Adlboller | 0:e4434d058310 | 43 | |
Lukas_Adlboller | 0:e4434d058310 | 44 | while(boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 45 | { |
Lukas_Adlboller | 0:e4434d058310 | 46 | int x = (x + MMA.x() * 32.0)/2.0; |
Lukas_Adlboller | 0:e4434d058310 | 47 | int y = (y -(MMA.y() * 16.0))/2.0; |
Lukas_Adlboller | 0:e4434d058310 | 48 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 49 | lcdDisplay.fillcircle(x+83, y+15, 3, 1); //draw bubble |
Lukas_Adlboller | 0:e4434d058310 | 50 | lcdDisplay.circle(83, 15, 8, 1); |
Lukas_Adlboller | 0:e4434d058310 | 51 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 52 | |
Lukas_Adlboller | 0:e4434d058310 | 53 | wait(0.1); //time delay |
Lukas_Adlboller | 0:e4434d058310 | 54 | |
Lukas_Adlboller | 0:e4434d058310 | 55 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 56 | lcdDisplay.fillcircle(x+83, y+15, 3, 0); //erase bubble |
Lukas_Adlboller | 0:e4434d058310 | 57 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 58 | } |
Lukas_Adlboller | 0:e4434d058310 | 59 | |
Lukas_Adlboller | 0:e4434d058310 | 60 | gyroThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 61 | } |
Lukas_Adlboller | 0:e4434d058310 | 62 | |
Lukas_Adlboller | 0:e4434d058310 | 63 | void start() |
Lukas_Adlboller | 0:e4434d058310 | 64 | { |
Lukas_Adlboller | 0:e4434d058310 | 65 | if(boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 66 | { |
Lukas_Adlboller | 0:e4434d058310 | 67 | boardStarted = false; |
Lukas_Adlboller | 0:e4434d058310 | 68 | rgbLED[0] = 0; |
Lukas_Adlboller | 0:e4434d058310 | 69 | rgbLED[1] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 70 | |
Lukas_Adlboller | 0:e4434d058310 | 71 | } |
Lukas_Adlboller | 0:e4434d058310 | 72 | else |
Lukas_Adlboller | 0:e4434d058310 | 73 | { |
Lukas_Adlboller | 0:e4434d058310 | 74 | boardStarted = true; |
Lukas_Adlboller | 0:e4434d058310 | 75 | rgbLED[0] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 76 | rgbLED[1] = 0; |
Lukas_Adlboller | 0:e4434d058310 | 77 | } |
Lukas_Adlboller | 0:e4434d058310 | 78 | } |
Lukas_Adlboller | 0:e4434d058310 | 79 | |
Lukas_Adlboller | 0:e4434d058310 | 80 | void pressButton() |
Lukas_Adlboller | 0:e4434d058310 | 81 | { |
Lukas_Adlboller | 0:e4434d058310 | 82 | startChecker.attach(&start, 3.0); |
Lukas_Adlboller | 0:e4434d058310 | 83 | } |
Lukas_Adlboller | 0:e4434d058310 | 84 | |
Lukas_Adlboller | 0:e4434d058310 | 85 | void releaseButton() |
Lukas_Adlboller | 0:e4434d058310 | 86 | { |
Lukas_Adlboller | 0:e4434d058310 | 87 | startChecker.detach(); |
Lukas_Adlboller | 0:e4434d058310 | 88 | } |
Lukas_Adlboller | 0:e4434d058310 | 89 | |
Lukas_Adlboller | 0:e4434d058310 | 90 | int main() |
Lukas_Adlboller | 0:e4434d058310 | 91 | { |
Lukas_Adlboller | 0:e4434d058310 | 92 | rgbLED[0] = rgbLED[1] = rgbLED[2] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 93 | rgbLED[0] = 0; |
Lukas_Adlboller | 0:e4434d058310 | 94 | rgbLED[1] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 95 | |
Lukas_Adlboller | 0:e4434d058310 | 96 | fireInterrupt.rise(pressButton); |
Lukas_Adlboller | 0:e4434d058310 | 97 | fireInterrupt.fall(releaseButton); |
Lukas_Adlboller | 0:e4434d058310 | 98 | |
Lukas_Adlboller | 0:e4434d058310 | 99 | lcdDisplay.set_font((unsigned char*) Arial_9); |
Lukas_Adlboller | 0:e4434d058310 | 100 | |
Lukas_Adlboller | 0:e4434d058310 | 101 | while(1) |
Lukas_Adlboller | 0:e4434d058310 | 102 | { |
Lukas_Adlboller | 0:e4434d058310 | 103 | if(boardStarted && !tempThreadRunning) |
Lukas_Adlboller | 0:e4434d058310 | 104 | { |
Lukas_Adlboller | 0:e4434d058310 | 105 | temp_thread.start(tmpThread); |
Lukas_Adlboller | 0:e4434d058310 | 106 | } |
Lukas_Adlboller | 0:e4434d058310 | 107 | |
Lukas_Adlboller | 0:e4434d058310 | 108 | if(boardStarted && !gyroThreadRunning) |
Lukas_Adlboller | 0:e4434d058310 | 109 | { |
Lukas_Adlboller | 0:e4434d058310 | 110 | gyro_thread.start(gyroThread); |
Lukas_Adlboller | 0:e4434d058310 | 111 | } |
Lukas_Adlboller | 0:e4434d058310 | 112 | |
Lukas_Adlboller | 0:e4434d058310 | 113 | if(!boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 114 | { |
Lukas_Adlboller | 0:e4434d058310 | 115 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 116 | lcdDisplay.cls(); |
Lukas_Adlboller | 0:e4434d058310 | 117 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 118 | } |
Lukas_Adlboller | 0:e4434d058310 | 119 | } |
Lukas_Adlboller | 0:e4434d058310 | 120 | } |