diff --git a/slave/slave/lib/inputOutput.c b/slave/slave/lib/inputOutput.c --- a/slave/slave/lib/inputOutput.c +++ b/slave/slave/lib/inputOutput.c @@ -28,11 +28,11 @@ int8_t moduleID; // Slave Module ID from ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Set prescaler for ADC, 128 gives ADC freq of 125 KHz ADMUX |= (1 << REFS0); // Set ADC reference voltage to AVCC - ADMUX |= (1 << ADLAR); // Sets 10 bit ADC to 8 bit + //ADMUX |= (1 << ADLAR); // Sets 10 bit ADC to 8 bit ADMUX |= (1 << MUX2) | (1 << MUX1) | (1 << MUX0); // Select ADC7 as the conversion channel ADCSRA |= (1 << ADATE); // Enables auto trigger, determined in ADCSRB bits ADTS //ADCSRA |= (1 << ADIF); // -//ADCSRA |= (1 << ADIE); // ADC interrupt enable set + //ADCSRA |= (1 << ADIE); // ADC interrupt enable set ADCSRB &= ~((1 << ADTS2) | (1 << ADTS1) | (1 << ADTS0)); // Set ADC auto trigger source to free running mode ADCSRA |= (1 << ADEN); // Enable ADC ADCSRA |= (1 << ADSC); // Start ADC measurements. ADC should now continuously run conversions, which are stored in ADCH 0x79 diff --git a/slave/slave/lib/sensors.c b/slave/slave/lib/sensors.c --- a/slave/slave/lib/sensors.c +++ b/slave/slave/lib/sensors.c @@ -18,7 +18,6 @@ int16_t spiTemp; // Thermocouple Temperature (from spi) int8_t boardTemp; // Board Temperature (from i2c) -//Should these two be int16_t? CHANGED TO INT32 BASED ON DATASHEET int32_t ut; // Temperature from BMP085 (from i2c) int32_t up; // Pressure from BMP085 (from i2c) uint16_t humid; // Humidity (from i2c) @@ -27,7 +26,8 @@ uint8_t lightL; // Lower byte from ligh uint8_t exponent; // Exponent for Lux uint8_t mantissa; // Mantissa for Lux uint32_t lux; // Calculated Lux value -int8_t batt; // Read battery voltage from ADC +uint8_t battL; // Low byte of ADC +uint16_t batt; // Read battery voltage from ADC int16_t ac1; // The following 11 variables are the calibration values for the BMP085 int16_t ac2; @@ -186,7 +186,6 @@ void sensors_readPressure() x2 = (-7357 * pressure) >> 16; pressure += (x1 + x2 + 3791) >> 4; //This is the final value for our pressure - //altitude = 44330 * (1 - pow((pressure / 101325), (1 / 5.255))); altitude = (float)44330 * (1 - pow(((float) pressure/101325), 0.190295)); } @@ -200,7 +199,6 @@ void sensors_readHumid() void sensors_readLux() { - // FOR FIRST BYTE: lightH = i2c_read(LIGHT_ADDR, 0x03); lightL = i2c_read(LIGHT_ADDR, 0x04); @@ -209,23 +207,16 @@ void sensors_readLux() lightH = lightH << 4; mantissa = lightH | lightL; - //mantissa = mantissa << 4; - //mantissa = mantissa >> 4; - - //lux = (pow(2, exponent) * (float)(mantissa * 0.045)); + lux = (float)(pow(2,exponent) * mantissa) * 0.045; - - // FOR BOTH BYTES: - // light = light << 4; - // light = light | (0x0F & i2c_read(LIGHT_ADDR, 0x04)); // This can be used to read in the 4 LSBs from the second register - // exponent = 8xE3 + 4xE2 + 2xE1 + E0 - // mantissa = 128xM7 + 64xM6 + 32xM5 + 16xM4 + 8xM3 + 4xM2 + 2xM1 + M0 - // light = 2^(exponent)*mantissa*0.045 } void sensors_readBatt() { - batt = ADCH; // Read battery level from ADC + battL = ADCL; // Read low battery byte from ADC (all 8 bits) + batt = ADCH; // Read high battery byte from ADC (only two LSBs) + batt = batt << 8; + batt |= battL; } int16_t sensors_getSpiTemp(void) // Gets spi temperature from variable @@ -253,8 +244,7 @@ uint32_t sensors_getLux(void) // Gets l return lux; } -//possibly uint8_t -int8_t sensors_getBatt(void) // Gets battery voltage from variable +uint16_t sensors_getBatt(void) // Gets battery voltage from variable { return batt; } diff --git a/slave/slave/lib/sensors.h b/slave/slave/lib/sensors.h --- a/slave/slave/lib/sensors.h +++ b/slave/slave/lib/sensors.h @@ -23,7 +23,7 @@ int8_t sensors_getBoardTemp(void); // Ge int32_t sensors_getPressure(void); // Gets pressure from variable uint16_t sensors_getHumid(void); // Gets humidity from variable uint32_t sensors_getLux(void); // Gets lux from variable -int8_t sensors_getBatt(void); // Gets battery voltage from variable +uint16_t sensors_getBatt(void); // Gets battery voltage from variable uint32_t sensors_getAltitude(void); // Gets altitude from variable #endif /* SENSORS_H_ */ \ No newline at end of file diff --git a/slave/slave/slave.c b/slave/slave/slave.c --- a/slave/slave/slave.c +++ b/slave/slave/slave.c @@ -82,7 +82,7 @@ int main(void) io_regulateTemp(); // Gets board temperature and enables heater if below threshold - snprintf(buff,128,"|ModuleID: %u |BoardTemp: %i |Millis: %lu |Lux: %lu |Pressure: %lu |Altitude: %lu |Battery: %i \r\n ",io_getModuleId(),sensors_getBoardTemp(),time_millis(),sensors_getLux(),sensors_getPressure(),sensors_getAltitude(),sensors_getBatt()); //DEBUG + snprintf(buff,128,"|ModuleID: %u |BoardTemp: %i |Millis: %lu |Lux: %lu |Pressure: %lu |Altitude: %lu |Battery: %u \r\n ",io_getModuleId(),sensors_getBoardTemp(),time_millis(),sensors_getLux(),sensors_getPressure(),sensors_getAltitude(),sensors_getBatt()); //DEBUG serial0_sendString(buff); //DEBUG _delay_ms(2); // Delay to prevent the sensor loop from running again before time_millis changes