// This is used with a 4-1/2 digit led voltmeter to operate // 4 range changing relays, and operate the decimal point // on a ICL7135 Ikegawa meter (gift from Thor Ourston) // It had a blown power supply module which was replaced byte overStatus = 0; byte underStatus = 0; const int overRange = 11; const int underRange = 12; int pin = 2; void setup() { // 4 pins for relay coils and 4 for decimal points pinMode(2, OUTPUT); // highest range coil, 1999v pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); // lowest range coil, 1.9999v pinMode(6, OUTPUT); // highest range decimal point pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); // lowest range decimal point pinMode(11, INPUT); // 2 inputs for under and over range from ICL7135 pinMode(12, INPUT); digitalWrite(pin, HIGH); // set for highest range delay (1000); } void loop() { // change pin only if over or under range Status(); if(underStatus == HIGH && pin < 5) { pin = pin + 1; digitalWrite(pin, HIGH); // set for lower range digitalWrite(pin-1, LOW); } Status(); if(overStatus == HIGH && pin > 2) { pin = pin - 1; digitalWrite(pin, HIGH); // set for higher range digitalWrite(pin+1, LOW); } } void Status(){ if(pin == 2){ // set decimal point according to relay selected digitalWrite(6, LOW); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, HIGH); } if(pin == 3){ digitalWrite(6, HIGH); digitalWrite(7, LOW); digitalWrite(8, HIGH); digitalWrite(9, HIGH); } if(pin == 4){ digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, LOW); digitalWrite(9, HIGH); } if(pin == 5){ digitalWrite(6, HIGH); digitalWrite(7, HIGH); digitalWrite(8, HIGH); digitalWrite(9, LOW); } delay (500); overStatus= digitalRead(overRange); underStatus=digitalRead(underRange); }