Установите значения ползункового потенциометра
Я использую ползунковый потенциометр 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);
}
@dkin, 👍0
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);
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
- Как контролировать скорость двухпроводного вентилятора с помощью Arduino и только потенциометра?
- Как вы справляетесь с дрейфом датчиков?
- Как использовать функцию карты
- Как использовать потенциометр для доступа к данным в двумерном массиве?
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
с 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