Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:drtranca:vending.machine [2023/05/26 12:02]
mdumitrascu1902 [Rezultate Obţinute]
pm:prj2023:drtranca:vending.machine [2023/05/26 13:51] (current)
mdumitrascu1902 [Software Design]
Line 65: Line 65:
 Surse şi funcţii implementate:​\\ ​ Surse şi funcţii implementate:​\\ ​
 La unul dintre microcontrollere sunt conectate LCD-ul, RFID Reader-ul și tastatura. Logica este implementată într-un switch case în funcție de tasta apăsată, deoarece fiecare determină altă acțiune în continuare.\\ ​ La unul dintre microcontrollere sunt conectate LCD-ul, RFID Reader-ul și tastatura. Logica este implementată într-un switch case în funcție de tasta apăsată, deoarece fiecare determină altă acțiune în continuare.\\ ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​switch_case_uc1.png?​nolink&​800x400 |}}
  * Mesajele ce sunt afișate pe LCD sunt structurate în funcții, apelându-se cea potrivită pentru fiecare scenariu de funcționare în parte (void LCDPrintChoices(),​ void LCDPrintChoiceError(),​ void LCDReset(), void LCDPrintNotEnoughMoney()).\\ ​  * Mesajele ce sunt afișate pe LCD sunt structurate în funcții, apelându-se cea potrivită pentru fiecare scenariu de funcționare în parte (void LCDPrintChoices(),​ void LCDPrintChoiceError(),​ void LCDReset(), void LCDPrintNotEnoughMoney()).\\ ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_functie_afisare.png?​nolink&​600x300 |}}\\ 
 +Instrucțiunile afișate sunt diferite în funcție de scenariul de funcționare (de exemplu, refill activat sau nu ^)
  * Citirea și verificarea cardului prin modulul RFID se fac într-o funcție separată (bool validateCard()).\\ ​  * Citirea și verificarea cardului prin modulul RFID se fac într-o funcție separată (bool validateCard()).\\ ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_citire_card.png?​nolink&​700x300 |}}\\ 
 +Pentru validarea cardului ^ se verifică dacă a fost apropiat în maxim 10 secunde, dacă se poate citi. \\ 
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_validare_card.png?​nolink&​400x100 |}} \\ 
 +Dacă verificările menționate anterior sunt trecute se citește ID-ul și se compară cu singurul ID care permite continuarea funcționării ^.
  * Trimiterea informațiilor despre motorul care trebuie să fie pus în mișcare și sensul lui de rotație, cât și actualizarea datelor precum stocul sau soldul de pe card se realizează printr-o funcție dedicată (void chooseAction(byte messageVend,​ byte messageRefill,​ int s, int p)) \\   * Trimiterea informațiilor despre motorul care trebuie să fie pus în mișcare și sensul lui de rotație, cât și actualizarea datelor precum stocul sau soldul de pe card se realizează printr-o funcție dedicată (void chooseAction(byte messageVend,​ byte messageRefill,​ int s, int p)) \\ 
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_trimitere_mesaj_seriala.png?​nolink&​700x300 |}} \\ 
 +În funcție de scenariul de funcționare,​ selectat anterior prin apăsarea sau nu a tastei 0, fie se transmite mesaj de refill, fie de vend către celălalt microcontroller,​ actualizându-se stocul de fiecare dată. ​
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_validare_plata.png?​nolink&​500x300 |}}\\ 
 +Dacă se livrează băutura se verifică soldul și dacă plata a putut fi efectuată ^.
 \\  \\ 
 Pentru microcontroller-ul ce controlează motoarele, întreaga logică este bazată pe un switch case în funcție de mesajul primit prin UART de la celălalt microcontroller (prin funcția chooseAction menționată mai sus). \\  Pentru microcontroller-ul ce controlează motoarele, întreaga logică este bazată pe un switch case în funcție de mesajul primit prin UART de la celălalt microcontroller (prin funcția chooseAction menționată mai sus). \\ 
- * Sensul de rotație este determinat de polarizarea bornelor motoarelor printr-funcție ​dedicată (void defineRotation(byte highTerminal,​ byte lowTerminal)).+{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​switch_case_uc2.png?​nolink&​800x400 |}} 
 +Se verifică dacă pe serială s-a primit un mesaj, iar dacă da, în funcție ​de acesta este apelată funcția ​void defineRotation(byte highTerminal,​ byte lowTerminal) ​cu anumiți parametri astfel încât să se activeze motorul potrivit în sensul de rotație corespunzător. 
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_activare_rotatie.png?​nolink&​700x100 |}}
  * Tot aici am implementat rutinele de tratare ale întreruperilor provenite de la buton și de la senzorul (fotorezistența) care semnalează căderea dozei.  * Tot aici am implementat rutinele de tratare ale întreruperilor provenite de la buton și de la senzorul (fotorezistența) care semnalează căderea dozei.
 +{{ :​pm:​prj2023:​drtranca:​pm:​prj2023:​cb:​dumitrascu_mihaela:​exemplu_rutina_intrerupere.png?​nolink&​600x200 |}}
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
pm/prj2023/drtranca/vending.machine.1685091771.txt.gz · Last modified: 2023/05/26 12:02 by mdumitrascu1902
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0