Установите значения ползункового потенциометра

Я использую ползунковый потенциометр Grove (http://wiki.seeedstudio.com/Grove-Slide_Potentiometer) . Как я могу установить potValue так, чтобы максимальное значение было 128?

int potPin= A0;   
int readValue;   
int potValue;  

void setup() {
  pinMode(potPin, INPUT);   
  Serial.begin(9600);       
}

void loop() {
 readValue = analogRead(potPin);   
 potValue = (255./500.) * readValue;  
 Serial.print("You are writing a value of ");   
 Serial.println(potValue);
}

, 👍0


2 ответа


Лучший ответ:

2

Вы можете использовать функцию map, см. https:/ /www.arduino.cc/reference/en/language/functions/math/map/.

Пример: если ваш потенциометр дает значения от 100 до 1000, и вы хотите сопоставить этот диапазон с диапазоном от 0 до 128, вы можете легко написать:

potValue = map(readValue, 100, 1000, 0, 128);

Вероятно, в вашем случае, и если потенциометр "идеален", он возвращает значения от 0 до 1023, и вы можете написать:

potValue = map(readValue, 0, 1023, 0, 128);
,

с potValue = map(readValue, 0, 1023, 0, 128); Я получаю максимальное значение 186., @dkin

Какое максимальное исходное значение вы получите? … вы можете увеличить значение 1023, чтобы принять более высокий максимум (установите его на максимальное значение, которое вы получаете от банка)., @Michel Keijzers

мкс. значение readValue равно 728, @dkin

Согласно документации, карта (728, 0, 1023, 0, 128) должна быть примерно 91. (728/1023*128). Если вы будете использовать карту (значение, 0, 728, 0, 128), вы должны получить значения до 128., @Michel Keijzers

Учтите, что карта использует целочисленную арифметику (усечение). Чтобы получить равномерно расположенные области, вы бы предпочли map (readValue,0,1024, 0,129); (преобразует 0..1023 в 0..128, и все > 1016 покажет 128) ** Если это действительно то, что вы хотите.**, @DataFiddler


3

analogRead() возвращает от 0x0000 до 0x03ff

Если максимальные данные 0x03ff сдвинуть вправо на 3 бита (или разделить на 8), тогда 0x03ff становится 0x007f или 127.

Думаю, это подойдет:

desiredMax = analogRead(A0) >> 3; // делим 1023 max на 8, получается 127 max
,

быстро и просто, но менее читабельно. +1, @dandavis

Менее читаемый? // добавляем комментарий к строке, @CrossRoads

Нет необходимости в (менее читаемом) смещении битов — деление на 8 дает тот же скомпилированный код, что и правые сдвиги (https://godbolt.org/z/V82L6Z), @towe