НОВИЧОК нужна помощь с дисплеем

Тема в разделе "Arduino & Shields", создана пользователем vovchik001, 2 дек 2014.

  1. rav_75

    rav_75 Гик

    а зачем вообще конкретно в этом месте? )
    Счетчик - это понятно. Только программе в данный момент не важно, изменился счетчик или нет. Она бежит по кругу, глянула - нажатия нет, не ждет, побежала дальше. А дальше delay() на 10 сек. Т.е. нажатие считывается раз в 10 сек и этот момент надо ловить. Сделайте флаг, по которому программа понимает, что надо обновить экран. Остальное время пусть слушает кнопку.
    И еще, я не заметил где у Вас обновляется значение флага buttonWasUp..
     
  2. vovchik001

    vovchik001 Нерд

    теперь при включении выдается надпись привет агент, потом по первому нажатию выводит сообщение 1 а второе и остальные сообщения выходят только если кнопка нажата и каждый из диодов мигнул по 10 раз. диоды начинают мигать после первого нажатия кнопки и мигают попеременно с интервалом 1 секунда.
     
  3. Salk

    Salk Гик

    rav_75
    Будь те любезны. помогите, пожалуйста, так будет быстрее. Не могу сообразить сейчас. Извините.
     
  4. rav_75

    rav_75 Гик

    Код (Text):
    // Подключаем стандартную библиотеку LiquidCrystal
    #include <LiquidCrystal.h>

    // RS, E, DB4, DB5, DB6, DB7
    LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
    #define BUTTON_PIN  10 // пин Arduino подключенный к кнопке

    int clicks = 0; // текущее кол-во нажатий
    int LED_BUTT = 5; // первый светодиод
    int LED_BUTT1 = 6; // второй светодиод

    boolean ready = false;
    boolean buttonWasUp = true;

    void leds()  //процедура моргания диодами ))
    {
        for(int i = 0; i < 10; i++) // в течении 10 секунд будут мигать светодиоды
        {
            digitalWrite(LED_BUTT, (i+1)%2); // то, меняем состояние светодиодов
            digitalWrite(LED_BUTT1, i%2);
            delay(1000);
        }
        digitalWrite(LED_BUTT, LOW);
        digitalWrite(LED_BUTT1, LOW);
    }

    void setup()
    {
        lcd.begin(16, 2);
        // initialize the LED pin as an output:
        // initialize the pushbutton pin as an input:
        pinMode(BUTTON_PIN, INPUT_PULLUP);
        pinMode(LED_BUTT, OUTPUT);
        pinMode(LED_BUTT1, OUTPUT);
        digitalWrite(LED_BUTT, LOW); // изначально светодиоды не горят
        digitalWrite(LED_BUTT1, LOW);

        // начальное сообщение
        lcd.print("\xa8p\xb8\xb3""e\xbf, A\xb4""e\xbd\xbf !!!"); // текст на экране - "Привет, Агент"
        delay(5000); // Время на прочтение начального сообщения 5сек
    }

    void loop()
    {
        // счетчик нажатий, до 5 раз, потом снова по кругу, каждый раз значение нажатия записывается в переменную
        boolean buttonRead = digitalRead(BUTTON_PIN);
        if (buttonWasUp && !buttonRead)
        {
            delay(10);
            if (!digitalRead(BUTTON_PIN))
            {
                clicks = (clicks + 1) % 5;
                ready = true;  // флаг, что надо обновить экран
            }
        }
        if(ready)
        {
            lcd.clear(); // очистим экран
            ready = false;  //сбрасываем флаг
            switch(clicks)
            {
            case 1:
                lcd.setCursor(0, 1);
                lcd.print("TEXT"); // текст на экране №1
                leds();
                break;

            case 2:
                lcd.setCursor(0, 1); // текст на экране №2
                lcd.print("TEXT2");
                leds();
                break;
            case 3:
                lcd.setCursor(0, 1);
                lcd.print("TEXT3");
                leds();
                break;
            case 4:
                lcd.setCursor(0, 1);
                lcd.print("TEXT4");
                leds();
                break;
            case 0:
                lcd.setCursor(0, 1);
                lcd.print("TEXT5");
                leds();
                break;
            }
        }
        buttonWasUp = buttonRead;
    }
    Чуть-чуть изменил код. Попробуйте так.
     
    Salk нравится это.
  5. vovchik001

    vovchik001 Нерд

    Благодарю! Все заработало! Еще вопрос такой - как думаете, если прикрутить считыватель карт, можно ли будет записать в память номера этих карт и выводить сообщения не подряд а в зависимости от того - какая карта была прочитана?
     
  6. Salk

    Salk Гик

    Да, возможно.