Modified for compatibility with Rev.E. hardware
Fork of AkmSensor by
Diff: akmsensormanager.cpp
- Revision:
- 49:c8f8946129b6
- Parent:
- 48:427bdb7bf31b
--- a/akmsensormanager.cpp Tue Dec 19 12:18:13 2017 -0800 +++ b/akmsensormanager.cpp Tue May 01 21:31:15 2018 +0000 @@ -222,7 +222,9 @@ // } } -void AkmSensorManager::dummyCallbackForCommandReceived(){} +void AkmSensorManager::commandReceivedCallback(){ + VERBOSE("#commandReceivedCallback: Command Received\r\n"); +} // For commands received via BLE @@ -238,11 +240,11 @@ eventCommandReceived = true; // Set flag VERBOSE("#Parsed message. %s\r\n", buf); } - t.attach(callback(this, &AkmSensorManager::dummyCallbackForCommandReceived),0); // wake-up from ble.waitForEvent + t.attach(callback(this, &AkmSensorManager::commandReceivedCallback),0); // wake-up from ble.waitForEvent return status; } - +/* int16_t AkmSensorManager::getAdcData(MCP342X *mcp3428, MCP342X::AdcChannel ch, MCP342X::SampleSetting s) { const int WAIT_ADC_MS = 1; @@ -260,37 +262,39 @@ return data.value; } - +*/ uint8_t AkmSensorManager::getId(PinName pin, uint8_t bits) { - MSG("#GetID\r\n"); - - I2C i2c(I2C_SDA, I2C_SCL); // establish I2C to read ID - - // ADC - MCP342X mcp342x(&i2c, MCP342X::SLAVE_ADDRESS_6EH); // ADC to convert voltage - mcp342x.setConversionMode(MCP342X::ONE_SHOT); // Set to single sample - MCP342X::AdcChannel ch; + VERBOSE("#AkmSensorManager: GetID\r\n"); - if (pin == ANALOG_SENSOR_ID) { // Primary ID - ch = MCP342X::ADC_CH1; - } else { // pin == ANALOG_SENSOR_ID_SUB - ch = MCP342X::ADC_CH2; // Secondary ID - } - - int16_t val = getAdcData(&mcp342x, ch, MCP342X::SAMPLE_240HZ_12BIT); - MSG("#12bit ADC Val = %d.\r\n", val); + AnalogIn ain(pin); + double value = 0; + uint8_t ID = 0; + + value = ain.read(); + + MSG("#ADC ID Raw Value: %.5f\r\n", value); + + // Scale reading + // Range of reading is 0.0 to 1.0 + value = 2.0 * (3.0 * value); +// value = (1/0.5555556) * (3.0 * value); // multiply by 1/(voltage divider) and 3.0V + + MSG("#ADC ID Reading: %.4f\r\n", value); - // Voltage boundaries for ID voltage divider system - const int16_t VAL_MAX = 3000-2048; // Corresponds to 3V - const int16_t VAL_MIN = -2048; // Corresponds to 0V - - // Convert voltage to ID value - uint8_t value = (uint8_t)((val - VAL_MIN)/(double)(VAL_MAX - VAL_MIN) * (1 << bits) + 0.5); - MSG("#ID = %d.\r\n", value); - - return value; + if(bits == 4){ + // Convert reading into a 4-bit ID (i.e. 0-15) + ID = (uint8_t)((value/3.0)*16 + 0.5); + MSG("#4-bit ID = %d.\r\n", ID); + } + else if(bits == 5){ + // Convert reading into a 5-bit ID (i.e. 0-15) + ID = (uint8_t)((value/3.0)*32 + 0.5); + MSG("#5-bit ID = %d.\r\n", ID); + } + + return ID; } @@ -580,7 +584,7 @@ return SUCCESS; } -char* AkmSensorManager::my_strcat(char* str1, char* str2) +char* AkmSensorManager::stringConcat(char* str1, char* str2) { int num1; char* str; @@ -594,8 +598,8 @@ char* AkmSensorManager::getSensorName(){ char* name = ""; // for(int i=0; i<sensorNum; i++){ - name = my_strcat(name, (char *)sensor[0]->getSensorName()); -// if( sensorNum > (i+1) )name = my_strcat(name, "+"); + name = stringConcat(name, (char *)sensor[0]->getSensorName()); +// if( sensorNum > (i+1) )name = stringConcat(name, "+"); // } MSG("#Sensor Name='%s'.\r\n",name); return name;