s

Dependencies:   LM75B C12832_lcd LCD_fonts

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?

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