Код для автополива

Тема в разделе "Arduino & Shields", создана пользователем vlad123419, 26 сен 2015.

  1. vlad123419

    vlad123419 Нерд

    Здравствуйте, делаю автополив для растений.
    У меня есть насос от 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. vlad123419

    vlad123419 Нерд

    Здравствуйте, делаю автополив для растений.
    У меня есть насос от 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в.
    Помогите пожалуйста, буду благодарен!
     
  3. vvr

    vvr Инженерище

    воспользуйтесь функцией 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() оперирует целыми числами. При пропорциональном переносе дробная часть не округляется по правилами, а просто отбрасывается.
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    vlad123419, размещая одинаковые темы в разных разделах, вы засоряете форум и проявляете неуважение к сообществу. Не нужно этого делать, вам и так ответят.
     
  5. vlad123419

    vlad123419 Нерд

    А можете пожалуйста сам код написать или подправить? Заранее спасибо!
     
  6. vvr

    vvr Инженерище

    Влад, ну ты офигел...
    учись, пиши код, если будут проблемки - помогут
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    С такими запросами обращайтесь сюда.