Stream line code.

Hi
So I try to read from all the six analog pins.
The code gets a bit odd looking, i have a faded memory the code can be done much faster and nicer to look at.
But i cant remember how.
Now its like this
So its basically a copy paste 5 times.
As i recall you could assign them all on one line lik
Int analoginput = (0,1,2,3,4,5);
And the same for the variables and code.
Am i wrong?

[color=#333333][color=#f0e68c][b]int[/b][/color][color=#ffffff] analogInput [/color][color=#ffffff]=[/color] [color=#cd5c5c]0[/color][color=#ffffff];
[/color][color=#ffffff]Int analoginput1 = 0;
//and 4 times more
[/color][color=#f0e68c][b]float[/b][/color][color=#ffffff] vout [/color][color=#ffffff]=[/color] [color=#cd5c5c]0.0[/color][color=#ffffff];
[/color][color=#ffffff]Float vout1= 0.0:
// and 4 times more
[/color][color=#f0e68c][b]float[/b][/color][color=#ffffff] vin [/color][color=#ffffff]=[/color] [color=#cd5c5c]0.0[/color][color=#ffffff];
[/color][color=#ffffff]//5 times more of above line 
[/color][color=#f0e68c][b]float[/b][/color][color=#ffffff] R1 [/color][color=#ffffff]=[/color] [color=#cd5c5c]100000.0[/color][color=#ffffff];[/color] [color=#87ceeb]// resistance of R1 (100K) -see text![/color]
[color=#f0e68c][b]float[/b][/color][color=#ffffff] R2 [/color][color=#ffffff]=[/color] [color=#cd5c5c]10000.0[/color][color=#ffffff];[/color] [color=#87ceeb]// resistance of R2 (10K) - see text![/color]
[color=#f0e68c][b]Float r3 = 100000;
Float r4 = 10000000:
// and 4 time more
int[/b][/color][color=#ffffff] value [/color][color=#ffffff]=[/color] [color=#cd5c5c]0[/color][color=#ffffff];[/color]
[color=#f0e68c][b]void[/b][/color][color=#ffffff] setup[/color][color=#ffffff](){[/color][color=#ffffff]
 pinMode[/color][color=#ffffff]([/color][color=#ffffff]analogInput[/color][color=#ffffff],[/color][color=#ffffff] INPUT[/color][color=#ffffff]);[/color][color=#ffffff]
 lcd[/color][color=#ffffff].[/color][color=#f0e68c][b]begin[/b][/color][color=#ffffff]([/color][color=#cd5c5c]16[/color][color=#ffffff],[/color] [color=#cd5c5c]2[/color][color=#ffffff]);[/color][color=#ffffff]
 lcd[/color][color=#ffffff].[/color][color=#f0e68c][b]print[/b][/color][color=#ffffff]([/color][color=#ffa0a0]"DC VOLTMETER"[/color][color=#ffffff]);[/color]
[color=#ffffff]}[/color]
[color=#f0e68c][b]void[/b][/color][color=#ffffff] loop[/color][color=#ffffff](){[/color]
 [color=#87ceeb]// read the value at analog input[/color][color=#ffffff]
 value [/color][color=#ffffff]=[/color][color=#ffffff] analogRead[/color][color=#ffffff]([/color][color=#ffffff]analogInput[/color][color=#ffffff]);[/color][color=#ffffff]
 vout [/color][color=#ffffff]=[/color] [color=#ffffff]([/color][color=#ffffff]value [/color][color=#ffffff]*[/color] [color=#cd5c5c]5.0[/color][color=#ffffff])[/color] [color=#ffffff]/[/color] [color=#cd5c5c]1024.0[/color][color=#ffffff];[/color] [color=#87ceeb]// see text[/color][color=#ffffff]
 vin [/color][color=#ffffff]=[/color][color=#ffffff] vout [/color][color=#ffffff]/[/color] [color=#ffffff]([/color][color=#ffffff]R2[/color][color=#ffffff]/([/color][color=#ffffff]R1[/color][color=#ffffff]+[/color][color=#ffffff]R2[/color][color=#ffffff]));[/color] 
 [color=#f0e68c][b]if[/b][/color] [color=#ffffff]([/color][color=#ffffff]vin[/color][color=#ffffff]<[/color][color=#cd5c5c]0.09[/color][color=#ffffff])[/color] [color=#ffffff]{[/color][color=#ffffff]
 vin[/color][color=#ffffff]=[/color][color=#cd5c5c]0.0[/color][color=#ffffff];[/color][color=#87ceeb]//statement to quash undesired reading ![/color]
[color=#ffffff]}[/color][color=#ffffff] 
lcd[/color][color=#ffffff].[/color][color=#ffffff]setCursor[/color][color=#ffffff]([/color][color=#cd5c5c]0[/color][color=#ffffff],[/color] [color=#cd5c5c]1[/color][color=#ffffff]);[/color][color=#ffffff]
lcd[/color][color=#ffffff].[/color][color=#f0e68c][b]print[/b][/color][color=#ffffff]([/color][color=#ffa0a0]"INPUT V= "[/color][color=#ffffff]);[/color][color=#ffffff]
lcd[/color][color=#ffffff].[/color][color=#f0e68c][b]print[/b][/color][color=#ffffff]([/color][color=#ffffff]vin[/color][color=#ffffff]);[/color][color=#ffffff]
delay[/color][color=#ffffff]([/color][color=#cd5c5c]500[/color][color=#ffffff]);[/color]
[color=#ffffff]}[/color][/color]

And now without the colour, please.

[ltr][b]int[/b] analogInput = 0;
Int analoginput1 = 0;
//and 4 times more
[b]float[/b] vout = 0.0;
Float vout1= 0.0:
// and 4 times more
[b]float[/b] vin = 0.0;
//5 times more of above line 
[b]float[/b] R1 = 100000.0; // resistance of R1 (100K) -see text!
[b]float[/b] R2 = 10000.0; // resistance of R2 (10K) - see text!
[b]Float r3 = 100000;
Float r4 = 10000000:
// and 4 time more
int[/b] value = 0;
[b]void[/b] setup(){
 pinMode(analogInput, INPUT);
 lcd.[b]begin[/b](16, 2);
 lcd.[b]print[/b]("DC VOLTMETER");
}
[b]void[/b] loop(){
 // read the value at analog input
 value = analogRead(analogInput);
 vout = (value * 5.0) / 1024.0; // see text
 vin = vout / (R2/(R1+R2)); 
 [b]if[/b] (vin<0.09) {
 vin=0.0;//statement to quash undesired reading !
} 
lcd.setCursor(0, 1);
lcd.[b]print[/b]("INPUT V= ");
lcd.[b]print[/b](vin);
delay(500);
}[/ltr]

It could be shorter if you used local variables where they are appropriate, and constant values where they are appropriate.

float variables should not be spelled "Float"

consider

struct LCD {
    void begin (int cols, int rows)  {};
    void setCursor (int col, int row) {};
    void print (const char *s)       { Serial.println (s); };
};

LCD lcd;

byte inps [] = { A0, A1, A2, A3, A4, A5 };
#define N_INPS   sizeof (inps)

int   vals  [N_INPS];
float volts [N_INPS];

float R1 = 100000.0; // resistance of R1 (100K) -see text!
float R2 = 10000.0; // resistance of R2 (10K) - see text!

char s [40];
char t [10];

// -----------------------------------------------------------------------------
void setup(){
    Serial.begin (9600);

    lcd.begin(16, 2);
    lcd.print("DC VOLTMETER");
}


// -----------------------------------------------------------------------------
void loop()
{
    s [0] = 0;
    for (unsigned n = 0; n < N_INPS; n++)  {
        vals  [n] = analogRead (inps [n]);
        volts [n] = 5.0 * (R2 / (R1 + R2)) * vals [n] / 1024.0;

        dtostrf (volts [n], 4, 1, t);
        strcat (s, t);
    }


    lcd.setCursor (0, 1);
    lcd.print (s);

    delay(500);
}

You could use parallel arrays:

const byte PIN_COUNT = 6;
const byte AnalogInputPins[PIN_COUNT] = {A0, A1, A2, A3, A4, A5};
float vouts[PIN_COUNT];
float vins[PIN_COUNT];
float R1s[PIN_COUNT] = {100000.0, 100000.0, 100000.0, 100000.0, 100000.0, 100000.0}; // resistance of R1 (100K) -see text!
int values[PIN_COUNT];

or an array of structures:

const byte PIN_COUNT = 6;
struct Channel
{
  byte AnalogInputPin[PIN_COUNT];
  float vout;
  float vin;
  float R1;
  int value;
} Channels[PIN_COUNT] =
{
  {A0, 0.0, 0.0, 100000.0, 0},
  {A1, 0.0, 0.0, 100000.0, 0},
  {A2, 0.0, 0.0, 100000.0, 0},
  {A3, 0.0, 0.0, 100000.0, 0},
  {A4, 0.0, 0.0, 100000.0, 0},
  {A5, 0.0, 0.0, 100000.0, 0},
}

The structures would result in more readable code.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.