Пожалуйста, помогите дописать код!

Тема в разделе "Arduino & Shields", создана пользователем M0ln1a, 22 мар 2015.

  1. vvr

    vvr Инженерище

    лучше почитать тебе про дребезг контактов кнопки и как с ним бороться
     
  2. M0ln1a

    M0ln1a Гик

    Я про это знаю: delay (10);
     
  3. M0ln1a

    M0ln1a Гик

    У меня полный набор Матрёшка + доп. детали
     
  4. vvr

    vvr Инженерище

    ты лучше делай что старшие говорят и читай литературу
     
  5. M0ln1a

    M0ln1a Гик

    Я так и делаю...
     
  6. vvr

    vvr Инженерище

    скачиваешь и устанавливаешь библиотеку для кнопок "OneButton.h"
    https://github.com/mathertel/OneButton
    все кнопки подключаешь к пинам дуни и земле
    собираешь схему по моему коду или переделывай код сам под свою схему
    кнопка режимов при длительном нажатии обнуляет очки
    у меня всё работает, проверил


    Код (Text):

    ///////////  1 режим бесконечный
    ///////////  2 режим 9 очков
    ///////////  3 режим 21 очко



    #include "OneButton.h"
    #include <LiquidCrystal.h>                // Библиотека LCD
    LiquidCrystal lcd(12, 11, 4, 5, 6, 7);    // Пины экрана

    OneButton button1(14, true);
    OneButton button2(15, true);
    OneButton button3(16, true);    // Кнопка режимов

    #define  LED1  9                // светик победителя 1
    #define  LED2  10                // светик победителя 2
    #define  BUZZ  8                // динамик

    int  P1 =  0;                    // Счёт первого игрока
    int  P2 =  0;                    // Счет второго игрока
    int backLight = 3;

    byte regim = 1;

    void setup()
    {
      button1.attachClick(Click1);
      button2.attachClick(Click2);
      button3.attachClick(Click3);
      button3.attachLongPressStart(LongPressStart3);  /// длительное нажатие
      pinMode(backLight, OUTPUT);
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      pinMode(BUZZ, OUTPUT);
      digitalWrite(backLight, HIGH);
      lcd.begin(16, 2);
      lcd.clear();                          //  очищаем дисплей
      lcd.setCursor(0, 0);  
      lcd.print("R  P1");
      lcd.setCursor(3, 1);
      lcd.print("P2");

    }

    void loop()
    {
      button1.tick();
      button2.tick();
      button3.tick();

      lcd.setCursor(6, 0);                      // Печать счета 1 игрока
      lcd.print(P1);
      lcd.print(" ");
      lcd.setCursor(0, 1);                    // какой сейчас режим
      lcd.print(regim);
      lcd.setCursor(6, 1);
      lcd.print(P2);                          // Печать счета 2 игрока
      lcd.print(" ");
    }

    void Click1()
    {
      P1 = P1 + 1;
      if(P1 >= 9 &&  regim == 2 &&  P1 > P2)
      {
        lcd.setCursor(10, 0);                  
        lcd.print("Game");
        lcd.setCursor(10, 1);
        lcd.print("Over");
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, LOW);
        digitalWrite(BUZZ, HIGH);
        delay(3000);
        P1 =  0;
        P2 =  0;
        lcd.setCursor(10, 0);                  
        lcd.print("    ");
        lcd.setCursor(10, 1);
        lcd.print("    ");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(BUZZ, LOW);
      }
      if(P1 >= 21 &&  regim == 3 &&  P1 > P2)
      {
        lcd.setCursor(10, 0);                  
        lcd.print("Game");
        lcd.setCursor(10, 1);
        lcd.print("Over");
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, LOW);
        digitalWrite(BUZZ, HIGH);
        delay(3000);
        P1 =  0;
        P2 =  0;
        lcd.setCursor(10, 0);                  
        lcd.print("    ");
        lcd.setCursor(10, 1);
        lcd.print("    ");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(BUZZ, LOW);
      }
    }

    void Click2()
    {
      P2 = P2 + 1;
      if(P2 >= 9 &&  regim == 2 &&  P2 > P1)
      {
        lcd.setCursor(10, 0);                  
        lcd.print("Game");
        lcd.setCursor(10, 1);
        lcd.print("Over");
        digitalWrite(LED2, HIGH);
        digitalWrite(LED1, LOW);
        digitalWrite(BUZZ, HIGH);
        delay(3000);
        P1 =  0;
        P2 =  0;
        lcd.setCursor(10, 0);                  
        lcd.print("    ");
        lcd.setCursor(10, 1);
        lcd.print("    ");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(BUZZ, LOW);
      }
      if(P2 >= 21 &&  regim == 3 &&  P2 > P1)
      {
        lcd.setCursor(10, 0);                  
        lcd.print("Game");
        lcd.setCursor(10, 1);
        lcd.print("Over");
        digitalWrite(LED2, HIGH);
        digitalWrite(LED1, LOW);
        digitalWrite(BUZZ, HIGH);
        delay(3000);
        P1 =  0;
        P2 =  0;
        lcd.setCursor(10, 0);                  
        lcd.print("    ");
        lcd.setCursor(10, 1);
        lcd.print("    ");
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(BUZZ, LOW);
      }
    }

    void Click3()
    {
      regim++;    
      if(regim > 3)
      {
        regim = 1;
      }
    }
    void LongPressStart3()
    {
      P1 =  0;
      P2 =  0;
    }










     
     
    Последнее редактирование: 24 мар 2015
  7. vvr

    vvr Инженерище

    ВОТ ТЕБЕ ЕЩЁ ВАРИАНТ
    Код (Text):

    ///////////  1 режим бесконечный
    ///////////  2 режим 9 очков
    ///////////  3 режим 21 очко



    #include "OneButton.h"
    #include <LiquidCrystal.h>                // Библиотека LCD
    LiquidCrystal lcd(12, 11, 4, 5, 6, 7);    // Пины экрана

    OneButton button1(14, true);
    OneButton button2(15, true);
    OneButton button3(16, true);    // Кнопка режимов

    #define  LED1  9                // светик победителя 1
    #define  LED2  10                // светик победителя 2
    #define  BUZZ  8                // динамик

    int  P1 =  0;                    // Счёт первого игрока
    int  P2 =  0;                    // Счет второго игрока
    int backLight = 3;

    byte regim = 1;

    void setup()
    {
      button1.attachClick(Click1);
      button2.attachClick(Click2);
      button3.attachClick(Click3);
      button3.attachLongPressStart(LongPressStart3);  /// длительное нажатие
      pinMode(backLight, OUTPUT);
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      pinMode(BUZZ, OUTPUT);
      digitalWrite(backLight, HIGH);
      lcd.begin(16, 2);
      lcd.clear();                          //  очищаем дисплей
      lcd.setCursor(0, 0);  
      lcd.print("R  P1");
      lcd.setCursor(3, 1);
      lcd.print("P2");

    }

    void loop()
    {
      button1.tick();
      button2.tick();
      button3.tick();

      lcd.setCursor(6, 0);                      // Печать счета 1 игрока
      lcd.print(P1);
      lcd.print(" ");
      lcd.setCursor(0, 1);                    // какой сейчас режим
      lcd.print(regim);
      lcd.setCursor(6, 1);
      lcd.print(P2);                          // Печать счета 2 игрока
      lcd.print(" ");
    }

    void Click1()
    {
      P1 = P1 + 1;
      if(P1 >= 9 &&  regim == 2 &&  P1 > P2)
      {
        END1();
      }
      if(P1 >= 21 &&  regim == 3 &&  P1 > P2)
      {
        END1();
      }
    }

    void Click2()
    {
      P2 = P2 + 1;
      if(P2 >= 9 &&  regim == 2 &&  P2 > P1)
      {
        END2();
      }
      if(P2 >= 21 &&  regim == 3 &&  P2 > P1)
      {
        END2();
      }
    }

    void Click3()
    {
      regim++;    
      if(regim > 3)
      {
        regim = 1;
      }
    }
    void LongPressStart3()
    {
      P1 =  0;
      P2 =  0;
    }

    void END1()
    {
      lcd.setCursor(10, 0);                  
      lcd.print("Game");
      lcd.setCursor(10, 1);
      lcd.print("Over");
      digitalWrite(LED2, HIGH);
      digitalWrite(LED1, LOW);
      digitalWrite(BUZZ, HIGH);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("    ");
      lcd.setCursor(10, 1);
      lcd.print("    ");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(BUZZ, LOW);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("Game");
      lcd.setCursor(10, 1);
      lcd.print("Over");
      digitalWrite(LED2, HIGH);
      digitalWrite(LED1, LOW);
      digitalWrite(BUZZ, HIGH);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("    ");
      lcd.setCursor(10, 1);
      lcd.print("    ");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(BUZZ, LOW);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("Game");
      lcd.setCursor(10, 1);
      lcd.print("Over");
      digitalWrite(LED2, HIGH);
      digitalWrite(LED1, LOW);
      digitalWrite(BUZZ, HIGH);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("    ");
      lcd.setCursor(10, 1);
      lcd.print("    ");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(BUZZ, LOW);
      P1 =  0;
      P2 =  0;
    }
    void END2()
    {
      lcd.setCursor(10, 0);                  
      lcd.print("Game");
      lcd.setCursor(10, 1);
      lcd.print("Over");
      digitalWrite(LED2, HIGH);
      digitalWrite(LED1, LOW);
      digitalWrite(BUZZ, HIGH);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("    ");
      lcd.setCursor(10, 1);
      lcd.print("    ");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(BUZZ, LOW);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("Game");
      lcd.setCursor(10, 1);
      lcd.print("Over");
      digitalWrite(LED2, HIGH);
      digitalWrite(LED1, LOW);
      digitalWrite(BUZZ, HIGH);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("    ");
      lcd.setCursor(10, 1);
      lcd.print("    ");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(BUZZ, LOW);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("Game");
      lcd.setCursor(10, 1);
      lcd.print("Over");
      digitalWrite(LED2, HIGH);
      digitalWrite(LED1, LOW);
      digitalWrite(BUZZ, HIGH);
      delay(1000);
      lcd.setCursor(10, 0);                  
      lcd.print("    ");
      lcd.setCursor(10, 1);
      lcd.print("    ");
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(BUZZ, LOW);
      P1 =  0;
      P2 =  0;
    }














     
     
  8. M0ln1a

    M0ln1a Гик

    А зависит ли от платы, будет работать устройство или нет ( у меня UNO). Экран выключен, кнопки не работают, а светодиоды и зуммер работают не выключаясь. Попробовал оба варианта...
     
  9. vvr

    vvr Инженерище

    если скачал и правильно установил библиотеку OneButton.h и подключил как указано в скетче то всё работает (у меня тоже уно) - ПРОВЕРЕНО
    LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
    OneButton button1(14, true); //// A0
    OneButton button2(15, true); //// A1
    OneButton button3(16, true); //// A2
    #define LED1 9 // светик победителя 1
    #define LED2 10 // светик победителя 2
    #define BUZZ 8
    int backLight = 3;
     
  10. M0ln1a

    M0ln1a Гик

    А если у вас UNO, то откуда взялись 14, 15 и 16 пины:
    OneButton button1(14, true); //// A0
    OneButton button2(15, true); //// A1
    OneButton button3(16, true); //// A2

    Или это не они?
     
  11. vvr

    vvr Инженерище

    Я же специально для тебя это и написал
    А0 14
    А1 15
    А2 16
    И ТАК ДАЛЕЕ
    А3 17
    А4 18
    А5 19
     
  12. M0ln1a

    M0ln1a Гик

    КЛАСС!!! Спасибо огромное вам за советы и коды. Всё получилось просто замечательно! Надеюсь на дальнейшее сотрудничество с вами! Может что нибудь ещё наворотим... :)
     
  13. vvr

    vvr Инженерище

    Ты главное побольше книжек читай умных :D
    Да и повозиться с примерами на WIKI тоже будет полезно и поучительно