#include double VOLTAGE, P100, P150; double temp, load = 0; uint8_t Q100, 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; P100 = (VOLTAGE * VOLTAGE) / 100; 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 <= 500) //We don't want to use the 100ohm resistors if the voltage is higher than 500 as they would draw excessive power. { Q100 = load / P100; if (Q100 > 5) Q100 = 5; Q150 = (load - (Q100 * P100)) / P150; } else { Q150 = load / P150; Q100 = 0; } if (Q150 > 15) Q150 = 15; Serial.print("A combination of "); Serial.print(Q150, DEC); Serial.print(" 150ohm and "); Serial.print(Q100, DEC); Serial.print(" 100ohm resistors will be requested. "); //Serial.print(load - ((P150*Q150)+(P100*Q100)),DEC); Serial.print(((P150 * Q150) + (P100 * Q100)), 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((Q100 << 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 100Ohm: "); Serial.print((c & 0b01110000)>>4); Serial.println(" was recieved."); } }