Сканер отпечатков пальцев и GSM-модуль - как установить условие таймера с помощью операторов if?

Я использую датчик отпечатков пальцев и GSM-модуль на Arduino MEGA 2560. Я хочу, чтобы отпечатки пальцев сканировались каждую минуту, если проходит минута без сканирования пальца, то должен быть выполнен следующий код GSM для отправки SMS

const unsigned long timeLimit = 60000;
unsigned long prevTime;
unsigned long currTime;

void setup() {
  prevTime = millis();
}

void loop() {
  unsigned long currTime = millis();
  getFingerprintID(); //функция отпечатка
  if (currTime - prevTime <= timeLimit) {
    if (finger.fingerSearch() == FINGERPRINT_OK) { //если отпечаток совпадает
      prevTime = currTime;
    }
  } else {
    Serial.print("MAXIMUM TIME OF ");
    Serial.print(currTime / 1000);
    Serial.print(" SECONDS HAS LAPSED\n");
  }
}

, 👍1

Обсуждение

Подумайте о том, чтобы взглянуть на это https://forum.arduino.cc/t/using-millis-for-timing-a-beginners-guide/483573 Что вам нужно сделать, так это создать таймер, который каждые 60 секунд выполняет нужный вам код и устанавливает флаг, если он был успешным, и на основе этого вы можете делать с GSM все, что вам нужно., @Coder_fox

сделайте что-нибудь вроде этого ... измените код millis в комментарии от @Coder_fox, чтобы увеличивать счетчик каждую секунду ... код millis больше ничего не делает ...... проверьте наличие отпечатков пальцев, если они обнаружены, затем снимите счетчик до нуля, больше ничего не делайте ...... проверьте счетчик, если 60, затем отправьте SMS, @jsotola

@Coder_fox проблема, с которой я сейчас сталкиваюсь, заключается в том, что таймер запускается при запуске кода и истекает в течение 60 секунд, независимо от того, сколько раз отпечаток пальца был отсканирован за этот период времени, @Mtho


1 ответ


1

я убрал твою версию. обязательно обновите переменную prevTime.

const unsigned long timeLimit = 60000;
unsigned long prevTime ;
unsigned long currTime;
unsigned long elapsedTime;
int id;
void setup() {
prevTime=millis();
} 

void loop() {
  if (fingerprint()){
    currTime = millis();
    elapsedTime = currTime- prevTime;
    if (elapsedTime < 60*1000) {
      prevTime = currTime;
    } else {
       sendSms();
    }
  }
}

void sendSms() {
Serial.print("MAXIMUM TIME OF ");
Serial.print(currTime/1000);
Serial.print(" SECONDS HAS LAPSED\n");
}

bool fingerprint(){
  bool fingerPrintAccepted = false;
  if (finger.fingerSearch()==FINGERPRINT_OK){
    fingerPrintAccepted = true;
  }
  return fingerPrintAccepted;
}
,