#include double VOLTAGE, P68, P150; double temp, load = 0; uint8_t Q68, Q150; bool new_message = false; void setup() { Wire.begin(); Serial.begin(9600); Serial.println("Enter Nominal System Voltage:"); while (Serial.available() == 0) {;} VOLTAGE = Serial.parseFloat(SKIP_ALL); Serial.print("System Voltage: "); Serial.println(VOLTAGE, DEC); P150 = (VOLTAGE * VOLTAGE) / 150; P68 = (VOLTAGE * VOLTAGE) / 68; Serial.println("Enter Load in kW:"); } void loop() { new_message = false; Serial.flush(); if (Serial.available())temp = Serial.parseFloat(SKIP_ALL) * 1000; if ((temp != load) && (temp > 0)) { load = temp; if (VOLTAGE <= 420) //We don't want to use the 68ohm resistors if the voltage is higher than 420 as they would draw excessive power. { Q68 = load / P68; if (Q68 > 5) Q68 = 5; Q150 = (load - (Q68 * P68)) / P150; } else { Q150 = load / P150; Q68 = 0; } if (Q150 > 15) Q150 = 15; Serial.print("A combination of "); Serial.print(Q150, DEC); Serial.print(" 150ohm and "); Serial.print(Q68, DEC); Serial.print(" 68ohm resistors will be requested. "); //Serial.print(load - ((P150*Q150)+(P100*Q100)),DEC); Serial.print(((P150 * Q150) + (P68 * Q68)), DEC); Serial.println("W Accounted for."); new_message = true; } delay(50); Wire.beginTransmission(0x30); //Controller Board Has Address 0x07 Wire.write(0x01); //First "EEPROM Address" stores resistor data. Wire.write((Q68 << 4) | Q150); Wire.endTransmission(); if (new_message == true) { delay(25); Wire.requestFrom(0x30, 1); while (!Wire.available()) {;} int c = Wire.read(); Serial.print("Quantity of 150Ohm: "); Serial.print(c & 0b00001111); //Print Q150 Serial.print(" Quantity of 68Ohm: "); Serial.print((c & 0b01110000)>>4); Serial.println(" was recieved."); } }