Ok here is the code:
#include <Servo.h>
int smoothAnalog(byte pin, int samples) {
unsigned long result = 0;
int tmp;
for(tmp = 0; tmp < samples; tmp++)
result += analogRead(pin);
return result/samples;
}
float get_range_size(float min, float max) {
if (max < 0.0)
return -min + max;
else
return max - min;
}
float value_to_range(int value, float input_min, float input_max, float output_min, float output_max) {
int tmp;
float input_range_size, output_range_size;
input_range_size = get_range_size(input_min, input_max);
output_range_size = get_range_size(output_min, output_max);
if (value < input_min)
value = input_min;
if (value > input_max)
value = input_max;
return (((float)(value-input_min)*output_range_size)/input_range_size) + output_min;
}
Servo servo;
void setup() {
servo.attach(2);
}
void loop() {
int value;
value = smoothAnalog(0, 20);
servo.write((int)value_to_range(value, 700, 850, -90, 90)); // empiric values
Servo::refresh();
delay(10);
}
and the diagram:
