Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 20 из 20

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    торпедопек Аватар для Urvin
    Регистрация
    15.10.2009
    Возраст
    38
    Сообщений
    43
    Вес репутации
    205

    По умолчанию Re: Программный триггер с фильтром дребезга

    Код:
    unsigned char button_state;
    unsigned char old_button_state;
    
    #define BUTTON_PIN 0
    #define RELAY_PIN 1
    void setup()
    {
        button_state = digitalRead(BUTTON_PIN);
        trigger_relay = 0;
    }
    void loop()
    {
        button_state = digitalRead(BUTTON_PIN);
    
        if (button_state != old_button_state)
        {
            if (button_state == 0)
            {
                if (digitalRead(RELAY_PIN) == 1) digitalWrite(RELAY_PIN, 0);
                else digitalWrite(RELAY_PIN, 1);
            }
    
            old_button_state = button_state;
        }
    }
    Последний раз редактировалось Urvin; 20.11.2009 в 16:54.

  2. #2
    Новичок
    Регистрация
    25.01.2008
    Сообщений
    10
    Вес репутации
    220

    По умолчанию Re: Программный триггер с фильтром дребезга

    Цитата Сообщение от Urvin Посмотреть сообщение
    ....
    [/code]
    Не работает. Что-то подобное я сам написал.
    Последний раз редактировалось TroyTQ; 20.11.2009 в 17:43.

  3. #3
    Местный
    Регистрация
    04.08.2009
    Возраст
    44
    Сообщений
    184
    Вес репутации
    236

    По умолчанию Re: Программный триггер с фильтром дребезга

    Для начала что за кнопка ? я думаю о физической кнопке. Может она у вас программная на мониторе ?

    Я иммею ввиду

    22.3777
    23.3777
    2114.3777

    Если кнопка физическая самое простое решение вашей проблемы.

    Последний раз редактировалось oops1; 20.11.2009 в 18:12.

  4. #4
    Новичок
    Регистрация
    25.01.2008
    Сообщений
    10
    Вес репутации
    220

    По умолчанию Re: Программный триггер с фильтром дребезга

    Цитата Сообщение от oops1 Посмотреть сообщение
    Для начала что за кнопка ? я думаю о физической кнопке. Может она у вас программная на мониторе ?
    Так точно, физическая. Маленькая смд кнопка.... Неужели трудно поверить, ну не могу я ее заменить. Стал бы городить огород...

  5. #5
    Местный
    Регистрация
    04.08.2009
    Возраст
    44
    Сообщений
    184
    Вес репутации
    236

    По умолчанию Re: Программный триггер с фильтром дребезга

    Я не предлагал поменять кнопку

  6. #6
    Новичок
    Регистрация
    25.01.2008
    Сообщений
    10
    Вес репутации
    220

    По умолчанию Re: Программный триггер с фильтром дребезга

    Цитата Сообщение от oops1 Посмотреть сообщение
    Я не предлагал поменять кнопку
    Сорри, моя вина. Не доглядел.

    Спасибо за Ваше предложение решения проблемы. Если честно, то я даже не знал о существовании таких реле.

    Но я хотел бы оставить кнопку и реле неизменными в моей задаче. Поясню. Программист из меня, как видно, никакой (учусь ), но что-то мне подсказывает, что не должно быть сложно написать код управления. Исходя из выше сказанного и того, чтоу меня есть куча реле, свободные каналы на контроллере, предположу, что выбранный путь - самый лучший. Мне просто нужна помошь в написании кода. Еще одним плюсом является универсальность. Не удивлюсь, что через полгода придумаю что-то новое - и надо только поменять код (например, управлять этой же реле контроллером по некоторому алгоритму и по кнопке параллельно). Возможно я и ошибаюсь. Время покажет.
    Еще раз, спасибо за Ваш вариант.

  7. #7
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Программный триггер с фильтром дребезга

    Вот код накидал в спешке, оптимизировать некогда , сейчас убегаю.
    Состояние реле будет видно на светодиоде D13
    Кнопка подключается на D12 и на GND
    PHP код:
    unsigned char  button_state;
    unsigned char  button_mem;

    #define BUTTON 12
    #define RELAY 13
    void setup()
    {
      
    pinMode(RELAY,OUTPUT); 
      
    pinMode(BUTTON,INPUT);
      
    digitalWrite(BUTTONHIGH); //подключить внутренний подтягивающий резистор
    }
    void loop()
    {
        
    button_state digitalRead(BUTTON); //прочитать состояние кнопки
        
    delay(30); // пауза для проверки дребезга 
        
    if (digitalRead(BUTTON) == LOW && button_state == LOW  &&  button_mem == 0)
        {
           
    digitalWrite(RELAYHIGH); 
           
    button_mem=255;  //запомнить состояние реле
           
    while(digitalRead(BUTTON) == LOW){ delay(10);}//ждем отпускания кнопки
        
    } else 
            {
              if (
    digitalRead(BUTTON) == LOW && button_state == LOW  &&  button_mem == 255)
              {
               
    digitalWrite(RELAYLOW); 
                
    button_mem=0//запомнить состояние реле
               
    while(digitalRead(BUTTON) == LOW){ delay(10);}//ждем отпускания кнопки
              
    }
            }   

    Последний раз редактировалось Chip; 23.11.2009 в 01:06.

  8. #8
    Новичок
    Регистрация
    25.01.2008
    Сообщений
    10
    Вес репутации
    220

    По умолчанию Re: Программный триггер с фильтром дребезга

    Цитата Сообщение от Chip Посмотреть сообщение
    Вот код накидал в спешке, оптимизировать некогда , сейчас убегаю.
    Состояние реле будет видно на светодиоде D13
    Кнопка подключается на D12 и на GND

    Все работает. Спасибо.

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •