From 5ba48280f9828ae3942189ec640c0e7b803b346f Mon Sep 17 00:00:00 2001 From: structix Date: Mon, 12 Sep 2016 20:54:58 +0200 Subject: [PATCH] =?UTF-8?q?Accelerometer=20eingebunden=20#1,=20Messung=20l?= =?UTF-8?q?=C3=A4uft=20in=20einem=20Thread?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- accelerometer.c | 20 +++++++++++++++++++- accelerometer.h | 3 +++ main.c | 21 +++++++++++++++++++++ makefile | 2 +- player.c | 8 +++++++- 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/accelerometer.c b/accelerometer.c index 9f83f04..415a07d 100644 --- a/accelerometer.c +++ b/accelerometer.c @@ -2,6 +2,10 @@ #include #include //for fabs + +float acceldata = 0; +int kill = 0; + void setupAccelerometer(void) { setupgy521(); } @@ -11,7 +15,7 @@ float getaccelerometerdata(void) { float temp; int i, z; - for (i = 0, i < 3; i++) { + for (i = 0; i < 3; i++) { for (z = 0; z < 3 - i; z++) { if (xyz[z] < xyz[z + 1]) { temp = xyz[z]; @@ -23,3 +27,17 @@ float getaccelerometerdata(void) { return fabs(xyz[0]); //Absolutwert fuer float } + +int updateAccelerometerValue(void) { + acceldata = getaccelerometerdata(); + return kill; +} + +void killAccelerometerMeasure(void) { + kill = 1; +} + +float getAccelData(void) { + return acceldata; +} + diff --git a/accelerometer.h b/accelerometer.h index 40aabdc..9edc16c 100644 --- a/accelerometer.h +++ b/accelerometer.h @@ -1,2 +1,5 @@ void setupAccelerometer(void); float getaccelerometerdata(void); +int updateAccelerometerValue(void); +void killAccelerometerMeasure(void); +float getAccelData(void); diff --git a/main.c b/main.c index b88c03f..af0de25 100644 --- a/main.c +++ b/main.c @@ -2,23 +2,44 @@ #include #include "player.h" #include "song.h" +#include +#include "accelerometer.h" + void shutdown(void) { //Diese Methode wird von beim beenden aufgerufen. printf("Auf Wiedersehen!\n"); } +PI_THREAD (accelerometerupdater) { + while (updateAccelerometerValue() == 0) { + delay(500); + } + return 0; //Muss returned werden, da void * +} + + int main(void) { + int t1; atexit(shutdown); if (setupSoftTone() != 0) { printf("SoftTone konnte nicht initialisiert werden.\n"); exit(0); } + t1 = piThreadCreate(accelerometerupdater); + if (t1 != 0) { + printf("Accelerometer Thread nicht gestartet.\n"); + } + //Intro play(intro, noteDurations, introlength); + //Main theme play(melody, melodyNoteDurations, songlength); + + //Accelerometer Thread beenden + killAccelerometerMeasure(); return 0; } diff --git a/makefile b/makefile index 739e0ea..8677f92 100644 --- a/makefile +++ b/makefile @@ -2,7 +2,7 @@ VERSION = 1.0 CC = /usr/bin/gcc CFLAGS = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\" -LDFLAGS = -lwiringPi -lpthread +LDFLAGS = -lwiringPi -lpthread -lgy521 OBJ = main.o player.o accelerometer.o diff --git a/player.c b/player.c index 94b2bba..e2566a3 100644 --- a/player.c +++ b/player.c @@ -1,6 +1,9 @@ #include #include #include "player.h" +#include "accelerometer.h" + +#include #define PIN 0 //Realer pin 11 @@ -9,6 +12,7 @@ int setupSoftTone(void) { int returncode = 0; returncode += wiringPiSetup(); //Braucht root Rechte returncode += softToneCreate(PIN); + setupAccelerometer(); return returncode; // >0 --> error } @@ -29,7 +33,9 @@ void play(int *notes, int *durations, int songlength) { * Diese wird später mit dem Beschleunigungssensor * gesteuert. Vorerst sind es aber 30% */ - pauseBetweenNotes = nDuration * 1.30; + //pauseBetweenNotes = nDuration * 1.30; + pauseBetweenNotes = nDuration * 1.30 - (getAccelData() * 38.0); + delay(pauseBetweenNotes); // Sicherheitshalber Ton ausschalten softToneWrite(PIN, 0);