Не получакться написать простейшую программу(,объясните ,что не так пожалуйста!

Тема в разделе "Arduino & Shields", создана пользователем Romeo1, 9 июл 2013.

  1. Romeo1

    Romeo1 Нуб

    Смысл такой :
    при нажатии на кнопку серва должна повернуться на определённый угол(пусть будет 180),при нажатии на неё же(кнопку). вернуться в первоначальное состояние(0 градусов).У Джереми в видеоуроке 2 есть похожий скетч ,но только со светодиодом,поменял кое что,но что-то не так... Объясните что я не так сделал.Заранее благодарен.
    Код (C):
    #include <Servo.h>
    Servo myservo;
    int pos = 0;//Первое положение сервы
    int pos1 = 180;//Второе положение сервы
    int switchPin = 2;//Кнопка подключена к D2
    boolean lastButton = LOW;
    boolean currentButton = LOW;
    boolean servoMax = false;

    void setup()
    {
      myservo.attach(9);//Серва подключена к D9
      pinMode(switchPin,INPUT);//Кнопка как вход
      myservo.write(pos);//Серва встаёт  при стакрте на 0'
    }
    boolean debounce(boolean last)
    {
      boolean current = digitalRead(switchPin);
      if (last !=current)
      {
        delay(5);
        current = digitalRead(switchPin);
      }
      return current;

    }
     
    void loop()
    {
      currentButton = debounce(lastButton);
      if (lastButton == LOW && currentButton == HIGH)
      {
        servoMax = !servoMax;
      }
        lastButton = currentButton;
        myservo.write(pos1);
    }
     
  2. Megakoteyka

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

    Вы в последней строке всегда записываете значение 180, независимо от того, что и как было нажато.
    Видимо, нужно сделать как-то так:
    Код (C):
    myservo.write(servoMax ? 0 : 180);
     
    Romeo1 нравится это.
  3. Romeo1

    Romeo1 Нуб

    Вот спасибо!А что сделала эта строчка?
     
  4. Megakoteyka

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

    Ранее в коде Вы установили переменную servoMax в состояние true или false.
    Строчка эквивалентна такой записи:
    Код (C):
    if(servoMax == true)
      myservo.write(0);
    else
      myservo.write(180);
    А вот статья про тернарный условный оператор.
     
    nailxx нравится это.
  5. Romeo1

    Romeo1 Нуб

    Спасибо Огромное!Очень признателен!Буду учить матчасть,не всё пока даётся....
     
  6. Megakoteyka

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

    Будут проблемы - обращайтесь, тут помогут ;)