Моторчик с кнопкой.

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

  1. Peter29rus

    Peter29rus Нуб

    Задача стоит такая:

    Собрать схему с двигателем и кнопкой. При нажатии и удерживании кнопки 3 секунды, двигатель должен включаться, при одиночном нажатии - выключаться.

    Схему я собрал, а вот с кодом возникли проблемы.
    Когда загружаю код в ардуино, мотор ждет 3 секунды и запускается сам без нажатия кнопки, а если кнопку нажать когда мотор работает, то он выключится, но потом снова через 3 секунды включается! А мне нужно, чтобы, удерживая кнопку 3 секунды мотор включался, а при одиночном нажатии выключался. Помогите с кодом пожалуйста.

    Код (C++):
    int ButtonPin = 2;
    int motorPin = 11;
    boolean ButtonState = LOW;
    boolean motorState = LOW;
    unsigned long pressed_moment;
    #define pressed_long 3000

    void setup()
    {
    pinMode(ButtonPin, INPUT);
    pinMode(motorPin, OUTPUT);

    }

    void loop()
    {
    ButtonState = digitalRead(ButtonPin);
    if (ButtonState == HIGH)
    {
    pressed_moment = millis();
    }
    else
    {
    if ((millis() - pressed_moment) < pressed_long)
    {
    digitalWrite(motorPin, LOW);
    }
    else
    {
    digitalWrite(motorPin, HIGH);
    pressed_moment = 0;
    }
    }
    }
     
  2. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    вот
    Код (C++):
    #define BUTTON 2
    #define MOTOR 11

    unsigned long pressed_moment;
    #define  pressed_long 3000
    boolean motorState = false;
    boolean ButtonState = false;

    void setup() {
      // put your setup code here, to run once:
      pinMode(MOTOR, OUTPUT);
    }

    void loop() {
      // put your main code here, to run repeatedly:
      pressed_moment = pulseIn(BUTTON, HIGH) / 1000;
      if(pressed_moment > pressed_long){
        motorState = true;
        digitalWrite(MOTOR, HIGH);
      }
      else {
        motorState = false;
        digitalWrite(MOTOR, LOW);
      }
      do{
      ButtonState = digitalRead(BUTTON);
      }while(ButtonState);
        motorState = false;
        digitalWrite(MOTOR, LOW);
    }
    про pulseIn() можете почитать тут:
    http://arduino.ru/Reference/PulseIn
     
    Peter29rus, Mestniy, ImrDuke и ещё 1-му нравится это.
  3. Peter29rus

    Peter29rus Нуб

    Спасибо большое!