Prezentarea pe scurt a proiectului:
În funcția de setup() îmi inițializez seriala și lcd-ul, îmi setez modul fiecărui pin pe care îl folosesc, setez întreruperile necesare și încarc datele în vectorul de conturi.
Întreruperea generată de apăsarea butonului pentru a începe procesul de criptare al datelor. După ce generez noua cheie de criptare, folosindu-mă de senzorul de distanță cu ultrasunete, verific dacă datele nu sunt deja criptate, caz în care le voi decripta folosind vechea cheie, urmând ca pe urmă sa le criptez cu noua cheie. Am introdus și un debounce de 200ms pentru a nu înregistra aceeași apăsare a butonului de două ori.
Întreruperea generată de apăsarea butonului din joystick care începe procesul de decriptare al datelor alese și trimiterea lor pe interfața serială. Asemănator întreruperii precedente, am adăugat un mecanism de debouncing.
Funcția de criptare, care primește valoarea ce trebuie criptată și cheia după care criptează. Deoarece bibliotecile cu funcții de criptare ocupă foarte mult din memoria dispozitivului, am ales să îmi implimentez propriul algoritm de criptare, bazat pe shiftarea caracterelor, asemănător Cifrului lui Cezar.
Funcția de decriptare, care primeste o valoare criptată și cheia cu care să decripteze. Aici fac shiftarea inversă față de cea din funcția encrypt().
Funcția principală, care se execută într-o buclă infinită și se ocupa de coordonarea modulelor. Aici se regăsește si logica de alegere a contului, pe baza inputului de la joystick cât și afișarea mesajelor pe ecranul LCD.
Întrucât placa de dezvoltare Arduino Uno nu poate fi folosită ca un HID, am creat un wrapper scris in Python care citește informațiile transmise de arduino pe interfața serială și lansează o pagină de Chrome pentru site-ul respectiv unde completează credențialele cu informațiile primite. Acest wrapper a fost testat atât pe Windows cât și pe Linux.
În general nu am întâmpinat probleme în implementare. Mi-am bătut capul cu un folosirea Arduino Uno ca tastatură, însă modelul de placă pe care l-am achiziționat nu permite configurarea chipului de contrul USB, așa că a trebuit să improvizez, creându-mi un wrapper în Python care ascultă pe interfața serială (un Serial Monitor) și când primește date completează unde trebuie, în funcție de site. Asta m-a limitat la numărul de conturi pe care îl adaug, deoarece logarea pe fiecare site se face diferit și trebuie scrisă o nouă funcție în wrapper pentru fiecare site nou pe care îl introduc.