1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Кнопки со сложной логикой

Тема в разделе "Arduino", создана пользователем ilay, 6 фев 2016.

Статус темы:
Закрыта.
  1. aman

    aman Завсегдатай

    Сообщения:
    149
    Симпатии:
    10
    вспомнился недавний случай поиска земли, когда бедный препод, не желая сдаваться в борьбе в деле сеяния доброго и светлого, с последней надеждой сказал, что на выходе RS триггера будет ноль, если на входе R установить 0. Землю найти помогли, а тот кто заставил ее искать оказался нехорошим человеком, сам виноват :)
    А триггер? так и остался прямоугольником

    прошу простить за вольность и не принимать серьезно сказанное :)
  2. aman

    aman Завсегдатай

    Сообщения:
    149
    Симпатии:
    10
    блок схема от любителя (непрофессионала), так как входных данных немного, нарисовал как мне хотелось, т.е. пока ЛЕД1 горит, никто не имеет права его перезапустить, при этом ЛЕД2 (кнопка2) можно зажечь когда хочется и на какое угодно время.
    Признаю, что нарушил "условие" (заметил, когда выложил, исправить можно, но зачем), не дословно:"пока не нажата кнопка1 и не отработано соответствующее включение ЛЕД1 - не разрешать нажатие кнопки2", ну и ладно, главное ЛЕД1 горит правильно. :) блок-схема_кнопки.JPG
    Последнее редактирование: 8 фев 2016
  3. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    блин, я всю битву пропустил :arghh:
  4. .ctor

    .ctor В доску свой

    Сообщения:
    712
    Симпатии:
    200
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    короче пользователи группы "в доску свой" очень грубые и плохие пользователи.. :)
    и обижают всех..
    и программы готовые не дают..
    о вообще..)
  5. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    :D
  6. aman

    aman Завсегдатай

    Сообщения:
    149
    Симпатии:
    10
    В рамках изучения МК и Си , для удовлетворения спортивного интереса мой вариант этой темы
    timestart.jpg
    PHP:
    #define F_CPU 8000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h>
    #include <stdbool.h>

    bool f_Downf_TimeStart;
    bool f_BTN1f_BTN2;
    bool f_LED1f_LED2;
    bool f_LED1EN;
    bool i_LED_val;
    unsigned long xTime;
    char temp;

    void initial ()
    {
        
    DDRD 0x03;
        
    DDRB 0x00;
     
        
    PORTD 0x00;
        
    PORTB 0x00;
        return;
    }

    void do_Check_BTN ()
    {
     
        
    f_Down false;
        
    f_BTN1 false;
        
    f_BTN2 false;
     
        
    temp PINB;
     
        if (
    temp & (<< PINB0))
        {
            
    f_BTN1 true;
            
    f_Down true;
        }
        if (
    temp & (1<<PINB1))
        {
            
    f_BTN2 true;
            
    f_Down true;
        }
        return ;
    }


    void do_LED (int i_LED_val )
    {
        switch (
    i_LED_val)
        {
            case 
    1:            // LED1 ON
                
    PORTD |= (<< PD0);
                
    f_LED1 true;
                
    f_LED1EN false;
                break;
            case 
    2:            //LED1 off
                
    PORTD &= ~ (<< PD0);
                
    f_LED1 false;
             
                break;
            case 
    3:            //LED2    On
                
    PORTD |= (<< PD1);
                
    f_LED2 true;
                break;
            case 
    4:            //LED2    Off
                
    PORTD &= ~ (<< PD1);
                
    f_LED2 false;
                break;
        }
        return;
    }

    int main()
    {
        
    initial ();
    START:
        while (
    1)                         
        {
            
    do_Check_BTN ();                // проверить нажатие кнопок
         
            
    if (f_Down == true)                //1
            
    {
                if (
    f_BTN2 == true)            //2
                
    {
                    
    do_LED (3);                //6  зажечь светик 2
                
    }                         
                if (
    f_TimeStart == true)         //7
                
    {
                    goto 
    DEC_TIME;            // перейти на уменьшение счетчика длительности
                
    }                     
                else if (
    f_LED1EN == true)        //9
                
    {                 
                    
    xTime 20000;            //14 
                    
    do_LED (1);                // зажечь свтик 1
                    
    f_TimeStart true;
                    goto 
    START;
                }                 
            }                     
            else
            {
                if (
    f_LED2 == true)
                {
                    
    do_LED (4);                // потушить светик 2
                
    }
                
    f_LED1EN true;
                if (
    xTime 0)
                {
    DEC_TIME:        xTime xTime 1;        //8    уменьшить счетчик
                    
    if (xTime == false)            //10
                    
    {
                        
    do_LED (2);            //17    потушить светик 2
                        
    f_TimeStart false;
                    }
                }
                 
            }
        }                             
    }
    Последнее редактирование модератором: 2 мар 2016
  7. .ctor

    .ctor В доску свой

    Сообщения:
    712
    Симпатии:
    200
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    Похоже вы идете в правильном направлении..
  8. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    а что он получил ? в итоге несколько вариантов кода.... по сути как проблему изложил - так и получил, разве не так ?
  9. koteika

    koteika В доску свой

    Сообщения:
    783
    Симпатии:
    120
    Род занятий:
    программирование
    Данный товарищ послал всех обитателей форума в процессе работы над его вопросом..
  10. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    не пойму как это к вам относится ?
  11. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.354
    Симпатии:
    326
    Адрес:
    Талгар
    блин..... нет слов...
  12. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.489
    Симпатии:
    345
    Адрес:
    Алматы
    Эх, лучше бы я закрыл эту тему раз и навсегда. Ребята, в чем-то мы все начинающие, давайте терпимее относится и стараться не насмехаться над теми, кто только начинает разбираться в определенных вопросах сложных для него по началу. Меня тоже носом тыкали и тыкают до сих пор те, кто знает больше и это нормально - это процесс обучения, будьте терпимее.

    Тему закрываю, т.к. дальше просто флуд пошел. Кто хочет обсудить отношения создавайте переписку и добавляйте в нее всех заинтересованных.
  13. koteika

    koteika В доску свой

    Сообщения:
    783
    Симпатии:
    120
    Род занятий:
    программирование
    В общем я закрываю данный вопрос, так как это конфликт в прошлом и уже решен.
    Просто есть люди которые воспринимают советы, критику, а есть те кто воспринимает в штыки. Топикстартер мог бы и спросить у VN как это сделать и т.д, и не сомневаюсь в том что VN объяснил бы ему по этому вопросу, но топикстартер почему то решил послать всех.
Статус темы:
Закрыта.

Поделиться этой страницей