Mercurial > hg > beaglert
diff examples/10-Instruments/d-box/DboxSensors.cpp @ 464:8fcfbfb32aa0 prerelease
Examples reorder with subdirectories. Added header to each project. Moved Doxygen to bottom of render.cpp.
author | Robert Jack <robert.h.jack@gmail.com> |
---|---|
date | Mon, 20 Jun 2016 16:20:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/examples/10-Instruments/d-box/DboxSensors.cpp Mon Jun 20 16:20:38 2016 +0100 @@ -0,0 +1,157 @@ +/* + * DboxSensors.cpp + * + * Created on: May 19, 2014 + * Author: Victor Zappi + */ + + +#include "DboxSensors.h" +#include "config.h" + +using namespace std; + + + +int DboxSensors::initSensors(int tk0_bus, int tk0_address, int tk1_bus, int tk1_address, int tk_file, int fsr_pin, int fsrmax, int sensorTypeToUse, int gpio_0, int gpio_1) +{ + sensorType = sensorTypeToUse; + // init first touch key on i2c bus + if(tk0_address >= 0) { + if(TK0.initI2C_RW(tk0_bus, tk0_address, tk_file)>0) + return 1; + if(TK0.initTouchKey(sensorType)>0) + return 2; + } + + // init second touch key on i2c bus + if(tk1_address >= 0) { + if(TK1.initI2C_RW(tk1_bus, tk1_address, tk_file)>0) + return 1; + if(TK1.initTouchKey(sensorType)>0) + return 2; + } + + // init fsr on analog input pin + fsr_pinNum = fsr_pin; + fsr_max = fsrmax; + + if(FSR.initAnalogInputs()>0) + return 3; + + gpio[0] = gpio_0; + if(gpio[0]!=-1) + { + fdDi[0] = gpio_export(gpio[0]); + if(fdDi[0] == -1) + return 4; + } + digitalIn[0] = 1; + + return 0; +} + + +int DboxSensors::readSensors() +{ + // write data into first touch key + if(TK0.ready()) { + if(TK0.readI2C()>0) + return 1; + + // retrieve data from first touch key + tk0_touchCnt = TK0.getTouchCount(); + } + else + tk0_touchCnt = 0; + + // write data into second touch key + if(TK1.ready()) { + if(TK1.readI2C()>0) + return 1; + // retrieve data from second touch key + tk1_touchCnt = TK1.getTouchCount(); + } + else + tk1_touchCnt = 0; + + + int max = 3; + if(sensorType != kSensorTypeTouchKey) + max = 5; + // if touches detected on main touch key + if(tk0_touchCnt == 0 && tk1_touchCnt == 0) + resetSensorsData(); + else + { + for(int i=0; i<max; i++) + { + tk0_touchPosX[i] = TK0.getSliderPosition()[i]; + tk0_touchSize[i] = TK0.getSlidersize()[i]; + + tk1_touchPosX[i] = TK1.getSliderPosition()[i]; + tk1_touchSize[i] = TK1.getSlidersize()[i]; + } + tk0_touchPosY = TK0.getSliderPositionH(); + tk1_touchPosY = TK1.getSliderPositionH(); + fsr_read = (double)FSR.read(fsr_pinNum); + } + + if(gpio[0]!=-1) + { + if(gpio_read(fdDi[0], &digitalIn[0])==-1) + return 1; + } + + return 0; +} + + + +DboxSensors::DboxSensors() +{ + resetSensorsData(); +} + + + +DboxSensors::~DboxSensors() +{ + if(gpio[0]!=-1) + gpio_dismiss(fdDi[0], gpio[0]); +} + + + +//-------------------------------------------------------------------------------------------------------- +// private methods +//-------------------------------------------------------------------------------------------------------- + +// idle values +void DboxSensors::resetSensorsData() +{ + int max = 3; + if(sensorType != kSensorTypeTouchKey) + max = 5; + + for(int i=0; i<max; i++) + { + tk0_touchPosX[i] = -1; + tk0_touchPosY = -1; + tk0_touchSize[i] = 0; + + tk1_touchPosX[i] = -1; + tk1_touchPosY = -1; + tk1_touchSize[i] = 0; + + fsr_read = 0; + } + + return; +} + + + + + +