One led voltmeter (Part 1)

Part 1, 2, 3, 4

This is a minimal voltmeter which reads the signal from one of the analog ports and converts its value in to a sequence of led flashes. Long flashes for volts, short flashes for tenths of volts.

/*
One led voltmeter or 'the voltmeter of the poor'
Reads analog port 0 from a bare Arduino board
Count long lasting flashes for volts and short lasting flashes for tenths of volts
The routine will also print value on serial comm port

No warranty, no claims, just fun
Didier Longueville invenit et fecit May 2010
*/
int inputVoltagePin = 0;               

void setup(){
  DDRB  |=  (1 << PINB5); // Led pin
  PORTB &= ~(1 << PINB5); // Turn led off
  // blink status led
  toggleLed(5, 100, 100);
  Serial.begin(115200);
  Serial.println("Ready");
}

void toggleLed(int cycles,int onTime, int offTime) {
  for(int i=0; i < cycles; i++){
    PORTB |=  (1 << PINB5); // turn led on
    delay(onTime);
    PORTB &= ~(1 << PINB5); // turn led off
    delay(offTime);
  }
}

void loop(){
  // read voltage value
  int DACValue = analogRead(inputVoltagePin);
  int tenthsVolts = (DACValue*50L) >> 10;
  int integerPart = (tenthsVolts/10);
  int fracPart = (tenthsVolts%10);
  // send formated value to serial comm port
  Serial.print(integerPart, DEC);
  Serial.print(".");
  Serial.print(fracPart, DEC);
  Serial.println(" V");
  delay(1000);                  
  // flash volts
  toggleLed(integerPart, 500, 500);
  // pause
  delay(1000);                  
  // flash hundreths of millivolts
  toggleLed(fracPart, 100, 500);
  // pause between readings
  delay(1000);                  
}

Starting from there, we will try to improve it while keeping the same principle…

Next post on same subject

Leave a Reply

You must be logged in to post a comment.