Помогите с кодом ( проблема решена)

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Sergey72, 7 окт 2016.

  1. Sergey72

    Sergey72 Нуб

    Здравствуйте. Помогите новичку с программой для ардуино нано V3.
    Есть Ардуино нано 3 (китай)
    часы реального времени на базе DS 3231
    жк экран 16\2
    и серво G90
    Нужен скетч на включение сервы раз в сутки в определенное время
    например в 6.00 утра.
    Задача сервы выполнить поворот от 0 до 180 и обратно.
    с механикой все просто, а вот программирование мне не дается.
    P.S. Ответы вроде иди почитай там я уже проходил.
    Ну не пониманию я как это сделать.
    Зарание спасибо всем кто поможет.
     
  2. rkit

    rkit Гуру

    То есть тебе нужно не помочь, а просто сделать за тебя? Такие вещи делаются за деньги.
     
  3. Sergey72

    Sergey72 Нуб

    Я понял уже что тут не хотят помогать. Что ж на нет и суда нет.
    Часть кода у меня есть. время и дата на экран выводятся. а вот как серву по времени запустить я не пойму.
     
  4. rkit

    rkit Гуру

    Нет, это ты не хочешь принимать помощь.
    Если есть где-то уже ответ, его надо пойти и почитать. Чего ты хочешь, чтобы его тебе скопировали в форум и ты тут его читал?
     
  5. rkit

    rkit Гуру

    Конструкция if..else
     
  6. Sergey72

    Sergey72 Нуб

    Слушай дорогой. Если где мне НОРМАЛЬНО ответили бы. То я почитал бы. А то куда не глянь, везде "умные" програмеры сидят. а вот на простой вопрос не могут ответить ничем кроме ссылки. Читал я if...else. Если до меня тупо не доходит как это в коде применить. Обычно, если не доходит, то и просят помощи.
    void loop()
    {

    hours = RTC.get(DS3231_HR,true);
    minutes = RTC.get(DS3231_MIN,false);


    if (hours == 21 && minutes >= 48)

    {

    myservo.write(180);
    delay ( 1000)
    myservo.write(0);
    delay (1000)
    }

    else if (hours == 21 && minutes >= 49)

    {

    myservo1.write(0);

    }
    где ошибка?
     
  7. rkit

    rkit Гуру

    Тут ошибки синтаксические. Их компилятор должен выделять.
     
  8. Sergey72

    Sergey72 Нуб

    Это скопировалось без ( ; )
    ругается на
    myservo.write(0);
     
  9. rkit

    rkit Гуру

    Ну наверное надо выбрать что-то одно
     
  10. Sergey72

    Sergey72 Нуб

    переписал маленько
    void loop()
    {

    if (hours == 21 && minutes >= 48);

    {

    myservo.write(180);
    delay ( 1000);

    myservo.write(1);
    delay (1000);
    }

    else if (hours == 21 && minutes >= 49);

    {

    myservo.write(0);
    delay ( 1000);
    }
    теперь ругается на else if (hours == 21 && minutes >= 49);
    где ошибка? dct () {} ; поставлены где надо
     
  11. Delit

    Delit Нерд

    В конструкции if надо явно указать порядок исполнения операторов (ну по крайне мере в с так)
    if ((hours == 21) && (minutes >= 48))
     
    Sergey72 нравится это.
  12. rkit

    rkit Гуру

    Не ставится тут точка с запятой.
     
    Sergey72 нравится это.
  13. Sergey72

    Sergey72 Нуб

    Поправил, все равно ругается :
    exit status 1
    'else' without a previous 'if'
     
  14. Sergey72

    Sergey72 Нуб

    Ребята вы гении.
    весь код
    #include <Wire.h> // Добавляем необходимые библиотеки
    #include <LiquidCrystal_I2C.h>
    #include <RTC.h>
    #include <Servo.h>
    RTC time;// обьявление переменной время
    Servo myservo;
    int hours;
    int minutes;



    LiquidCrystal_I2C lcd(63,16,2); // Задаем адрес и размерность дисплея
    void setup()
    {
    myservo.attach(9);//цепляем серво к цифровымс выводам
    lcd.begin(); // Инициализация lcd
    lcd.backlight(); // Включаем подсветку

    time.begin(RTC_DS3231); // на базе чипа DS1302, вывод RST, вывод CLK, вывод DAT доступны любые выводы
    // time.settime(20,31,22,01,06,16,1); // 0 сек, 17 мин, 15 час, 1, октября, 2015 года, четверг
    }

    void loop()
    {

    if ((hours == 21) && (minutes >= 48))

    {

    myservo.write(180);
    delay ( 1000);

    myservo.write(1);
    delay (1000);
    }

    else if ((hours == 21) && (minutes >= 49))

    {

    myservo.write(0);
    delay ( 1000);
    }


    if(millis()%1000==0) // если прошла 1 секунда


    lcd.setCursor(3, 0);
    lcd.print(time.gettime("d-m-Y"));// выводим дату
    lcd.setCursor(5, 1);
    lcd.print(time.gettime( "H:i" ));//:s" ));// ( H:i:s, D")); так выглядит если с секундами и днем недели
    delay(10000);


    }
    может кому пригодится включение серво по времени
     
  15. Tomasina

    Tomasina Сушитель лампочек Модератор

    а в чем задумка такого странного сочетания?
    Код (C++):
    if (hours == 21 && minutes >= 48) { // ... }
    else if (hours == 21 && minutes >= 49 { // ... }
    ведь первое условие почти всегда перебивает второе (ну кроме одной минуты в сутки)
     
  16. Sergey72

    Sergey72 Нуб

    защита на лишнее срабатывание. если есть мысли как это улучшить то я только за

    это мой первый подобный код. составлял кусками с примеров
     
  17. Tomasina

    Tomasina Сушитель лампочек Модератор

    напишите словами, как этот фрагмент должен работать.
    Потому что сейчас он работает так:
    с 21:48 делаем ААА (верхняя строчка)
    с 21:49 делаем БББ
    Но и в период с 22:00 по 21:47 (следующих суток) ТОЖЕ делаем БББ ;)
     
  18. Sergey72

    Sergey72 Нуб

    включение в 21:48 серва делает поворот до 180 и возвращается к 1
    в 21:49 серва ставится на 0
    думаю поправлю

    еще час назад я понятие не имел как оно работает. спасибо ребятам помогли
     
  19. Delit

    Delit Нерд

    Вообще то первое условие начнет исполняться в 21ч. 48м. и будет исполняться до 22ч. а else часть вообще ни когда не исполнится :)
     
    Tomasina нравится это.
  20. Sergey72

    Sergey72 Нуб

    МОЖЕТ КТО НИБУДЬ НАПИСАТЬ ЭТОТ КУСОК КОДА? так как надо