Can someone help me out?
My project is totaly on hold and can't find a way out
Thanks in advance.
To help out I added an example belowshows that there is a conflict somewhere:
Serial from orginal code provided from Reza
avgMeasuredPH-avgMeasuredPH-6.8364 roomTempCompensatedPH-6.8379 avgRoomtTempC-27.9375 avgPhVolts-0.6850 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-6.8363 roomTempCompensatedPH-6.8377 avgRoomtTempC-27.9375 avgPhVolts-0.6851 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-6.8361 roomTempCompensatedPH-6.8376 avgRoomtTempC-27.9375 avgPhVolts-0.6851 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-6.8364 roomTempCompensatedPH-6.8379 avgRoomtTempC-27.9375 avgPhVolts-0.6850 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-6.8363 roomTempCompensatedPH-6.8378 avgRoomtTempC-27.9375 avgPhVolts-0.6851 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-6.8360 roomTempCompensatedPH-6.8374 avgRoomtTempC-27.9375 avgPhVolts-0.6851 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
Code with standard virtualwire code parsed in from:
https://www.pjrc.com/teensy/td_libs_VirtualWire.html
#include <Wire.h>
#include <VirtualWire.h>
// PH
#define PHADDRESS 0x4D
int RoomTempI2CAddress = B1001011;
float volt4 = 0.95;
float volt7 = 0.67;
float calibrationTempC = 20;
//VIRTUAL WIRE
const int led_pin = 13;
const int transmit_pin = 12;
const int receive_pin = 2;
const int transmit_en_pin = 3;
void setup()
{
//VIRUTAL WIRE
// Initialise the IO and ISR
vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true); // Required for DR3100
vw_setup(2000); // Bits per sec
}
byte count = 1;
void loop()
{
//VIRTUAL WIRE
char msg[7] = {'h','e','l','l','o',' ','#'};
msg[6] = count;
digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
vw_send((uint8_t *)msg, 7);
vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(led_pin, LOW);
delay(1000);
count = count + 1;
//PH
Wire.begin(); //connects I2C
Serial.begin(9600);
Serial.print("avgMeasuredPH-");
SetRoomTemperataureResolutionBits(12);//12 bits room temp resolution in celcius
int sampleSize = 500;
double avgMeasuredPH = 0;
double avgRoomTempC = 0;
double avgPHVolts = 0;
double avgRoomTemperatureCompensatedMeasuredPH = 0;
double tempAdjusted4;
int x;
for (x = 0; x < sampleSize; x++)
{
double phVolt = getPHVolts();
tempAdjusted4 = adjustPHBasedOnTemp(4, calibrationTempC);
double voltsPerPH = (abs(volt7 - volt4)) / (7 - tempAdjusted4);
double realPHVolt = (volt7 - phVolt);
double phUnits = realPHVolt / voltsPerPH;
double measuredPH = 7 + phUnits;
double roomTempC = getRoomTemperatureC();
double roomTempCompensatedMeasuredPH = adjustPHBasedOnTemp(measuredPH, roomTempC);
avgMeasuredPH += measuredPH;
avgRoomTemperatureCompensatedMeasuredPH += roomTempCompensatedMeasuredPH;
avgRoomTempC += roomTempC;
avgPHVolts += phVolt;
}
avgMeasuredPH /= sampleSize;
avgRoomTemperatureCompensatedMeasuredPH /= sampleSize;
avgRoomTempC /= sampleSize;
avgPHVolts /= sampleSize;
Serial.print("avgMeasuredPH-");
Serial.print(avgMeasuredPH, 4);
Serial.print(" roomTempCompensatedPH-");
Serial.print(avgRoomTemperatureCompensatedMeasuredPH, 4);
Serial.print(" avgRoomtTempC-");
Serial.print(avgRoomTempC, 4);
Serial.print(" avgPhVolts-");
Serial.print(avgPHVolts, 4);
Serial.print(" 7CalVolts-");
Serial.print(volt7, 4);
Serial.print(" 4CalVolts-");
Serial.print(volt4, 4);
Serial.print(" 4CalTempAdjusted-");
Serial.println(tempAdjusted4, 4);
delay(1000);
}
float adjustPHBasedOnTemp(float PH, float temp)
{
// http://www.omega.com/Green/pdf/pHbasics_REF.pdf
// When the temperature is other than 25degC and the ph is other than 7
// the temperature error is 0.03ph error/ph unit/10degC
// which means error = 0.03*(ph away from 7)*(tempdiffC/10)
float phDifference = abs(PH - 7);
float tempDifferenceC = abs(temp - 25);
float phAdjust = (0.03 * phDifference) * (tempDifferenceC / 10);
if (PH > 7 && temp < 25)
phAdjust = phAdjust;
if (PH > 7 && temp > 25)
phAdjust = phAdjust * -1;
if (PH < 7 && temp > 25)
phAdjust = phAdjust;
if (PH < 7 && temp < 25)
phAdjust = phAdjust * -1;
float tempAdjustedPH = PH + phAdjust;
return tempAdjustedPH;
}
double getPHVolts()
{
byte ad_high;
byte ad_low;
Wire.requestFrom(PHADDRESS, 2); //requests 2 bytes
while (Wire.available() < 2); //while two bytes to receive
ad_high = Wire.read();
ad_low = Wire.read();
double units = (ad_high * 256) + ad_low;
double volts = (units / 4096) * 3;
return volts;
}
double getRoomTemperatureC()
{
Wire.requestFrom(RoomTempI2CAddress, 2);
byte MSB = Wire.read();
byte LSB = Wire.read();
int TemperatureSum = ((MSB << 8) | LSB) >> 4;
double celsius = TemperatureSum * 0.0625;
return celsius;
}
void SetRoomTemperataureResolutionBits(int ResolutionBits)
{
if (ResolutionBits < 9 || ResolutionBits > 12) exit;
Wire.beginTransmission(RoomTempI2CAddress);
Wire.write(B00000001); //addresses the configuration register
Wire.write((ResolutionBits - 9) << 5); //writes the resolution bits
Wire.endTransmission();
Wire.beginTransmission(RoomTempI2CAddress); //resets to reading the temperature
Wire.write((byte)0x00);
Wire.endTransmission();
}
Serial output from code above:
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6850 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6850 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6849 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6849 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6845 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6844 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6843 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
avgMeasuredPH-avgMeasuredPH-inf roomTempCompensatedPH-inf avgRoomtTempC-28.1250 avgPhVolts-0.6843 7CalVolts-0.6700 4CalVolts-0.9500 4CalTempAdjusted-3.9550
Receive end of of virtual wire is fine so no issues there.
Thank you for you time