Arduino Leonardo не печатает ничего на последовательный монитор с моим конкретным кодом

Я сделал проект с Arduino Leonardo и датчиком отпечатков пальцев (DY50). Когда я загрузил пример регистрации из библиотеки отпечатков пальцев Adafruit и сохранил свой отпечаток, все сработало. Но когда я загружаю свой код, он ничего не печатает.

Мой код

#include <Keyboard.h>
#include <Adafruit_Fingerprint.h>
#define mySerial Serial1

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
int fingerprintID = 0;
String inData;
bool isRight;
int pos;

//Количество сервисов для входа
#define servNum 5

//URL для входа в Google, Amazon, Stackoverflow, Arduino и Github
String LogInURL[] = {"https://accounts.google.com/signin", "https://www.amazon.de/ap/signin", "https://stackoverflow.com/users/login", "https://login.arduino.cc/", "https://github.com/login"};
String LogInUser[] = {"[email protected]", "[email protected]", "[email protected]", "username", "username"};
String LogInPwd[] = {"password", "password", "password", "password", "password"};

void donothing() {};

void StepsBefore(int serviceNum){
  switch(serviceNum){
    case 0: donothing(); break;
    case 1: donothing(); break;
    case 2: for(int k=0; k<18; k++) Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); break;
    case 3: for(int k=0; k<2; k++) Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); break;
    case 4: donothing(); break;
    default: Serial.println("Error: Number not recognized."); break;
  }
}

void StepsAfter(int serviceNum){
  switch(serviceNum){
    case 0: Keyboard.println(); break;
    case 1: Keyboard.println(); break;
    case 2: Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); break;
    case 3: Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); break;
    case 4: for(int k=0; k<2; k++) Keyboard.press(KEY_TAB); Keyboard.release(KEY_TAB); break;
    default: Serial.println("Error: Number not recognized."); break;
  }
}

int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;
  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;
  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  Serial.print("Found ID #"); 
  Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); 
  Serial.println(finger.confidence);
  return finger.fingerID; 
}

void askForFingerprint() {
  fingerprintID = getFingerprintIDez();
    delay(50);
    if(fingerprintID == 1){
      isRight = true;
    }
}

void delAfterChar(String inString, String fromToKill){
  pos = inString.indexOf(fromToKill);
  inString.remove(pos, 1000);
  inData = inString;
}

void setup() {
    Serial.begin(115200);
    Serial.println("Debug 1");
    Keyboard.begin();
    Serial.println("Debug 2");
    finger.begin(57600);
    Serial.println("Debug 3");
    if(finger.verifyPassword()) {
        Serial.println("Found fingerprint sensor!");
    } 
    else {
        Serial.println("Did not find fingerprint sensor :(");
        while (1) { delay(1); }
    }
}
void loop() {
  inData = Serial.read();
  delAfterChar(inData, "?openid"); //Amazon
  delAfterChar(inData, "/v2/"); //Google
  delAfterChar(inData, "?ssrc"); //Stackoverflow
  delAfterChar(inData, "login?state"); //Arduino
    for (int i=0; i<servNum; i++){
     if(inData == LogInURL[i]){
        askForFingerprint();
        if(isRight == true){
           StepsBefore(i);
           Keyboard.print(LogInUser[i]);
           StepsAfter(i);
           Keyboard.println(LogInPwd[i]);
        }
        else Serial.println("Finger not recognized");
     }
    }
}

То что я пробовал до сих пор

  • Я изменил скорость передачи данных с 9600 на 15200, не помогло
  • Добавлено несколько отладочных точек в настройках, чтобы проверить там ошибку, ничего не изменилось
  • Загрузил простой Hello World через Serial Monitor Sketch, отлично сработал

Вопрос
В чем может быть проблема? Он компилируется без сообщения об ошибке. Если вы увидите какие-либо ошибки в кодировании, обратная связь будет очень кстати.

ПРАВКА
Использование вместо этого SoftwareSerial тоже не помогло.

, 👍1

Обсуждение

@jsotola Я сделал это, как описано в третьем пункте того, что я уже пробовал. Извините, если это не понятно, я не говорю по-английски., @Python Schlange

добавить while (!Serial); после Serial.begin, @Juraj

Спасибо, @Juraj, совсем забыл об этом. Но почему печать Hello World работала без этого?, @Python Schlange

печать Hello World была в петле? подключение не занимает много времени, но код работает быстро, @Juraj

@Juraj Да, это было., @Python Schlange


1 ответ


Лучший ответ:

1

Как отметил @Juraj, я просто забыл использовать while (!Serial) в настройке, вероятно, потому, что я использую другие платы, которые не нуждаются в этом чаще.

,