diff --git a/.gitignore b/.gitignore index f8f9ae0..fcb7301 100644 --- a/.gitignore +++ b/.gitignore @@ -38,8 +38,10 @@ Thumbs.db #Eclipse files ############## .project +.cproject .classpath .settings/ +Debug/ build.properties #VAADIN files diff --git a/.gitignore~ b/.gitignore~ new file mode 100644 index 0000000..f8f9ae0 --- /dev/null +++ b/.gitignore~ @@ -0,0 +1,56 @@ +# Compiled source # +################### +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Packages # +############ +# it's better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.war +*.ear + +# Logs and databases # +###################### +*.log +*.sql +*.sqlite + +# OS generated files # +###################### +.DS_Store* +ehthumbs.db +Icon? +Thumbs.db + +#Eclipse files +############## +.project +.classpath +.settings/ +build.properties + +#VAADIN files +############# +konekti.countertrack.workbench/src/main/webapp/VAADIN/widgetsets/* + +#MANIFEST files +############### +MANIFEST.MF + +#Maven binaries +############### +target/ + diff --git a/countertrack.sensor/Gait/Gait.cpp b/countertrack.sensor/Gait/Gait.cpp new file mode 100644 index 0000000..ad59651 --- /dev/null +++ b/countertrack.sensor/Gait/Gait.cpp @@ -0,0 +1,39 @@ +/* + * Gait.cpp + * + * Created on: 22/10/2013 + * Author: miguel + */ +#include "Gait.h" +#include + +Gait::Gait() { + direction = 0; + gaitDate = time(0); + sequence.push_back(0); +} + +Gait::Gait(int currentDirection, vectorcurrentSequence) { + direction = currentDirection; + sequence = currentSequence; + gaitDate = time(0); +} + +bool Gait::sameGait(Gait lastGait) { + bool sameGait = false; + + if (abs(gaitDate - lastGait.getGaitDate() < 500) ) { + if (direction == 1 && lastGait.getDirection() == 1 && + sequence[sequence.size()-1] > lastGait.getSequence()[lastGait.getSequence().size() -1] + ) { + sameGait = true; + } else if (direction == 0 && lastGait.getDirection() == 0 && + sequence[sequence.size()-1] < lastGait.getSequence()[lastGait.getSequence().size() -1] + ) { + sameGait = true; + } + } + return sameGait; +} + + diff --git a/countertrack.sensor/Gait/Gait.h b/countertrack.sensor/Gait/Gait.h new file mode 100644 index 0000000..e3f79d3 --- /dev/null +++ b/countertrack.sensor/Gait/Gait.h @@ -0,0 +1,39 @@ +/* + * Gait.h + * + * Created on: 22/10/2013 + * Author: miguel + */ +#include +#include + +using namespace std; + +#ifndef GAIT_H_ +#define GAIT_H_ + +class Gait { +public: + Gait(); + Gait(int currentDirection, vector currentSequence); + bool sameGait(Gait lastGait); + + int getDirection() const { + return direction; + } + + time_t getGaitDate() const { + return gaitDate; + } + + vector getSequence() const { + return sequence; + } +private: + int direction; + vector sequence; + time_t gaitDate; +}; + + +#endif /* GAIT_H_ */ diff --git a/countertrack.sensor/Mat/Mat.cpp b/countertrack.sensor/Mat/Mat.cpp new file mode 100644 index 0000000..f4900a9 --- /dev/null +++ b/countertrack.sensor/Mat/Mat.cpp @@ -0,0 +1,289 @@ +/* + * mat.cpp + * + * Created on: 18/10/2013 + * Author: miguel + */ +#include "Mat.h" +#include +#include +#include + +using namespace std; + +Mat::Mat () { + zoneReg = ZoneRegister(); + lastGait = Gait(); +} + +int Mat::checkActiveZones () { + + int numberOfActiveZones = 0; + FILE *zoneHandler = NULL; + + const char *zone0File = "/sys/class/gpio/gpio30/value"; + const char *zone1File = "/sys/class/gpio/gpio60/value"; + const char *zone2File = "/sys/class/gpio/gpio31/value"; + const char *zone3File = "/sys/class/gpio/gpio50/value"; + const char *zone4File = "/sys/class/gpio/gpio48/value"; + const char *zone5File = "/sys/class/gpio/gpio51/value"; + const char *zone6File = "/sys/class/gpio/gpio3/value"; + const char *zone7File = "/sys/class/gpio/gpio2/value"; + const char *zone8File = "/sys/class/gpio/gpio49/value"; + const char *zone9File = "/sys/class/gpio/gpio15/value"; + + char zoneValue [1]; + + if ((zoneHandler = fopen(zone0File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone0 = zoneValue[0] - '0'; + if (zone0 == 0) { + zoneReg.setActiveZone(0); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone1File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone1 = zoneValue[0] - '0'; + if (zone1 == 0) { + zoneReg.setActiveZone(1); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone2File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone2 = zoneValue[0] - '0'; + if (zone2 == 0) { + zoneReg.setActiveZone(2); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone3File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone3 = zoneValue[0] - '0'; + if (zone3 == 0) { + zoneReg.setActiveZone(3); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone4File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone4 = zoneValue[0] - '0'; + if (zone4 == 0) { + zoneReg.setActiveZone(4); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone5File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone5 = zoneValue[0] - '0'; + if (zone5 == 0) { + zoneReg.setActiveZone(5); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone6File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone6 = zoneValue[0] - '0'; + if (zone6 == 0) { + zoneReg.setActiveZone(6); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone7File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone7 = zoneValue[0] - '0'; + if (zone7 == 0) { + zoneReg.setActiveZone(7); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone8File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone8 = zoneValue[0] - '0'; + if (zone8 == 0) { + zoneReg.setActiveZone(8); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + if ((zoneHandler = fopen(zone9File,"r+")) != NULL) { + fread(zoneValue, sizeof(char), 1, zoneHandler); + int zone9 = zoneValue[0] - '0'; + if (zone9 == 0) { + zoneReg.setActiveZone(9); + numberOfActiveZones++; + } + fclose(zoneHandler); + } + + //if (numberOfActiveZones >= 3) zoneReg.display(); + + return numberOfActiveZones; + +} + +bool Mat::checkGait() { + + bool existsGait = false; + + // Se obtiene la secuencia de activación de hilos + vector activeZones = zoneReg.getActivations(); + + for(unsigned i=0; i firstGait = zoneReg.getActivations(); + vector secondaryGait; + vector gaitSequence; + bool possibleZones[10]; + int referenceZone; + + int counter1 = 0; + int counter2 = 0; + int counterSequence = 0; + for (int i=0; i<10; i++) { + possibleZones[i] = true; + } + + firstGait.push_back(activeZones[0]); + counter1++; + gaitSequence.push_back(activeZones[0]); + counterSequence++; + referenceZone = activeZones[0]; + possibleZones[referenceZone] = false; + // MÉTODO 3 + + // Se mantiene un hilo como referencia de la secuencia que va siguiendo la pisada + // Cada vez que se detecta un hilo próximo al hilo de referencia se almacena como + // parte de la pisada principal + + for (unsigned i=1; i gaitSequence[0]) { + cout << "Individuo entrando" << endl; + existsGait = true; + first = Gait(1, gaitSequence); + if(!first.sameGait(lastGait)) { + cout << "Send" << endl; + lastGait = first; + } + } else { + cout << "Individuo saliendo" << endl; + existsGait = true; + first = Gait(0, gaitSequence); + if(!first.sameGait(lastGait)) { + cout << "Send" << endl; + lastGait = first; + } + } + + // Se comprueba si hay dos pisadas + + // Para que haya dos pisadas deben haberse activado 3 o más hilos distintos aparte de los de la pisada principal + + + if (counter2 > 3) { + differentZones = 0; + for (int i=0; i<10; i++) { + for (int j=0; j= 3) { + if (secondaryGait[counter2 - 1] > secondaryGait[0]) { + cout << "Segunda pisada entrante" << endl; + second = Gait(1, secondaryGait); + if(!second.sameGait(lastGait)) { + cout << "Send" << endl; + lastGait = second; + } + existsGait = true; + } else { + cout << "Segunda pisada saliente" << endl; + second = Gait(0, secondaryGait); + if (!second.sameGait(lastGait)) { + cout << "Send" << endl; + lastGait = second; + } + existsGait = true; + } + } + } + zoneReg.reset(); + return existsGait; +} + diff --git a/countertrack.sensor/Mat/Mat.h b/countertrack.sensor/Mat/Mat.h new file mode 100644 index 0000000..65deac7 --- /dev/null +++ b/countertrack.sensor/Mat/Mat.h @@ -0,0 +1,25 @@ +/* + * mat.h + * + * Created on: 18/10/2013 + * Author: miguel + */ + +#ifndef MAT_H_ +#define MAT_H_ + +#include "../ZoneRegister/ZoneRegister.h" +#include "../Gait/Gait.h" + +class Mat { + public: + Mat(); + int checkActiveZones(); + bool checkGait(); + + private: + ZoneRegister zoneReg; + Gait lastGait; +}; + +#endif /* MAT_H_ */ diff --git a/countertrack.sensor/ZoneRegister/ZoneRegister.cpp b/countertrack.sensor/ZoneRegister/ZoneRegister.cpp new file mode 100644 index 0000000..1700637 --- /dev/null +++ b/countertrack.sensor/ZoneRegister/ZoneRegister.cpp @@ -0,0 +1,45 @@ +/* + * ZoneRegister.cpp + * + * Created on: 21/10/2013 + * Author: miguel + */ + +#include "ZoneRegister.h" +#include +#include + +using namespace std; + +ZoneRegister::ZoneRegister() { + date = time(0); + counter = 0; +} + +void ZoneRegister::setActiveZone(int activeZone) { + time_t now = time(0); + if ((now - date) > 200) { + activeZones.clear(); + counter = 0; + } + activeZones.push_back(activeZone); + counter++; + date = time(0); +} + +void ZoneRegister::reset() { + activeZones.clear(); + counter = 0; +} + +void ZoneRegister::display() { + cout << "Register: " << endl; + for (unsigned i=0; i ZoneRegister::getActivations() { + return activeZones; +} + diff --git a/countertrack.sensor/ZoneRegister/ZoneRegister.h b/countertrack.sensor/ZoneRegister/ZoneRegister.h new file mode 100644 index 0000000..10fbf0d --- /dev/null +++ b/countertrack.sensor/ZoneRegister/ZoneRegister.h @@ -0,0 +1,33 @@ +/* + * ZoneRegister.h + * + * Created on: 21/10/2013 + * Author: miguel + */ + +#ifndef ZONEREGISTER_H_ +#define ZONEREGISTER_H_ + +#include +#include + +using namespace std; + +class ZoneRegister +{ +public: + ZoneRegister(); + void setActiveZone(int zone); + void reset(); + void display(); + vector getActivations(); + +private: + vector activeZones; + time_t date; + int counter; +}; + + + +#endif /* ZONEREGISTER_H_ */ diff --git a/countertrack.sensor/src/main.cpp b/countertrack.sensor/src/main.cpp new file mode 100644 index 0000000..6cbef98 --- /dev/null +++ b/countertrack.sensor/src/main.cpp @@ -0,0 +1,35 @@ +//============================================================================ +// Name : kShop.cpp +// Author : Héctor Camblor +// Version : 0.1 +// Copyright : Thingtrack S.L. +// Description : kShop in C++ +//============================================================================ + +#include +#include +#include "../Mat/Mat.h" + +using namespace std; + +int main() { + + Mat mat; + bool flag = false; + + while (1) { + if (mat.checkActiveZones() >= 3) { + flag = true; + } + + if (mat.checkActiveZones() == 0 && flag == true) { + mat.checkGait(); + flag = false; + } + + sleep(0.2); + } + + return 0; + +}