ввод данных с матричной клавиатуры и моргание светодиодом

finnthegun
Offline
Зарегистрирован: 16.12.2021

Добрый день
Хочу заставить моргать светодиод и одновременно и параллельно с этим работать с клавиатурой (в данном случае вводить пароль)
плата wemos d1r1
перепробовал разные варианты-никак не идет,последний вариант был такой

#include <Keypad.h>
const int ledPin =  D13;// the number of the LED pin
// Variables will change:
int ledState = LOW;             // ledState used to set the LED
// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;        // will store last time LED was updated
// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)
const byte ROWS = 4; //four rows
const byte COLS = 3; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};
byte rowPins[ROWS] = {D2, D3, D4, D5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {D6, D7, D8}; //connect to the column pinouts of the keypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

const String password = "1234"; // change your password here
String input_password;

void setup(){
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  input_password.reserve(32); // maximum input characters is 33, change if needed
}
void loop(){
  }
  char customKey = customKeypad.getKey();
  if (customKey){
    Serial.println(customKey);
    if(customKey == '*') {
      input_password = ""; // clear input password
    } else if(customKey == '#') {
      if(password == input_password) {
        Serial.println("password is correct");
      } else {
        Serial.println("password is incorrect, try again");
      }
      input_password = ""; // clear input password
    } else {
      input_password += customKey; // append new character to input password string
    }
  }
   unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;
    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
}

я подозреваю, что проблема кроется в функции работы с клавиатурой, но из кучи различных вариантов,к сожалению,заработал нормально только этот,и хотелось бы с ним и заставить заработать светодиод
 

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Читай про время жизни переменных.
В строке 49 переменной нужен атрибут static:

static unsigned long currentMillis = millis();

Ну ещё можно объявить переменную глобально