\section{Υλοποίηση}

Αρχικά τροποποιήθηκε το project στο εργαλείο redBlocks, όπου με χρήση του γραφικού περιβάλλοντος έγινε προσθήκη ενός νέου κουμπιού START. Για την επίτευξη αυτού δημιουργήθηκε αρχικά ένα νέο digital input interface και έπειτα έγινε χρήση του interface σε ένα νέο view component.

Τα μέρη του κώδικα που τροποποιήθηκαν είναι:

\begin{itemize}
	
	\item το header file \inlcode{LowLevelPlatform.h}
	\item το header file \inlcode{PlatformCallbacks.h}
	\item το source file \inlcode{Application.cpp}
	\item το source file \inlcode{main.cpp}
	\item το source file \inlcode{VendingMode.cpp}
\end{itemize}

Αρχικά, στο header \inlcode{LowLevelPlatform.h} προστέθηκε ένα νέο type definition για το κουμπί \inlcode{StartButton}. Έπειτα, στο ίδιο αρχείο, το \inlcode{StartButton} προστέθηκε στη λίστα των digital inputs ενώ έγινε ρύθμιση για trigger με θετική αιχμή.

Στο αρχείο \inlcode{PlatformCallbacks.h} προστέθηκε ο ορισμός μία \inlcode{extern “C”} συνάρτησης με όνομα \inlcode{onStartPressed}. Ο ορισμός αυτό χρησιμοποιήθηκε ως callback για το κουμπί \inlcode{StartButton}.

Στο αρχείο \inlcode{Application.cpp} προστέθηκε η γραμμή \inlcode{Platform::StartButton::enableCallback()} με σκοπό την ενεργοποίηση του callback που ορίσαμε στο αρχείο \inlcode{PlatformCallbacks.h}.

Η υλοποίηση της συνάρτησης \inlcode{onStartPressed} έγινε στο αρχείο \inlcode{main.cpp}. H callback αυτή είναι πολύ απλή και αλλάζει μία global boolean μεταβλητή με όνομα \inlcode{should\_continue} σε true.

Άλλες τροποποιήσεις που έγιναν στο αρχείο είναι η προσθήκη ενός βρόχου μέσα στη main ο οποίος καλεί τη \inlcode{\_\_WFI} (wait for interrupt). Ο βρόχος έχει τοποθετηθεί πριν το run του application και γίνεται έξοδος μόνο όταν η μεταβλητή \inlcode{should\_continue} γίνει true. Έτσι το πρόγραμμα ξεκινά μόνο αφού πατηθεί το κουμπί start. Τέλος, στο αρχείο αυτό προστέθηκε επίσης η συνάρτηση \inlcode{getChange} η οποία δέχεται ως ορίσματα τα χρήματα που έχει δώσει ο χρήστης και την τιμή του αντικειμένου που επέλεξε, ώστε να υπολογίσει τα ρέστα τα οποία τυπώνει στο debug log.

Στο source file \inlcode{VendingMode.cpp} έγινε χρήση της \inlcode{getChange} στα κατάλληλα σημεία ώστε να γίνει ο υπολογισμός των ρέστων. Τα σημεία αυτά, είναι η συνάρτηση \inlcode{onCoinsInserted} και συγκεκριμένα στην περίπτωση που ο χρήστης έχει ήδη επιλέξει ποτό και η συνάρτηση \\ \inlcode{onProductButtonPressedEvent} όταν ο χρήστης έχει ήδη εισάγει χρήματα.

