Сканер отпечатков пальцев Arduino останавливает цикл после регистрации или удаления
Как остановить цикл при регистрации отпечатка пальца в модуле?
Цикл зависает при регистрации отпечатка пальца, хотя это уже было сделано. Результат, который я хочу, был после регистрации отпечатка пальца, он выйдет из цикла регистрации и запустит команду переключения по умолчанию. Заранее спасибо.
Вот мой код петли.
void loop() {
//
if (Serial.available() > 0) {
// прочитать входящий байт:
command = Serial.read();
// скажите, что у вас есть:
Serial.print("I received: ");
Serial.println(command);
}
switch (command) {
case 'A':
{
Serial.println("Ready to enroll a fingerprint!");
Serial.println("Please type in the ID # (from 1 to 127) you want to save this finger as...");
id = readnumber();
if (id == 0) {// ID #0 не разрешен, попробуйте еще раз!
return;
}
Serial.print("Enrolling ID #");
Serial.println(id);
while (! getFingerprintEnroll() );
}
break;
case 'B':
{
Serial.println("Case 2");
}
break;
default:
{
getFingerprintDoorLoob();
delay(50);
}
break;
}
}
Вот регистрационный код отпечатка пальца:
uint8_t getFingerprintEnroll() {
int p = -1;
Serial.print("Waiting for valid finger to enroll as #"); Serial.println(id);
while (p != FINGERPRINT_OK) {
p = finger1.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.println(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}
// ОК, успех!
p = finger1.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
Serial.println("Remove finger");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = finger1.getImage();
}
Serial.print("ID "); Serial.println(id);
p = -1;
Serial.println("Place same finger again");
while (p != FINGERPRINT_OK) {
p = finger1.getImage();
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image taken");
break;
case FINGERPRINT_NOFINGER:
Serial.print(".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
break;
case FINGERPRINT_IMAGEFAIL:
Serial.println("Imaging error");
break;
default:
Serial.println("Unknown error");
break;
}
}
// ОК, успех!
p = finger1.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
Serial.println("Image converted");
break;
case FINGERPRINT_IMAGEMESS:
Serial.println("Image too messy");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
Serial.println("Communication error");
return p;
case FINGERPRINT_FEATUREFAIL:
Serial.println("Could not find fingerprint features");
return p;
case FINGERPRINT_INVALIDIMAGE:
Serial.println("Could not find fingerprint features");
return p;
default:
Serial.println("Unknown error");
return p;
}
// ОК сконвертировано!
Serial.print("Creating model for #"); Serial.println(id);
p = finger1.createModel();
if (p == FINGERPRINT_OK) {
Serial.println("Prints matched!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_ENROLLMISMATCH) {
Serial.println("Fingerprints did not match");
return p;
} else {
Serial.println("Unknown error");
return p;
}
Serial.print("ID "); Serial.println(id);
p = finger1.storeModel(id);
if (p == FINGERPRINT_OK) {
Serial.println("Stored!");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
Serial.println("Communication error");
return p;
} else if (p == FINGERPRINT_BADLOCATION) {
Serial.println("Could not store in that location");
return p;
} else if (p == FINGERPRINT_FLASHERR) {
Serial.println("Error writing to flash");
return p;
} else {
Serial.println("Unknown error");
return p;
}
}
Это был текущий результат, я ожидаю, что после его сохранения цикл прервется. пожалуйста помогите спасибо
@Time Gold, 👍2
Обсуждение1 ответ
Я вижу здесь проблему. Теперь обратите внимание
если(Serial.available>0)
{
//Блок операторов
Закрывающая скобка для этого оператора if должна стоять после оператора switch()
.
Для каждой итерации (void loop()
) ваша переменная command
запускает переключатель и вызывает функцию регистрации.
Так и должно быть:
если (Serial.available>0){
//Блок операторов
Переключить(команда){
//Блок операторов
Надеюсь, это помогло
этот результат был тем же самым, что я хочу, было после цикла регистрации, тогда он сломается, но результат был после регистрации отпечатка пальца, цикл снова начнется в цикле регистрации., @Time Gold
- Почему Adafruit motor shield не крутит моторы?
- Статус выхода 1 ожидаемое первичное выражение перед ']' Arduino
- Библиотека программных материалов для плат SAMD
- Определение относительно точной скорости с помощью ИДУ
- Adafruit RTC begin() не возвращает false
- Код датчика отпечатков пальцев некорректно работает с LCD дисплеем 16x2
- Двигатель постоянного тока не вращается, издается звуковой сигнал, а также присутствует запах гари.
- Совместное использование RFID и датчика отпечатков пальцев
вы должны дать циклу while статус выхода, @jsotola