s
Dependencies: LM75B C12832_lcd LCD_fonts
main.cpp@1:133129bd3d45, 2019-12-06 (annotated)
- Committer:
- Lukas_Adlboller
- Date:
- Fri Dec 06 16:47:34 2019 +0000
- Revision:
- 1:133129bd3d45
- Parent:
- 0:e4434d058310
- Child:
- 2:b4a812174f7e
Big Big Project
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 | 1:133129bd3d45 | 8 | |
Lukas_Adlboller | 0:e4434d058310 | 9 | InterruptIn fireInterrupt(p14); |
Lukas_Adlboller | 1:133129bd3d45 | 10 | |
Lukas_Adlboller | 0:e4434d058310 | 11 | Timeout startChecker; |
Lukas_Adlboller | 1:133129bd3d45 | 12 | |
Lukas_Adlboller | 0:e4434d058310 | 13 | LM75B tempSensor(p28, p27); |
Lukas_Adlboller | 0:e4434d058310 | 14 | MMA7660 MMA(p28, p27); |
Lukas_Adlboller | 0:e4434d058310 | 15 | C12832_LCD lcdDisplay; |
Lukas_Adlboller | 1:133129bd3d45 | 16 | |
Lukas_Adlboller | 0:e4434d058310 | 17 | Thread temp_thread; |
Lukas_Adlboller | 0:e4434d058310 | 18 | Thread gyro_thread; |
Lukas_Adlboller | 1:133129bd3d45 | 19 | |
Lukas_Adlboller | 0:e4434d058310 | 20 | Mutex lcdMutex; |
Lukas_Adlboller | 0:e4434d058310 | 21 | |
Lukas_Adlboller | 0:e4434d058310 | 22 | bool boardStarted = false; |
Lukas_Adlboller | 0:e4434d058310 | 23 | bool tempThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 24 | bool gyroThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 25 | |
Lukas_Adlboller | 0:e4434d058310 | 26 | void tmpThread() |
Lukas_Adlboller | 0:e4434d058310 | 27 | { |
Lukas_Adlboller | 0:e4434d058310 | 28 | tempThreadRunning = true; |
Lukas_Adlboller | 0:e4434d058310 | 29 | |
Lukas_Adlboller | 0:e4434d058310 | 30 | while(boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 31 | { |
Lukas_Adlboller | 0:e4434d058310 | 32 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 33 | |
Lukas_Adlboller | 0:e4434d058310 | 34 | lcdDisplay.cls(); |
Lukas_Adlboller | 0:e4434d058310 | 35 | lcdDisplay.locate(0, 0); |
Lukas_Adlboller | 0:e4434d058310 | 36 | lcdDisplay.printf("Temp: %.2f", tempSensor.read()); |
Lukas_Adlboller | 0:e4434d058310 | 37 | |
Lukas_Adlboller | 0:e4434d058310 | 38 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 39 | wait(0.5); |
Lukas_Adlboller | 0:e4434d058310 | 40 | } |
Lukas_Adlboller | 0:e4434d058310 | 41 | |
Lukas_Adlboller | 0:e4434d058310 | 42 | tempThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 43 | } |
Lukas_Adlboller | 0:e4434d058310 | 44 | |
Lukas_Adlboller | 0:e4434d058310 | 45 | void gyroThread() |
Lukas_Adlboller | 0:e4434d058310 | 46 | { |
Lukas_Adlboller | 0:e4434d058310 | 47 | gyroThreadRunning = true; |
Lukas_Adlboller | 0:e4434d058310 | 48 | |
Lukas_Adlboller | 0:e4434d058310 | 49 | while(boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 50 | { |
Lukas_Adlboller | 0:e4434d058310 | 51 | int x = (x + MMA.x() * 32.0)/2.0; |
Lukas_Adlboller | 0:e4434d058310 | 52 | int y = (y -(MMA.y() * 16.0))/2.0; |
Lukas_Adlboller | 0:e4434d058310 | 53 | lcdMutex.lock(); |
Lukas_Adlboller | 1:133129bd3d45 | 54 | lcdDisplay.locate(0, 20); |
Lukas_Adlboller | 1:133129bd3d45 | 55 | lcdDisplay.printf("X: %d; Y: %d", x, y); |
Lukas_Adlboller | 0:e4434d058310 | 56 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 57 | |
Lukas_Adlboller | 0:e4434d058310 | 58 | wait(0.1); //time delay |
Lukas_Adlboller | 0:e4434d058310 | 59 | |
Lukas_Adlboller | 0:e4434d058310 | 60 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 61 | lcdDisplay.fillcircle(x+83, y+15, 3, 0); //erase bubble |
Lukas_Adlboller | 0:e4434d058310 | 62 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 63 | } |
Lukas_Adlboller | 0:e4434d058310 | 64 | |
Lukas_Adlboller | 0:e4434d058310 | 65 | gyroThreadRunning = false; |
Lukas_Adlboller | 0:e4434d058310 | 66 | } |
Lukas_Adlboller | 0:e4434d058310 | 67 | |
Lukas_Adlboller | 0:e4434d058310 | 68 | void start() |
Lukas_Adlboller | 0:e4434d058310 | 69 | { |
Lukas_Adlboller | 0:e4434d058310 | 70 | if(boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 71 | { |
Lukas_Adlboller | 0:e4434d058310 | 72 | boardStarted = false; |
Lukas_Adlboller | 0:e4434d058310 | 73 | rgbLED[0] = 0; |
Lukas_Adlboller | 0:e4434d058310 | 74 | rgbLED[1] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 75 | |
Lukas_Adlboller | 0:e4434d058310 | 76 | } |
Lukas_Adlboller | 0:e4434d058310 | 77 | else |
Lukas_Adlboller | 0:e4434d058310 | 78 | { |
Lukas_Adlboller | 0:e4434d058310 | 79 | boardStarted = true; |
Lukas_Adlboller | 0:e4434d058310 | 80 | rgbLED[0] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 81 | rgbLED[1] = 0; |
Lukas_Adlboller | 0:e4434d058310 | 82 | } |
Lukas_Adlboller | 0:e4434d058310 | 83 | } |
Lukas_Adlboller | 0:e4434d058310 | 84 | |
Lukas_Adlboller | 0:e4434d058310 | 85 | void pressButton() |
Lukas_Adlboller | 0:e4434d058310 | 86 | { |
Lukas_Adlboller | 0:e4434d058310 | 87 | startChecker.attach(&start, 3.0); |
Lukas_Adlboller | 0:e4434d058310 | 88 | } |
Lukas_Adlboller | 0:e4434d058310 | 89 | |
Lukas_Adlboller | 0:e4434d058310 | 90 | void releaseButton() |
Lukas_Adlboller | 0:e4434d058310 | 91 | { |
Lukas_Adlboller | 0:e4434d058310 | 92 | startChecker.detach(); |
Lukas_Adlboller | 0:e4434d058310 | 93 | } |
Lukas_Adlboller | 0:e4434d058310 | 94 | |
Lukas_Adlboller | 0:e4434d058310 | 95 | int main() |
Lukas_Adlboller | 0:e4434d058310 | 96 | { |
Lukas_Adlboller | 0:e4434d058310 | 97 | rgbLED[0] = rgbLED[1] = rgbLED[2] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 98 | rgbLED[0] = 0; |
Lukas_Adlboller | 0:e4434d058310 | 99 | rgbLED[1] = 1; |
Lukas_Adlboller | 0:e4434d058310 | 100 | |
Lukas_Adlboller | 0:e4434d058310 | 101 | fireInterrupt.rise(pressButton); |
Lukas_Adlboller | 0:e4434d058310 | 102 | fireInterrupt.fall(releaseButton); |
Lukas_Adlboller | 0:e4434d058310 | 103 | |
Lukas_Adlboller | 0:e4434d058310 | 104 | lcdDisplay.set_font((unsigned char*) Arial_9); |
Lukas_Adlboller | 0:e4434d058310 | 105 | |
Lukas_Adlboller | 0:e4434d058310 | 106 | while(1) |
Lukas_Adlboller | 0:e4434d058310 | 107 | { |
Lukas_Adlboller | 0:e4434d058310 | 108 | if(boardStarted && !tempThreadRunning) |
Lukas_Adlboller | 0:e4434d058310 | 109 | { |
Lukas_Adlboller | 0:e4434d058310 | 110 | temp_thread.start(tmpThread); |
Lukas_Adlboller | 0:e4434d058310 | 111 | } |
Lukas_Adlboller | 0:e4434d058310 | 112 | |
Lukas_Adlboller | 0:e4434d058310 | 113 | if(boardStarted && !gyroThreadRunning) |
Lukas_Adlboller | 0:e4434d058310 | 114 | { |
Lukas_Adlboller | 0:e4434d058310 | 115 | gyro_thread.start(gyroThread); |
Lukas_Adlboller | 0:e4434d058310 | 116 | } |
Lukas_Adlboller | 0:e4434d058310 | 117 | |
Lukas_Adlboller | 0:e4434d058310 | 118 | if(!boardStarted) |
Lukas_Adlboller | 0:e4434d058310 | 119 | { |
Lukas_Adlboller | 0:e4434d058310 | 120 | lcdMutex.lock(); |
Lukas_Adlboller | 0:e4434d058310 | 121 | lcdDisplay.cls(); |
Lukas_Adlboller | 0:e4434d058310 | 122 | lcdMutex.unlock(); |
Lukas_Adlboller | 0:e4434d058310 | 123 | } |
Lukas_Adlboller | 0:e4434d058310 | 124 | } |
Lukas_Adlboller | 0:e4434d058310 | 125 | } |