s

Dependencies:   LM75B C12832_lcd LCD_fonts

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?

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