I put this program together but I am concerned aboutif it will correctly average sensor readings from 4 potentiometers in separate indexes. I need it to average the first then act on the reading, move onto the second and so forth. Does it look like it will work correctly?
edited 1-11-12 new code
const int numReadings = 10;
int lfindex[numReadings]; // the readings from the analog input
int index = 0; // the index of the current reading
int total = 0; // the running total
int average = 0; // the average
int rfindex[numReadings];
int total1 = 0;
int lrindex[numReadings];
int total2 = 0;
int rrindex[numReadings];
int total3 = 0;
int index1 = 0;
int index2 = 0;
int index3 = 0;
int average1 = 0;
int average2 = 0;
int average3 = 0;
// pin assignments
int switchpin = 4;
int lfin = A0;
int rfin = A1;
int lrin = A2;
int rrin = A3;
int man = A4;
int lfout = 3;
int rfout = 5;
int lrout = 6;
int rrout = 9;
// variables start at zero
int switchstate = 0;
int lfpwm = 0;
int rfpwm = 0;
int lrpwm = 0;
int rrpwm = 0;
float manualfactor = 0;
void setup()
{
Serial.begin(9600);
for (int thisReading = 0; thisReading < numReadings; thisReading++)
lfindex[thisReading] = 0;
for (int thisReading = 0; thisReading < numReadings; thisReading++)
rfindex[thisReading] = 0;
for (int thisReading = 0; thisReading < numReadings; thisReading++)
lrindex[thisReading] = 0;
for (int thisReading = 0; thisReading < numReadings; thisReading++)
rrindex[thisReading] = 0;
pinMode (lfout, OUTPUT);
pinMode (rfout, OUTPUT);
pinMode (lrout, OUTPUT);
pinMode (rrout, OUTPUT);
pinMode (switchpin, INPUT);
pinMode (lfin, INPUT);
pinMode (rfin, INPUT);
pinMode (lrin, INPUT);
pinMode (rrin, INPUT);
pinMode (man, INPUT);
}
void loop()
{
int manual = analogRead(man); // operator input potentiomter
manualfactor = float(manual) / 1023;
switchstate = digitalRead(switchpin); // operator on off switch
total= total - lfindex[index];
lfindex[index] = analogRead(lfin);
total= total + lfindex[index];
index = index + 1;
if (index >= numReadings)
index = 0;
average = total / numReadings;
lfpwm = average * manualfactor / 4;
if (switchstate == HIGH) {
analogWrite (lfout, lfpwm);
}
else {
digitalWrite(lfout, LOW);
}
total1= total1 - rfindex[index1];
rfindex[index1] = analogRead(rfin);
total1= total1 + rfindex[index1];
index1 = index1 + 1;
if (index1 >= numReadings)
index1 = 0;
average1 = total1 / numReadings;
rfpwm = average1 * manualfactor / 4;
if (switchstate == HIGH) {
analogWrite (rfout, rfpwm);
}
else {
digitalWrite(rfout, LOW);
}
total2= total2 - lrindex[index2];
lrindex[index2] = analogRead(lrin);
total2= total2 + lrindex[index2];
index2 = index2 + 1;
if (index2 >= numReadings)
index2 = 0;
average2 = total2 / numReadings;
lrpwm = average2 * manualfactor / 4;
if (switchstate == HIGH) {
analogWrite (lrout, lrpwm);
}
else {
digitalWrite(lrout, LOW);
}
total3= total3 - rrindex[index3];
rrindex[index3] = analogRead(rrin);
total3= total3 + rrindex[index3];
index3 = index3 + 1;
if (index3 >= numReadings)
index3 = 0;
average3 = total3 / numReadings;
rrpwm = average3 * manualfactor / 4;
if (switchstate == HIGH) {
analogWrite (rrout, rrpwm);
}
else {
digitalWrite(rrout, LOW);
}
Serial.print(lfpwm);
Serial.print("\t");
Serial.print(rfpwm);
Serial.print("\t");
Serial.print(lrpwm);
Serial.print("\t");
Serial.print(rrpwm);
Serial.print("\t" );
Serial.print(manual);
Serial.print("\t");
Serial.print("");
Serial.println("left front, right front, left rear, right rear, manual input");
}