Здравствуйте, делаю автополив для растений. У меня есть насос от 2,5 до 5в, я хотел, чтобы с помощью потенциометра я мог управлять этим напряжением, т.е от 2,5 до 5 вольт пропорционально ручке потенциометра, помогите пожалуйста с кодом. Думаю, что шаблоном может быть этот код // даём разумные имена для пинов со светодиодом // и потенциометром (англ potentiometer или просто «pot») #define LED_PIN 9 #define POT_PIN A0 void setup() { // пин со светодиодом — выход, как и раньше... pinMode(LED_PIN, OUTPUT); // ...а вот пин с потенциометром должен быть входом // (англ. «input»): мы хотим считывать напряжение, // выдаваемое им pinMode(POT_PIN, INPUT); } void loop() { // заявляем, что далее мы будем использовать 2 переменные с // именами rotation и brightness, и что хранить в них будем // целые числа (англ. «integer», сокращённо просто «int») int rotation, brightness; // считываем в rotation напряжение с потенциометра: // микроконтроллер выдаст число от 0 до 1023 // пропорциональное углу поворота ручки rotation = analogRead(POT_PIN); // в brightness записываем полученное ранее значение rotation // делённое на 4. Поскольку в переменных мы пожелали хранить // целые значения, дробная часть от деления будет отброшена. // В итоге мы получим целое число от 0 до 255 brightness = rotation / 4; // выдаём результат на светодиод analogWrite(LED_PIN, brightness); } Но тут от 0в до 5в, а мне надо от 2,5 до 5в. Помогите пожалуйста, буду благодарен!
Здравствуйте, делаю автополив для растений. У меня есть насос от 2,5 до 5в, я хотел, чтобы с помощью потенциометра я мог управлять этим напряжением, т.е от 2,5 до 5 вольт пропорционально ручке потенциометра, помогите пожалуйста с кодом. Думаю, что шаблоном может быть этот код // даём разумные имена для пинов со светодиодом // и потенциометром (англ potentiometer или просто «pot») #define LED_PIN 9 #define POT_PIN A0 void setup() { // пин со светодиодом — выход, как и раньше... pinMode(LED_PIN, OUTPUT); // ...а вот пин с потенциометром должен быть входом // (англ. «input»): мы хотим считывать напряжение, // выдаваемое им pinMode(POT_PIN, INPUT); } void loop() { // заявляем, что далее мы будем использовать 2 переменные с // именами rotation и brightness, и что хранить в них будем // целые числа (англ. «integer», сокращённо просто «int») int rotation, brightness; // считываем в rotation напряжение с потенциометра: // микроконтроллер выдаст число от 0 до 1023 // пропорциональное углу поворота ручки rotation = analogRead(POT_PIN); // в brightness записываем полученное ранее значение rotation // делённое на 4. Поскольку в переменных мы пожелали хранить // целые значения, дробная часть от деления будет отброшена. // В итоге мы получим целое число от 0 до 255 brightness = rotation / 4; // выдаём результат на светодиод analogWrite(LED_PIN, brightness); } Но тут от 0в до 5в, а мне надо от 2,5 до 5в. Помогите пожалуйста, буду благодарен!
воспользуйтесь функцией map Функция пропорционально переносит значение (value) из текущего диапазона значений (fromLow .. fromHigh) в новый диапазон (toLow .. toHigh), заданный параметрами. Функция map() не ограничивает значение рамками диапазона, как это делает функция constrain(). Contrain() может быть использован до или после вызова map(), если необходимо ограничить допустимые значения заданным диапазоном. Обратите внимание, что "нижняя граница" может быть как меньше, так и больше "верхней границы". Это может быть использовано для того чтобы "перевернуть" диапазон: y = map(x, 1, 50, 50, 1); Возможно использование отрицательных значений: y = map(x, 1, 50, 50, -100); Функция map() оперирует целыми числами. При пропорциональном переносе дробная часть не округляется по правилами, а просто отбрасывается.
vlad123419, размещая одинаковые темы в разных разделах, вы засоряете форум и проявляете неуважение к сообществу. Не нужно этого делать, вам и так ответят.