Помогите доработать код

Тема в разделе "Arduino & Shields", создана пользователем MontiMonolitov, 16 июн 2017.

  1. MontiMonolitov

    MontiMonolitov Нерд

    Здравствуйте Гуру и мастера, помогите плиз иди дайте направление
    Собираю проект, на фото часть кода
    1. При запуске на экране поочередно горят две картинки
    if(key==0) {
    blinktwice(); Код.jpg
    2. Если нажать на любую клавишу матричной клавиатуры, то картинки должны исчезнуть (экран очиститься), скажем секунд на 10 и появляться набираемые цифры.
    Изучаю команду millis(), но что-то не получается
     
  2. MontiMonolitov

    MontiMonolitov Нерд

    так и не разобрался с ошибкой. вот библиотеки которые использу
    #include <Keypad.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_PCD8544.h>
    При старте картинки горят, при нажатии на кеу, цифры видно но, картинки не сбрасываются
    void blinktwice() { // моргание экраном
    display.clearDisplay();
    display.drawBitmap(0, 0, smileBmp, 84, 44, BLACK);
    display.display();
    delay(1000);

    display.clearDisplay();
    display.drawBitmap(5, 0, smileBmp1, 75, 48, BLACK);
    display.display();
    delay(1000);
    }


    void loop(){
    char key = keypad.getKey();
    if(key==k) {
    if(k==0)
    blinktwice(); // приглашение ввести код
    }
    else {
    display.clearDisplay();
    display.display();
    k=0;
    }

    if (key){
    Serial.println(key);
    display.clearDisplay();
    display.println(key);
    display.display();
     
  3. vvr

    vvr Инженерище

    хотите помощи - правильно вставьте полный отформатированный код и опишите что вы от него собираетесь получить.
    а так вряд ли вам кто что нибудь подскажет.
     
  4. MontiMonolitov

    MontiMonolitov Нерд

    Код (C++):
    #include <Keypad.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_PCD8544.h>
    Adafruit_PCD8544 display = Adafruit_PCD8544(18, 17, 16, 15, 14);

    const unsigned char PROGMEM smileBmp[] = {                                       // картинка1

    };
    const unsigned char PROGMEM smileBmp1[] = {                                   //  картинка2

    };
    const unsigned char PROGMEM smileBmp2[] = {                                     // картинка3

    };
    const byte ROWS = 4; //four rows
    const byte COLS = 4; //three columns
    char keys[ROWS][COLS] = {
      {'1','2','3','A'},
      {'4','5','6','B'},
      {'7','8','9','C'},
      {'*','0','#','D'}
    };
    byte rowPins[ROWS] = {9,8,7,6}; //connect to the row pinouts of the keypad
    byte colPins[COLS] = {13,12,11,10}; //connect to the column pinouts of the keypad

    Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
    String summ;
    String keystr;
    int shet=0;
    byte k = 0;

     
    void setup(){
    display.begin(); // дисплей
    display.clearDisplay();
    display.display();
    display.setContrast(50);       // установка контраста
    display.setTextSize(2);  // установка размера шрифта
    display.setTextColor(BLACK); // установка цвета текста
    display.clearDisplay();
    delay(1000);
       Serial.begin(9600);
       pinMode(2, OUTPUT);
        pinMode(3, OUTPUT);
        pinMode(4, OUTPUT);
      //---------start tone------------
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    tone(10, 800, 200);
      delay(200);
      noTone(10);
      tone(10, 300, 200);
      delay(200);
      noTone(10);
        tone(10, 800, 200);
      delay(200);
      noTone(10);
          tone(10, 300, 200);
      delay(200);
      noTone(10);
          tone(10, 800, 200);
      delay(200);
      noTone(10);
        tone(10, 300, 200);
      delay(200);
      noTone(10);
        tone(10, 800, 200);
      delay(200);
      noTone(10);
          tone(10, 300, 200);
      delay(200);
      noTone(10);
          tone(10, 800, 200);
      delay(200);
      noTone(10);
        tone(10, 300, 200);
      delay(200);
      noTone(10);
        tone(10, 800, 200);
      delay(200);
      noTone(10);
          tone(10, 300, 200);
      delay(200);
      noTone(10);
          tone(10, 800, 200);
      delay(200);
      noTone(10);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
    //-------stop tone------------
    }
    void blinktwice() {             // моргание экраном
        display.clearDisplay();
        display.drawBitmap(0, 0, smileBmp, 84, 44, BLACK);
        display.display();
       delay(1000);

        display.clearDisplay();
        display.drawBitmap(5, 0, smileBmp1, 75, 48, BLACK);
        display.display();
       delay(1000);
    }


    void loop(){
    char key = keypad.getKey();
    if(key==k) {
      if(k==0)
       blinktwice(); // приглашение ввести код
      }
    else {
      display.clearDisplay();
        display.display();
        k=0;
    }

    if (key){
     
        Serial.println(key);
        display.clearDisplay();
        display.println(key);
        display.display();
       
    //---------start tone------------
    digitalWrite(2, HIGH);
      tone(10, 1440, 200);
      delay(200);
      noTone(10);
      digitalWrite(2, LOW);
    //-------stop tone------------
    shet=shet+1;
    if (shet==6){
    summ="";
    keystr="";
    shet=0;
    Serial.println("LONG");
    display.clearDisplay();
        display.println("LONG");
        display.display();
        delay(3000);
        display.clearDisplay();
    display.display();
    //---------start tone------------
      digitalWrite(3, HIGH);
      tone(10, 600, 200);
      delay(200);
      noTone(10);
      digitalWrite(3, LOW);
    //-------stop tone------------
    };
    summ=summ+key;
    Serial.println(summ);
    display.clearDisplay();
        display.println(summ);
        display.display();
    keystr=String(key);

    if (keystr=="#"){
    summ="";
    keystr="";
    shet=0;
    Serial.println("RESET");
    display.clearDisplay();
        display.println("RESET");
        display.display();
       delay(3000);
    display.clearDisplay();
    display.display();

    //---------start tone------------
      digitalWrite(3, HIGH);
      tone(10, 600, 200);
      delay(200);
      noTone(10);
      digitalWrite(3, LOW);
    //-------stop tone------------
    };

    if (keystr=="*"){
    summ="";
    keystr="";
    shet=0;
    Serial.println("ENTER");
    display.clearDisplay();
        display.println("ENTER");
        display.display();
        delay(3000);
        display.clearDisplay();
    display.display();
    //---------start tone------------
    digitalWrite(3, HIGH);
      tone(10, 600, 200);
      delay(200);
      noTone(10);
      digitalWrite(3, LOW);
    //-------stop tone------------
    };

    if (summ=="83B12"){
    Serial.println("PASS OK");
    display.clearDisplay();
        display.println("PASS OK");
        display.display();
        delay(500);
        display.clearDisplay();
        display.drawBitmap(0, 0, smileBmp2, 84, 48, BLACK);
        display.display();
        delay(1000);
    summ="";
    keystr="";
    shet=0;
    //---------start tone------------
    digitalWrite(4, HIGH);
    tone(10, 800, 200);
      delay(200);
      noTone(10);
      tone(10, 300, 200);
      delay(200);
      noTone(10);
        tone(10, 800, 200);
      delay(200);
      noTone(10);
          tone(10, 300, 200);
      delay(200);
      noTone(10);
          tone(10, 800, 200);
      delay(200);
      noTone(10);
        tone(10, 300, 200);
      delay(200);
      noTone(10);
        tone(10, 800, 200);
      delay(200);
      noTone(10);
          tone(10, 300, 200);
      delay(200);
      noTone(10);
          tone(10, 800, 200);
      delay(200);
      noTone(10);
        tone(10, 300, 200);
      delay(200);
      noTone(10);
        tone(10, 800, 200);
      delay(200);
      noTone(10);
          tone(10, 300, 200);
      delay(200);
      noTone(10);
          tone(10, 800, 200);
      delay(200);
      noTone(10);
      digitalWrite(4, LOW);
    //-------stop tone------------

    };


      }
    }
     
  5. MontiMonolitov

    MontiMonolitov Нерд

    код картинок пришлось убрать не помещались
     
  6. fogary

    fogary Гик

    Если я правильно понял, Вы хотите мигать картинками, пока не будет нажата какая-то клавиша. После чего на экран выводится значения с клавиатуры. Через 10 сек после последнего нажатия клавиш, опять начать мигать картинками?

    Такой вариант (схематически):
    Код (C++):
    unsigned long last_key_press = 0;

    void loop(){
      char key = keypad.getKey();

      if(!key){
        if (millis() - last_key_press >= 10000){
          blinktwice();
        }
      } else {
        last_key_press = millis();
     
        // далее обработка нажатий клавиатуры
        ...
      }
    }
     
    arkadyf и Cynep нравится это.
  7. MontiMonolitov

    MontiMonolitov Нерд

    Вот спасибо именно это и хотел, опробавал все работает, есть небольшая сложность с попаданием ввода первой цифры во время работы (blinktwice), но на экране если не попал все отображается и повторное нажатие отключает картинки.
    Спасибо!!!
     
  8. fogary

    fogary Гик

    Попробуйте такой вариант blinktwice()
    Код (C++):
    void blinktwice() {
      static unsigned long last_blink = 0;
      static bool is_first_bmp = true;

      if (millis() - last_blink >= 1000) {
        display.clearDisplay();
        if (is_first_bmp) {
          display.drawBitmap(0, 0, smileBmp, 84, 44, BLACK);
        } else {
          display.drawBitmap(5, 0, smileBmp1, 75, 48, BLACK);
        }
        display.display();

        last_blink = millis();
        is_first_bmp = !is_first_bmp;
      }
    }
     
    arkadyf нравится это.
  9. MontiMonolitov

    MontiMonolitov Нерд

    Вот теперь вообще четко работает, Спасибо