Κατσάρης Κ. Δημήτριος

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Κατσάρης Κ. Δημήτριος"

Transcript

1

2

3 «Εγώ, ο Κατσάρης K Δημήτριος, δηλώνω υπεύθυνα ότι η παρούσα Πτυχιακή Εργασία με τίτλο «Εφαρμογή Εξελιγμένου Διαδικτυακού Ελέγχου Ρομποτικής Πλατφόρμας» είναι προϊόν προσωπικής μελέτης και εργασίας, και βεβαιώνω ότι: Σε όσες περιπτώσεις έχω συμβουλευτεί δημοσιευμένη εργασία τρίτων, αυτό επισημαίνεται με σχετική αναφορά στα επίμαχα σημεία. Σε όσες περιπτώσεις μεταφέρω λόγια τρίτων, αυτό επισημαίνεται με σχετική αναφορά στα επίμαχα σημεία. Με εξαίρεση τέτοιες περιπτώσεις, το υπόλοιπο κείμενο της πτυχιακής αποτελεί δική μου δουλειά. Αναφέρω ρητά όλες τις πηγές βοήθειας που χρησιμοποίησα. Σε περιπτώσεις που τμήματα της παρούσας πτυχιακής έγιναν από κοινού με τρίτους, αναφέρω ρητά ποια είναι η δική μου συνεισφορά και ποια των τρίτων. Όλες οι αναφορές που γίνονται στην Ρομποτική Πλατφόρμα Arduino Robotic Platform, καθώς επίσης και όλες οι αναφορές σε εξαρτήματα, τεχνολογίες, δοκιμές ή κώδικα σχετικά με «Ρομποτική Πλατφόρμα» ή «Πλατφόρμα» ή «Όχημα», συνεπάγονται άμεση αναφορά στην Πτυχιακή Εργασία «Διαδικτυακός Έλεγχος Ρομποτικής Πλατφόρμας», του κ. Νάτσιου Χρήστου, Τμ. Μηχανικών Πληροφορικής Τ.Ε, ΤΕΙ Θεσσαλίας, Εξαιρούνται τα τμήματα όπου αναφέρεται η τροποποίηση, ανάπτυξη και προσθήκη δεδομένων ή πληροφοριών. Αυτά τα τμήματα αποτελούν προϊόν προσωπικής μελέτης και εργασίας. Γνωρίζω πως η λογοκλοπή αποτελεί σοβαρότατο παράπτωμα και είμαι ενήμερος(-η) για την επέλευση των νομίμων συνεπειών» Κατσάρης Κ. Δημήτριος

4 Εγκρίθηκε από την τριμελή εξεταστική επιτροπή Τόπος: Ημερομηνία: ΕΠΙΤΡΟΠΗ ΑΞΙΟΛΟΓΗΣΗΣ

5 i Περίληψη Ζούμε σε μία εποχή όπου η τάχιστη τεχνολογική ανάπτυξη δημιουργεί τεράστιους όγκους δεδομένων και γνώσεων, απαιτώντας από τους άμεσα εμπλεκόμενους στην διαδικασία ανάπτυξης, την μέγιστη εξειδίκευση. Ώς αποτέλεσμα, ολοκληρωμένες λύσεις - προϊόντα πηγάζουν μόνο μέσα από συνεργασίες εξειδικευμένων μηχανικών και τεχνικών. Οι συνεργασίες αυτές, εκτός από το τελικό αποτέλεσμα, παράγουν και μία πληθώρα άλλων εργαλείων, προσανατολισμένα να βοηθήσουν συνάδελφους κλάδους. Σε αυτή την κατεύθυνση είναι προσανατολισμένη η παρούσα πτυχιακή εργασία. Οι τομείς Ηλεκτρονικής, Αυτοματισμού και Ρομποτικής, παρά τις εξαιρετικές γνώσεις και δυνατότητες που ενσωματώνουν σε εφαρμογές low-level προγραμματισμόυ, παρουσιάζουν, όπως είναι φυσικό, λιγότερες προτάσεις υλοποιήσεων high-level προγραμματισμού. Αυτή η αντίθεση παρατηρείται πιο έντονα στην εμφάνιση και λειτουργικότητα των περιβαλλόντων χρήστη (User Interfaces), που δημιουργούνται για τον έλεγχο και διαχείριση των προϊόντων ηλεκτρονικής και ρομποτικής. Έχοντας ως δεδομένο μία ρομποτική πλατφόρμα βασισμένη στον μικροελεγκτή Arduino, δημιουργήθηκε η εφαρμογή (application) «Arduino Vehicle» για τις συσκευές με Windows Phone OS. Η ρομποτική πλατφόρμα περιλαμβάνει ένα αυτόνομο τροχοφόρο ό- χημα που κινείται στο επίπεδο (δύο διαστάσεις), ενώ για τον έλεγχο των λειτουργιών του, επικοινωνεί μέσω Internet.

6 ii Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Η εφαρμογή παρέχει ένα ολοκληρωμένο περιβάλλον χρήστη (UI), το οποίο ενσωματώνει τον έλεγχο όλων των λειτουργιών του οχήματος. Επιπλέον, με χρήση των πόρων της συσκευής στην οποία λειτουργεί, επεκτείνει την λειτουργία της πλατφόρμας, προσθέτοντας την δυνατότητα καταγραφής της εκτελούμενης διαδρομής, και την δυνατότητα αυτοματοποιημένης αναπαραγωγής της. Στην παρούσα εργασία, γίνεται παρουσίαση της διαδικασίας ανάπτυξης της εφαρμογής «Arduino Vehicle», καθώς επίσης και της παραμετροποίησης που έγινε στην ρομποτική πλατφόρμα. Αναλύονται όλες οι μέθοδοι και οι τεχνικές που χρησιμοποιήθηκαν, με στόχο, πέρα από την υλοποίηση του τελικού προϊόντος, την ενημέρωση του αναγνώστη και την εφαρμογή τους καί από τον ίδιο. Ολοκληρώνοντας, με την αξιοποίηση και χρήση της εφαρμογής, προσφέρεται στους κλάδους των ηλεκτρονικών και των μηχανικών ρομποτικής και αυτοματισμού, ένα εργαλείο ελέγχου και δοκιμών των υλοποιήσεών τους, ενώ στο ευρύ κοινό, μία φιλική και εύχρηστη εφαρμογή. Παράλληλα, δίνεται η ευκαιρία στον αναγνώστη να αποκομίσει χρήσιμες γνώσεις τόσο για την διαδικασία παραγωγής μίας εφαρμογής, όσο και για τα εργαλεία ανάπτυξης που χρησιμοποιήθηκαν.

7 Στους Γονείς, στους Καθηγητές και στους Φίλους που με Εμπνέουν και με Στηρίζουν

8

9 Εφαρμογή Εξελιγμένου Διαδικτυακού Ελέγχου Ρομποτικής Πλατφόρμας ΚΑΤΣΑΡΗΣ Κ. ΔΗΜΗΤΡΙΟΣ (Τ 1852) ΣΥΜΒΟΥΛΟΣ ΚΑΘΗΓΗΤΗΣ Δρ. Ν. ΠΕΤΡΕΛΛΗΣ Επίκουρος Καθηγητής

10

11 vii Περιεχόμενα ΠΕΡΙΛΗΨΗ... I ΠΕΡΙΕΧΟΜΕΝΑ... VII ΚΕΦΑΛΑΙΟ 1 ΕΙΣΑΓΩΓΗ Η ΕΦΑΡΜΟΓΗ ΥΠΟΛΟΓΙΣΤΙΚΗ ΠΛΑΤΦΟΡΜΑ Επιλογή Συσκευών Επιλογή Λειτουργικού Συστήματος Windows Phone OS ΡΟΜΠΟΤΙΚΗ ΠΛΑΤΦΟΡΜΑ... 8 ΒΙΒΛΙΟΓΡΑΦΙΑ... 9 ΚΕΦΑΛΑΙΟ 2 ARDUINO ROBOTIC PLATFORM ΠΕΡΙΓΡΑΦΗ ΡΟΜΠΟΤΙΚΗΣ ΠΛΑΤΦΟΡΜΑΣ Ο ΚΩΔΙΚΑΣ ΤΟΥ ARDUINO ΤΡΟΠΟΠΟΙΗΣΗ ΥΠΟΛΟΓΙΣΜΟΥ ΑΠΟΣΤΑΣΗΣ ΣΥΝΔΕΣΗ ΣΤΟ ΔΙΚΤΥΟ ΕΡΜΗΝΕΙΑ ΚΑΙ ΕΚΤΕΛΕΣΗ ΕΝΤΟΛΩΝ ΑΠΟΣΤΟΛΗ FEEDBACK ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 3 ΕΦΑΡΜΟΓΗ ARDUINO VEHICLE ΚΩΔΙΚΑΣ ΤΗΣ ΕΦΑΡΜΟΓΗΣ ΣΕΛΙΔΕΣ ΤΗΣ ΕΦΑΡΜΟΓΗΣ - ΛΕΙΤΟΥΡΓΙΑ Κεντρική σελίδα (Main Page) Σελίδα Ελέγχου (Move Control) Σελίδα Αρχείων (File view Page) Σελίδα Ελέγχου Web Browser Σελίδα Ρυθμίσεων ΜΗΝΥΜΑΤΑ ΕΦΑΡΜΟΓΗΣ ΚΟΥΜΠΙ ΣΥΣΚΕΥΩΝ «ΠΙΣΩ» (HARDWARE BACK BUTTON)... 29

12 viii Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 4 ΕΠΙΚΟΙΝΩΝΙΑ ΣΥΝΔΕΣΗ ΡΟΜΠΟΤΙΚΗΣ ΠΛΑΤΦΟΡΜΑΣ ΣΥΝΔΕΣΗ ΣΥΣΚΕΥΗΣ WINDOWS PHONE Επικοινωνία Εφαρμογής με το Internet Επικοινωνία Εφαρμογής με τον Χρήστη ΣΥΝΔΕΣΗ ΕΦΑΡΜΟΓΗΣ ΜΕ ΡΟΜΠΟΤΙΚΗ ΠΛΑΤΦΟΡΜΑ Επικοινωνία Εφαρμογής με τον Server - Μικροελεγκτή Αποστολή Εντολών Έλεγχος Ρομποτικής Πλατφόρμας Απάντηση Ρομποτικής πλατφόρμας / server (feedback) Επεξεργασία και Προβολή Απάντησης ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 5 ΔΙΑΧΕΙΡΙΣΗ ΑΠΟΘΗΚΕΥΤΙΚΟΥ ΧΩΡΟΥ ΑΠΟΘΗΚΕΥΣΗ ΡΥΘΜΙΣΕΩΝ ΚΥΚΛΟΣ ΛΕΙΤΟΥΡΓΙΑΣ ΕΦΑΡΜΟΓΗΣ & ΜΕΤΑΒΛΗΤΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ΑΠΟΘΗΚΕΥΣΗ ΑΡΧΕΙΩΝ ΚΑΙ ΦΑΚΕΛΩΝ Δημιουργία Αρχείου Εγγραφή Προσθήκη Δεδομένων Άνοιγμα Αρχείου και Ανάκτηση Δεδομένων ΔΙΑΧΕΙΡΙΣΗ ΑΡΧΕΙΩΝ Συνάρτηση Μετονομασίας (RenameFile) Συνάρτηση Διαγραφής αρχείου Διαγραφή αρχείων Εκκαθάριση Isolated Storage ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 6 ΑΥΤΟΜΑΤΟΠΟΙΗΜΕΝΕΣ ΔΙΑΔΙΚΑΣΙΕΣ ΡΥΘΜΙΣΕΙΣ ΤΗΣ ΕΦΑΡΜΟΓΗΣ ΚΑΤΑΓΡΑΦΗ ΕΝΤΟΛΩΝ Δεδομένα Καταγραφής - Μορφοποίηση Διαδικασία Καταγραφής Συνέχιση καταγραφής Προσθήκη ΑΝΑΠΑΡΑΓΩΓΗ ΕΝΤΟΛΩΝ Έναρξη Αναπαραγωγής Ανάγνωση και Ερμηνεία Δεδομένων... 79

13 6.3.3 Επιλογή Εντολής και Εκτέλεση Ολοκλήρωση Αναπαραγωγής - Διακοπή DEMO ΛΕΙΤΟΥΡΓΙΑ ΤΗΣ ΕΦΑΡΜΟΓΗΣ ΟΛΟΚΛΗΡΩΣΗ ΛΕΙΤΟΥΡΓΙΩΝ ΑΥΤΟΜΑΤΙΣΜΟΥ ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 7 ΜΗΝΥΜΑΤΑ ΕΦΑΡΜΟΓΗΣ ΑΡΧΙΚΗ ΜΕΘΟΔΟΣ (DEFAULT METHOD) ΠΑΡΑΜΕΤΡΟΠΟΙΗΜΕΝΗ ΜΕΘΟΔΟΣ (MYMESSAGE) mymessage mymessageshow ΜΗΝΥΜΑΤΑ ΣΦΑΛΜΑΤΩΝ ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 8 ΔΙΑΧΕΙΡΙΣΗ USER INTERFACE ΕΠΙΛΟΓΕΣ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ ΣΥΣΚΕΥΗΣ ΣΥΝΑΡΤΗΣΗ UIMODIFICATOR ΔΙΑΧΕΙΡΙΣΗ ΚΑΤΑΣΤΑΣΕΩΝ ΣΥΝΔΕΣΙΜΟΤΗΤΑΣ Κεντρική Σελίδα της Εφαρμογής (MainPage) Σελίδα Web Browser Control Σελίδα Ελέγχου (MoveTestPage) Σελίδα Προβολής Αρχείων (FileViewPage) ΈΛΕΓΧΟΣ ΤΗΣ ΡΟΜΠΟΤΙΚΗΣ ΠΛΑΤΦΟΡΜΑΣ ΛΕΙΤΟΥΡΓΙΕΣ ΑΥΤΟΜΑΤΙΣΜΟΥ Διαδικασία Καταγραφής Διαδικασία Αναπαραγωγής ΕΙΚΟΝΙΔΙΑ - ΟΠΤΙΚΟΠΟΙΗΣΗ ΠΛΗΡΟΦΟΡΙΩΝ Εικονίδια Συνδεσιμότητας Εικονίδια Κίνησης Εικονίδια Εφαρμογής Logo Splash Screen ΒΙΒΛΙΟΓΡΑΦΙΑ ΚΕΦΑΛΑΙΟ 9 ΜΕΛΛΟΝΤΙΚΕΣ ΠΡΟΟΠΤΙΚΕΣ ix ΠΑΡΑΡΤΗΜΑ Α: ΠΙΝΑΚΕΣ ΛΕΙΤΟΥΡΓΙΑΣ ARDUINO ΠΑΡΑΡΤΗΜΑ Β: ΠΙΝΑΚΑΣ ΠΛΗΡΟΦΟΡΙΩΝ FEEDBACK

14

15 ΚΕΦΑΛΑΙΟ 1 Εισαγωγή Η εποχή μας χαρακτηρίζεται από την τάχιστη ανάπτυξη της τεχνολογίας η οποία έχει εισχωρήσει σε κάθε πτυχή της καθημερινότητας. Σε κάθε δραστηριότητα συμμετέχουν πληθώρα τεχνολογικών εφαρμογών, που είτε μας βοηθούν στην επίλυση των προβλημάτων που αντιμετωπίζουμε, είτε αυτοματοποιούν επαναλαμβανόμενες διαδικασίες, συμβάλλοντας, σε κάθε περίπτωση, στην βελτίωση του βιοτικού μας επιπέδου. Παράλληλα, η ανάγκη για συνεχή επικοινωνία τόσο μεταξύ των ανθρώπων, όσο και μεταξύ ανθρώπου και μηχανής, έχει καταφέρει να γεφυρώσει ακόμη και τα πιο δυσπρόσιτα άκρα της Γης σε ένα καθολικό δίκτυο, το Internet, που φαίνεται να αναπτύσσεται αυτόνομα, ακολουθώντας τις εκάστοτε ε- ξελίξεις. Ως εκ τούτου, διάφοροι κλάδοι της τεχνολογίας καλούνται να παρουσιάσουν νέες λύσεις και βελτιστοποιήσεις, με βασικότερους αυτούς των ηλεκτρονικών, της ρομποτικής και αυτοματισμού, και της πληροφορικής. Δεδομένου, όμως, του μεγάλου όγκου δεδομένων και γνώσεων που παράγονται, είναι έκδηλη η ανάγκη για δημιουργία ομάδων εξειδικευμένων μηχανικών και τεχνικών. Κατά συνέπεια, οι ατομικές εργασίες αποθαρρύνονται, καθώς δεν μπορούν να παρέχουν τις ολοκληρωμένες λύσεις-προϊόντα που απαιτούνται.

16 2 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Οι συνεργασίες αυτές, εκτός από το τελικό αποτέλεσμα, παράγουν και μία πληθώρα εργαλείων ανάπτυξης προς βοήθεια στις εργασίες των μηχανικών κάθε τομέα. Σε αυτή την κατεύθυνση είναι προσανατολισμένη και η παρούσα πτυχιακή εργασία, στοχεύοντας στους κλάδους των Ηλεκτρονικών, και των Μηχανικών Ρομποτικής και Αυτοματισμού. Το βασικό χαρακτηριστικό των κλάδων αυτών είναι η εξαιρετική εξειδίκευση και ο τεράστιος πλούτος γνώσεων που κατέχουν τόσο σε επίπεδο ηλεκτρονικών και hardware, όσο και σε επίπεδο low level προγραμματισμού, που απαιτείται στις εργασίες αυτές. Η α- γορά - χρήστες όμως, απαιτούν εφαρμογές οι οποίες πέρα από την λειτουργικότητά τους, πρέπει να είναι και οπτικά καλαίσθητες όμορφες, ώστε να προσελκύουν νέους χρήστες. Δηλαδή, ενώ οι κατασκευές υλοποιούνται με προγραμματισμό σε low level γλώσσες (C, Assembly, κτλ), οι εφαρμογές ελέγχου-διαχείρισης πρέπει να υλοποιούνται σε high level προγραμματισμό (C#, Java, HTML5, κτλ), όπου διατίθενται πληθώρα εργαλείων για τον σχεδιασμό του Περιβάλλοντος Χρήσης (User Interface). Έτσι, δημιουργείται η αντίθεση μεταξύ των εξαιρετικών υλοποιήσεων Ρομποτικής και Αυτοματισμού, και των μέτριων, αισθητικά και εν δυνάμει λειτουργικά, εφαρμογών διαχείρισης για την χρήση τους. Άρα, το πρόβλημα έγκειται στην έλλειψη εφαρμογών που να μπορούν να είναι φιλικές προς το ευρύ κοινό των χρηστών και ταυτόχρονα να αναδεικνύουν την λειτουργικότητα των ηλεκτρονικών συστημάτων που υλοποιούνται στην ρομποτική και τον αυτοματισμό. Στην προσπάθεια περιορισμού της κατάστασης αυτής, και ενθάρρυνσης των ατομικών πρωτοβουλιών για δημιουργία ολοκληρωμένων λύσεων, δημιουργήθηκε η εφαρμογή «Arduino Vehicle». Η εφαρμογή (application) αυτή παρέχει ένα έτοιμο περιβάλλον χρήσης (UI) άμεσα παραμετροποιήσιμο και προσαρμόσιμο σε πληθώρα εφαρμογών. Η χρήση της στοχεύει αρχικά στους ηλεκτρονικούς και μηχανικούς ρομποτικής και αυτοματισμού, καθώς δίδεται ένα εργαλείο ελέγχου, δοκιμών και χρήσης για τις υλοποιήσεις τους. Κατά δεύτερον, στοχεύει στους χρήστες αγορά, καθώς παρέχει ένα καλαίσθητο και εύχρηστο περιβάλλον χρήσης, το οποίο λειτουργεί σε υπολογιστικές φορητές πλατφόρμες (smartphone) με λειτουργικό σύστημα Windows Phone. Εκτός, όμως, από την παρουσίαση της εφαρμογής και των τεχνολογιών που αυτή υιοθετεί, η παρούσα πτυχιακή εργασία είναι δομημένη με σκοπό να καλύψει δύο βασικούς στόχους.

17 Κ Ε Φ Α Λ Α Ι Ο 1 Ε Ι Σ Α Γ Ω Γ Η 3 Πρωταρχικός στόχος είναι η εκπλήρωση του εκπαιδευτικού χαρακτήρα που έχει, καθώς υλοποιείται στα πλαίσια της προπτυχιακής εκπαιδευτικής διαδικασίας. Παρουσιάζονται λεπτομερώς, τόσο οι τεχνικές που επιλέχθηκαν στην υλοποίηση, όσο και το σκεπτικό που οδήγησε στην επιλογή τους, αλλά καί οι υπόλοιπες πιθανές λύσεις. Έτσι δημιουργείται μία πλήρης εικόνα των διατιθέμενων εργαλείων ανάπτυξης και του τρόπου επιλογής τους. Ο Δεύτερος στόχος είναι η ενημέρωση του αναγνώστη για όλες τις δυνατότητες που παρέχουν τα εργαλεία και οι τεχνικές που περιγράφονται. Παράλληλα, και μέσω του τρόπου αφήγησης, καθοδηγείται στην όλη διαδικασία ανάπτυξης, με απώτερο στόχο την κατανόηση και χρήση των τεχνικών αυτών και από τον ίδιο. 1.1 Η Εφαρμογή Ερευνώντας προς αυτή την κατεύθυνση, γεννήθηκε η εφαρμογή «Arduino Vehicle». Στόχος της εφαρμογής είναι να δοθεί η δυνατότητα στο ευρύ κοινό των χρηστών να ελέγξουν και να διαχειριστούν την πλειοψηφία των δυνατοτήτων μίας ρομποτικής πλατφόρμας, μέσω μία συσκευής (smartphone) που έχουν πάντοτε μαζί τους, και μέσα από ένα περιβάλλον (User Interface), στο οποίο είναι ήδη εξοικειωμένοι. Ταυτόχρονα, αποδεσμεύονται οι μηχανικοί από την ανάγκη δημιουργίας ενός interface τόσο για τους χρήστες, όσο και για τις δοκιμές τους. Διατηρώντας, όμως, την ελευθερία των επιλογών τους τεχνικό κομμάτι της υλοποίησής και των παραμέτρων ελέγχου που θα χρησιμοποιήσουν. Κύρια εργασία της εφαρμογής Arduino Vehicle, είναι ο έλεγχος της κίνησης οποιασδήποτε ρομποτικής πλατφόρμας κινείται στο επίπεδο. Έτσι δύνανται να χρησιμοποιηθεί σε οποιοδήποτε Τροχοφόρο (αμαξίδιο, δίκυκλο, κτλ), Ελικοφόρο (hovercraft, θαλάσσιο σκάφος), και Βηματικό (ρομπότ με άκρα), όχημα που κινείται σε δύο άξονες (Βοράς-Νότος, Ανατολή-Δύση) πάνω στο επίπεδο. Η διασύνδεση γίνεται μέσω Internet, όπου η εφαρμογή εκμεταλλεύεται όλους τους τρόπους πρόσβασης των smartphone συσκευών. Επιπλέον, δίδεται η δυνατότητα επιλογής του γραφικού περιβάλλοντος του χρήστη, μεταξύ του προτεινόμενου Interface της εφαρμογής, ή/και σελίδων HTML τις οποίες, όμως, θα πρέπει να παρέχει ο κατασκευαστής. Επιπρόσθετα, ενσωματώνεται και ένα σύστημα αυτοματισμού. Συλλέγονται και επεξεργάζονται όλες οι ενέργειες και οι επιλογές του χρήστη, καθώς επίσης και τα δεδομένα

18 4 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ που στέλνει η ρομποτική πλατφόρμα. Οι δυνατότητες του συστήματος αυτού περιλαμβάνουν τον διαχωρισμό, την αποθήκευση και την αναπαραγωγή των παραπάνω δεδομένων. Έτσι, μέσω της Arduino Vehicle, καλύπτεται το χάσμα μεταξύ των χρηστών και του μηχανικού, απλοποιώντας και εκλαϊκεύοντας, για τους πρώτους, τις λειτουργίες ενός ρομποτικού συστήματος, και αίροντας από τον δεύτερο, το βάρος της υλοποίησης μίας, high level προγραμματιστικά, εφαρμογής. 1.2 Υπολογιστική πλατφόρμα Σημαντικότατος είναι ο ρόλος τόσο της συσκευής (hardware) όσο και του Λειτουργικού Συστήματος (OS) που θα επιλεγούν για την ανάπτυξη και λειτουργία της εφαρμογής. Η υπολογιστική πλατφόρμα που επιλέχθηκε είναι συσκευές Smartphone με λειτουργικό σύστημα Windows Phone Επιλογή Συσκευών Όπως προαναφέρθηκε, η εφαρμογή Arduino Vehicle λειτουργεί σε συσκευές smartphone. Η επιλογή αυτών των συσκευών, σε σύγκριση με τους Η/Υ (Desktops, Laptops) ή τα Tablets, έγινε σε δύο στάδια. Πρωταρχικά, με βάση τα τεχνικά τους χαρακτηριστικά, και τις δυνατότητες που προσφέρουν. Είναι γεγονός πως, πλέον, η μέση συσκευή smartphone διαθέτει διπύρηνο επεξεργαστή, 512MB-1GB μνήμη RAM και αποθηκευτικό χώρο έως 32GB (λόγω μέγιστης υποστήριξης αποσπώμενης μνήμης SD card). Τις δυνατότητες διασύνδεσης εμπλουτίζουν η σύνδεση δεδομένων (3G/4G), Bluetooth, WiFi, GPS, και η καλωδιακή σύνδεση (USB). Σε δεύτερο στάδιο, η επιλογή έγινε με γνώμονα την φορητότητά τους και την εξοικείωση με αυτές όλων των χρηστών, καθώς τις έχουν πάντοτε μαζί τους και χρησιμοποιούνται καθημερινά. Συνεπώς, από την μία πλευρά, τα smartphones αποτελούν ισχυρές υπολογιστικές μηχανές, ικανές να εκτελέσουν πληθώρα πολύπλοκων εντολών. Από την άλλη, δεν χρειάζεται κάποια εκπαίδευση για την χρήση τους, καθώς αποτελούν αναπόσπαστο κομμάτι της καθημερινότητάς μας, τόσο κατά την επικοινωνία, όσο και στην διασκέδαση, ενημέρωση, εργασία, κτλ.

19 1.2.2 Επιλογή Λειτουργικού Συστήματος Κ Ε Φ Α Λ Α Ι Ο 1 Ε Ι Σ Α Γ Ω Γ Η 5 Οι συσκευές smartphone διαχωρίζονται στην αγορά, με βάση το λειτουργικό σύστημα που διαθέτουν. Συνολικά υπάρχουν περισσότερα από 15 διαφορετικά λειτουργικά συστήματα με τα κυριότερα, όμως, να είναι το Android ή Droid που υποστηρίζεται από την Google, το ios που υποστηρίζεται από την Apple, το Windows Phone που υποστηρίζεται από την Microsoft και το Blackberry που υποστηρίζεται από την RIM. Οι διαφορές τους είναι σημαντικές και εντοπίζονται από τον πυρήνα και τις λειτουργίες του OS έως και το UI. Επιπλέον, διαφορές βρίσκονται και στο πλήθος και το είδος των κατασκευαστών που χρησιμοποιούν το κάθε λειτουργικό σύστημα, όπως φαίνεται και στον παρακάτω πίνακα 1-1. Τέλος, σε επίπεδο εφαρμογών, κάθε λειτουργικό σύστημα, χρησιμοποιεί διαφορετική γλώσσα προγραμματισμού, και αντίστοιχα διαθέτει και τα δικά του εργαλεία μελέτης και ανάπτυξης. Έτσι, σημαντικότατο ρόλο έχουν τόσο το περιβάλλον ανάπτυξης, όσο και οι απαραίτητες πληροφορίες, παραδείγματα και υποστήριξη (documentation/support) που τα συνοδεύουν. Η πρόσβαση και εξοικείωση με όλα τα εργαλεία ανάπτυξης που διατίθενται συντελούν το επόμενο στάδιο της επιλογής. Αυτό περιλαμβάνει την σωστή επιλογή του OS στο οποίο θα αναπτυχθεί και θα λειτουργήσει η εφαρμογή. Σε αυτή την κατεύθυνση υλοποιούνται διάφορες δράσεις από τις εταιρείες υποστήριξης του κάθε OS, ώστε να εισάγουν τους νέους προγραμματιστές στην μελέτη και ανάπτυξη εφαρμογών για την κάθε πλατφόρμα. Πίνακας 1-1: Smartphones - Λειτουργικά Συστήματα και Κατασκευαστές Λειτουργικό Σύστημα (OS) Εταιρεία Κατασκευαστής Android / Droid Google Όλοι οι κατασκευαστές Smartphone ios Apple Apple Windows Phone Microsoft Nokia, HTC, Huawei, Samsung, Microsoft BlackBerry RIM RIM Firefox OS Mozilla Alcatel, LG, ZTE Symbian Symbian Foundation Nokia, Sony Ericsson Tizen Samsung Samsung WebOS Hewlett-Packard Hewlett-Packard και Palm Sailfish OS Jolla Jolla

20 6 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Στην Ελλάδα, τον κύριο ρόλο έχει η Microsoft (Microsoft Hellas), η οποία έχει καταφέρει να δημιουργήσει τις περισσότερες και καλύτερα οργανωμένες ομάδες προγραμματιστών στα τριτοβάθμια εκπαιδευτικά ιδρύματα, εξοπλίζοντάς τες με όλα τα απαραίτητα R&D εργαλεία και υλικά. Έτσι, με βάση τα παραπάνω επιχειρήματα, αλλά και λόγω της σταθερότητας στην λειτουργία του, του χαμηλού κόστους συσκευών, της συνεχόμενης ανάπτυξης των δυνατοτήτων του και της αυξανόμενης προτίμησής του από τις αγορές, επιλέχθηκε το λειτουργικό σύστημα Windows Phone Windows Phone OS Το λειτουργικό σύστημα Windows Phone πρωτοεμφανίστηκε το 2010 ως συνέχεια του Windows Mobile που μέχρι τότε έτρεχε σε φορητές συσκευές (gps, palms, κτλ). Ο προκάτοχος Windows Mobile ήταν στην έκδοση 6.5, για αυτόν τον λόγο, η πρώτη έκδοση του WP ήταν η 7 (OS ver7.0). Γρήγορα, και με την εξαγορά του τμήματος κατασκευής της Nokia από την Microsoft, εμφανίστηκε η επόμενη έκδοση 7.5 (OS ver7.1) το 2011, με την ονομασία Mango. Την επόμενη χρονιά, 2012 έγινε προστέθηκαν νέες δυνατότητες στο OS, και δόθηκε το όνομα Tango (χωρίς να αλλάξει κωδικός έκδοσης). Η εγκαθίδρυση του λειτουργικού, και η ραγδαία του ανάπτυξη στην αγορά έγινε στην έκδοση 8 (OS ver8.0) από τον Οκτώβριο του 2012 η οποία χρησιμοποιείται έως σήμερα. Η επόμενη έκδοση των Windows Phone θα είναι η 8.1, όπως ανακοινώθηκε τον Απρίλιο του 2014, και κυκλοφόρησε επίσημα από τον Αύγουστο του ίδιου έτους. Όπως φαίνεται και στο παρακάτω γράφημα (εικόνα 1-1), σύμφωνα με τις τελευταίες μετρήσεις, το λειτουργικό σύστημα της Microsoft καταλαμβάνει το 3% της παγκόσμιας α- γοράς, έναντι του 78% το Android και 18% του ios. Παρ όλα αυτά, τα τελευταία τρία χρόνια ( ) παρατηρείται αύξηση του ποσοστού των Windows Phone από 1,2 έως 4,5% ανά έτος. Μεταξύ των δύο κύριων εκδόσεων του λειτουργικού (OS 7.1 και OS 8.0) οι διαφορές στην διαδικασία ανάπτυξης εφαρμογών είναι πολύ μικρές, με μία όμως να είναι καταλυτική. Τα εργαλεία ανάπτυξης (Visual Studio, WP sdk, WP simulator) για την έκδοση 8.0, λειτουργούν μόνο σε περιβάλλον Windows 8. Αυτό σημαίνει πως πλέον δεν μπορεί να δημιουργηθούν εφαρμογές για τα WP8 μέσω υπολογιστών που λειτουργούν τα Windows 7 ή Vista.

21 Κ Ε Φ Α Λ Α Ι Ο 1 Ε Ι Σ Α Γ Ω Γ Η 7 Windows Phone OS Παγκόσμια Αγορά % 0,71% 0,72% Παγκόσμια Αγορά ,8% 5% 18% 2,94% 77,83 % Windows Phone 8.1 Windows Phone 8.0 Windows Phone 7.1 Andoid Blackberry ios Windows Phone Symbian Εικόνα 1-1: Γραφήματα Κατανομής της Αγοράς των Smartphones Επιπλέον, μία εφαρμογή υλοποιημένη για WP 7.1 μπορεί να μεταφερθεί (debug/compile) και να λειτουργήσει στην έκδοση WP8 ή στην WP8.1. Ενώ εάν υλοποιηθεί για τα WP8 ή τα WP8.1, δεν γίνεται η μεταφορά της σε προηγούμενες εκδόσεις (WP8, WP7.1 ή WP7). Με γνώμονα αυτούς τους περιορισμούς, αποφασίστηκε η εφαρμογή Arduino Vehicle να υλοποιηθεί για την έκδοση Windows Phone Mango (OS 7.1). Με αυτό τον τρόπο καλύπτονται δύο βασικοί πυλώνες της λειτουργικότητάς της. Πρώτον, επειδή απευθύνεται τόσο σε χρήστες, όσο και σε μηχανικούς, θα πρέπει να έχει ευρεία εφαρμογή στο σύνολο των συσκευών WP. Δηλαδή, δεν αποκλείονται οι χρήστες και οι Μηχανικοί που διαθέτουν συσκευές Windows Phone πριν το τέλος 2012 (που εμφανίστηκε η έκδοση 8). Σύμφωνα και με το παραπάνω γράφημα (εικόνα 1-1), οι συσκευές με Windows Phone 7.1 καταλαμβάνουν το 18% του συνόλου των συσκευών της Microsoft, σε παγκόσμια κλίμακα. Ποσοστό διόλου ασήμαντο για να αγνοηθεί. Δεύτερον, γίνεται δυνατή η μεταφορά της στις επόμενες εκδόσεις (WP8, WP8.1) των smartphones, και επίσης γίνεται δυνατή η μελλοντική της ανάπτυξη και χρήση και στο περιβάλλον των Windows 8.1, για χρήση σε Η/Υ.

22 8 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 1.3 Ρομποτική Πλατφόρμα Η εφαρμογή Arduino Vehicle σχεδιάστηκε και υλοποιήθηκε με σκοπό να χρησιμοποιηθεί, πρωτίστως, από οποιαδήποτε ρομποτική πλατφόρμα κινείται σε δύο διευθύνσεις. Αυτό όμως δεν περιορίζει τις δυνατές εφαρμογές της, καθώς μπορεί να χρησιμοποιηθεί σε οποιαδήποτε κατασκευή που οι λειτουργίες της καλύπτονται από τις διαθέσιμες επιλογές της ε- φαρμογής. Για τις ανάγκες ανάπτυξης, ελέγχου, αποσφαλμάτωσης και δοκιμών της Arduino Vehicle, χρησιμοποιήθηκε η ρομποτική πλατφόρμα «Arduino Robotic Platform», η οποία βασίζεται στον μικροελεγκτή Arduino. (εικόνα 1-2) Η Ρομποτική πλατφόρμα αντιστοιχεί σε ένα ενεργειακά αυτόνομο τρίκυκλο τροχοφόρο όχημα που επικοινωνεί με τον χειριστή του μέσω Internet. Λόγω του συγκεκριμένου τρόπου σύνδεσης, ο αρχικός του έλεγχος γίνεται μέσω σχετικών ιστοσελίδων (HTML αρχεία), και ο μικροελεγκτής αναλαμβάνει την ερμηνεία και εκτέλεση των εντολών που δέχεται, όπως επίσης και την αποστολή του σχετικού feedback. Εικόνα 1-2: Η ρομποτική πλατφόρμα «Arduino Robotic Platform»

23 Κ Ε Φ Α Λ Α Ι Ο 1 Ε Ι Σ Α Γ Ω Γ Η 9 Βιβλιογραφία Πληροφορίες για Smartphones και Windows Phone Πως Λειτουργούν τα Smartphones smartphone2.htm Πληροφορίες για Windows Phone OS %28v=vs.105%29.aspx Πληροφορίες για Windows Phone OS Wikipedia: Mobile OS 5. Wikipedia: Windows Phone Στατιστικά Στοιχεία market statistics Reports-February-2014-US-Smartphone-Subscriber-Market-Share market statistics 8. market statistics market statistics market statistics market statistics market statistics market statistics market statistics market statistics εικόνα 2-1: Arduino Robotic Platform: «Διαδικτυακός Έλεγχος Ρομποτικής Πλατφόρμας», Νάτσιος Χρήστος,ΤΕΙ Λάρισας, Τμ. Μηχανικών Πληροφορικής Τ.Ε

24

25 ΚΕΦΑΛΑΙΟ 2 Arduino Robotic Platform Όπως περιγράφτηκε στην Ρομποτική Πλατφόρμα για τις ανάγκες της εφαρμογής χρησιμοποιήθηκε μία έτοιμη ρομποτική πλατφόρμα η Arduino Robotic Platform που αντιστοιχεί σε ένα τρίκυκλο τροχοφόρο όχημα. 2.1 Περιγραφή Ρομποτικής Πλατφόρμας Η «καρδιά» του οχήματος είναι η πλατφόρμα Arduino Duemilanove η οποία διαθέτει τον μικροελεγκτή ATMEL ATmega328 και εσωτερική μνήμη ROM 30KB. Η κίνηση του οχήματος γίνεται μέσω δύο κινητήρων servo πλήρους περιστροφής οι οποίοι συνδέονται με έναν τροχό ο κάθε ένας. Ο τρίτος τροχός είναι βοηθητικός για την ισορροπία του οχήματος. Ο έλεγχος και συγχρονισμός των δύο κινητήρων γίνεται με την χρήση δύο αισθητήρων περιστροφής (shaft encoders) τον κάθε έναν τοποθετημένο στον ά- ξονα του κάθε τροχού που δέχεται κίνηση από κινητήρα. Τέλος, ένας αισθητήρας υπέρυθρων ακτίνων (IR) προστατεύει την κίνηση του οχήματος από πιθανά εμπόδια.

26 12 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Για την ενεργειακή αυτονομία της πλατφόρμας χρησιμοποιείται μία επαναφορτιζόμενη μπαταρία λιθίου-πολυμερίου (LiPo) και ένα κύκλωμα που ελέγχει την στάθμη της μπαταρίας και διαχειρίζεται την διαδικασία φόρτισης. (εικόνα 2-1) Ολοκληρώνοντας της περιγραφή, θα αναφερθούμε στο σύστημα επικοινωνίας της ρομποτικής πλατφόρμας. Το σύστημα αποτελείται από μία πλακέτα σύνδεσης δικτύου (Ethernet Shield) η οποία εφαρμόζει πάνω στην πλακέτα του Arduino, και επιτρέπει την σύνδεση του μικροελεγκτή μέσω καλωδίου Ethernet (RJ45). Επιπλέον, ένα Access Point αναλαμβάνει να μετατρέψει την επικοινωνία σε Ασύρματη, συνδέοντας τον χρήστη από το WiFi με τον μικροελεγκτή στο Ethernet. Εικόνα 2-1: Arduino Robotic Platform 2.2 Ο Κώδικας του Arduino Η πλατφόρμα Arduino προγραμματίζεται με την γλώσσα Wiring, η οποία βασίζεται στην γλώσσα C++. Το εργαλείο περιβάλλον ανάπτυξης κώδικα είναι μία εφαρμογή γραμμένη σε JAVA, η «Arduino», που διαθέτει έναν επεξεργαστή κειμένου, και έναν μεταγλωττιστή (compiler). Διανέμεται ελεύθερα (open source) από την επίσημη ιστοσελίδα της πλατφόρμας, και είναι διαθέσιμη σε κάθε λειτουργικό σύστημα Windows και Linux. Για την χρήση της ρομποτικής πλατφόρμας «Arduino Robotic Platform» στις ανάγκες της εφαρμογής, έγιναν κάποιες τροποποιήσεις. Μετά από ενδελεχή έλεγχο και μετρήσεις που έγιναν στον αρχικό κώδικά της, κρίθηκαν αναγκαίες κάποιες αλλαγές με στόχο την βελτιστοποίηση της απόδοσης του μικροελεγκτή και την ελάττωση της πολυπλοκότητας του

27 Κ Ε Φ Α Λ Α Ι Ο 2 A R D U I N O R O B O T I C P L A T F O R M 13 κώδικα. Το αποτέλεσμα ήταν, εκτός από την σταθεροποίηση της λειτουργίας του μικροελεγκτή, να μικρύνει και ο όγκος του assembly αρχείου, ώστε να γίνει δυνατή η εισαγωγή νέων γραμμών κώδικα για την λειτουργία της ρομποτικής πλατφόρμας καί μέσω της εφαρμογής Arduino Vehicle. Αξιοσημείωτο είναι το γεγονός πως γίνονται αισθητές οι διαφορές που υπάρχουν στα λειτουργικά συστήματα Windows και Unix. Η παρατήρηση αυτή αφορά το μέγεθος σε Bytes, των μεταβλητών που δεσμεύονται από το λειτουργικό σύστημα. Το μέγεθος των μεταβλητών επηρεάζει άμεσα το τελικό αρχείο assembly του κώδικα λειτουργίας της Arduino Robotic Platform, το οποίο εμφανίζεται με δύο διαφορετικά μεγέθη. Υπενθυμίζεται πως η διαθέσιμη μνήμη ROM είναι μόλις 30KB ( Bytes). Σε περιβάλλον Windows, το μέγεθος του αρχικού κώδικα ήταν Bytes, ενώ μετά την ολοκλήρωση όλων των τροποποιήσεων, το μέγεθός του έφτασε τα Bytes. Και στις δύο περιπτώσεις κατά πολύ μεγαλύτερο από την διαθέσιμη μνήμη ROM της Arduino Duemilanove, και άρα, μη εκτελέσιμο. Σε περιβάλλον Linux/Unix, ο αρχικός κώδικας καταλάμβανε Bytes, και μετά τις τροποποιήσεις το μέγεθός του ορίστηκε στα Bytes. Εκτός από το γεγονός ότι πλέον, λόγω μεγέθους, ο κώδικα είναι εκτελέσιμος, η διαφορά του 1,44KB γίνεται αισθητή και στην ποιότητα λειτουργίας της ρομποτικής πλατφόρμας. 2.3 Τροποποίηση Υπολογισμού Απόστασης Η ρομποτική πλατφόρμα διαθέτει έναν αισθητήρα υπέρυθρων ακτίνων (IR) ο οποίος μετράει την απόσταση μεταξύ της πλατφόρμας και οποιουδήποτε πιθανού εμποδίου εμφανιστεί στην πορεία της. Ο συγκεκριμένος αισθητήρας είναι ο «GP2Y0A21 YK0F», και έχει διακριτική ικανότητα 10cm 80cm, όπως φαίνεται και στο γράφημα που ακολουθεί (εικόνα 2-2). Ο υπολογισμός της απόστασης γίνεται με την συλλογή δεδομένων από την τάση εξόδου του αισθητήρα, και με βάση την εκθετική συνάρτηση d = 27 (v -1,2 ), όπου v είναι η τάση εξόδου. Στον αρχικό κώδικα, υπολογίζονταν η συνάρτηση αυτή, βάση του τύπου: d = 27*pow((analogRead(ir)* ),-1.2), όπου λόγω της σταθερής τάσης εισόδου 5Volt, η τάση εξόδου υπολογίζεται ως v=analogread(ir)*

28 14 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Εικόνα 2-2: Καμπύλη Απόκρισης του IR Αισθητήρα Έτσι ο έλεγχος γινόταν με βάση την Απόσταση του αντικειμένου (άξονας Χ), ως εξής: i. Απόσταση Αντικειμένου 14 20cm, Σταμάτημα Κίνησης (Μπλε χρώμα) ii. Απόσταση Αντικειμένου 0 15cm, Κίνηση Πίσω (Κόκκινο χρώμα) iii. Απόσταση Αντικειμένου >20cm, Καμία ενέργεια Η επίλυση αυτών των πράξεων, και συγκεκριμένα η συνάρτηση ύψωσης σε αρνητική δύναμη pow, αυξάνει την πολυπλοκότητα του κώδικα, και τις υπολογιστικές απαιτήσεις από τον μικροελεγκτή, καταναλώνοντας τόσο σε πόρους μνήμης, όσο και σε κύκλους επεξεργασίας. Παρατηρώντας, λοιπόν, το γράφημα (εικόνα 2-2), αποφασίστηκε η μέτρηση της απόστασης να γίνει βάσει των τιμών της καμπύλης στον άξονα Υ, δηλαδή, βάση των τιμών της τάσης εξόδου. Έχοντας ως δεδομένο τις τιμές της απόστασης που αντιστοιχούν σε κάθε ενέργεια της πλατφόρμας, και υπολογίζοντας μόνο την τάση εξόδου v, ο έλεγχος γίνεται: i. Τάση Εξόδου 1,3Volt 1,75Volt, Σταμάτημα Κίνησης (Μπλε χρώμα) ii. Τάση Εξόδου 1,65Volt 3,1Volt, Κίνηση Πίσω (Κόκκινο χρώμα) iii. Τάση Εξόδου <1,3Volt, Καμία Ενέργεια //Έλεγχος για αντικείμενα που μπορεί να εμφανιστούν στην διαδρομή. float volt = analogread(ir)* ; if (volt<1,75 && volt>1,3) //Αντικείμενο βρίσκεται κοντά ==> Στάση (STOP) { digitalwrite(sled, HIGH); L=R=0; m=false; l=r=90; else if (volt<3,1 && volt>1,65) //Αντικείμενο βρίσκεται πολύ κοντά! ==> κίνηση Πίσω { digitalwrite(sled, HIGH); (move Back) L=R=-5; l=80; r=100; Κώδικας Arduino 2-1: Τμήμα της συνάρτησης Υπολογισμού της Απόστασης

29 Κ Ε Φ Α Λ Α Ι Ο 2 A R D U I N O R O B O T I C P L A T F O R M 15 Με την εφαρμογή των παραπάνω συνθηκών στον κώδικα του Arduino (κώδικας Arduino 2-1), εξαλείφονται τα μειονεκτήματα που δημιουργούσε η επίλυση της μαθηματικής συνάρτησης d. Παρακάτω έχουν χρωματιστεί με πράσινο τα τμήματα του κώδικα που έχουν τροποποιηθεί. Ο κώδικας είναι τμήμα της συνάρτησης void run(). 2.4 Σύνδεση στο Δίκτυο Όπως αναφέραμε στην περιγραφή, η «Arduino Robotic Platform» διαθέτει μία πλακέτα Ethernet shield, για την ρύθμιση της οποίας δηλώνονται οι παρακάτω μεταβλητές. MAC Address: είναι η MAC της Ethernet Shield και είναι εργοστασιακά δοσμένη IP Address: είναι η διεύθυνση που θα έχει η ρομποτική πλατφόρμα (Static IP) Gateway: η IP διεύθυνση του Access Point μέσω του οποίου θα συνδεθεί στο διαδίκτυο. Subnet: χαρακτηρίζει το Υποδίκτυο (LAN) στο οποίο ανήκει η Ethernet shield και το Access Point. Μετά την αρχικοποίηση των δεδομένων που χρειάζονται για την λειτουργία της Ethernet shield, σειρά έχει η συνάρτηση loop() η οποία είναι η κύρια συνάρτηση που εκτελείται για την λειτουργία του μικροελεγκτή Arduino, και περιλαμβάνει την διαχείριση ολόκληρης της ρομποτικής πλατφόρμας. Σύμφωνα με την αρχική λειτουργία της Arduino Robotic Platform, για να επιτευχθεί η επικοινωνία μεσολαβούν τα εξής στάδια (κώδικας Arduino 2-2): i. Ενεργοποίηση του Server και αναμονή για συνδεδεμένους χρήστες. ii. Έλεγχος για Συνδεδεμένο και Διαθέσιμο Client. iii. Διάβασμα αιτήματος σύνδεσης (αίτημα GET), και έλεγχος εάν αυτό περιλαμβάνει τον χαρακτήρα «?». iv. Σε περίπτωση που υπάρχει ο ανωτέρω χαρακτήρας (? ), τότε σημαίνει ότι έχει δεχθεί εντολή, οπότε και εκτελείται η συνάρτηση «void webpagexe()» η οποία ερμηνεύει και εκτελεί την εντολή. Διαφορετικά, εκτελείται το επόμενο βήμα. v. Έλεγχος του είδους Client, εάν είναι web browser ή WP εφαρμογή, και επιλογή των αντιστοίχων αρχείων HTML για αποστολή. (προστέθηκε) vi. Αποστολή του feedback ή του web UI, με βάση το αρχείο που έχει επιλεγεί στο προηγούμενο βήμα. Η εισαγωγή των πληροφοριών λειτουργίας (feedback) μέσα στο αρχείο HTML και η αποστολή του στον χρήστη πραγματοποιούνται στη συνάρτηση «void webpage(client)».

30 16 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ vii. Καθυστέρηση 10msec για την ολοκλήρωση της αποστολής του feedback στον χρήστη και καθαρισμός (αρχικοποίηση) των μεταβλητών που χρησιμοποιήθηκαν. Για την ανάγκη σύνδεσης και λειτουργίας μέσω της εφαρμογής Arduino Vehicle, στην ανωτέρω διαδικασία προστέθηκε το στάδιο (v). Έτσι δημιουργείται η boolean μεταβλητή mobile, η οποία παίρνει την τιμή «true» όταν είναι συνδεδεμένη συσκευή WP, ενώ έχει την τιμή «false», όταν ο client είναι πρόγραμμα web browser. Προς ευκολία ανάγνωσης του σχετικού κώδικα (κώδικας Arduino 2-2) που ακολουθεί, έχουν προστεθεί χρωματικές επισημάνσεις για τα στάδια επικοινωνίας και τη μεταβλητή mobile. #include <Ethernet.h> #include <SD.h> bool mobile = false; //Δήλωση μεταβλητής για τον έλεγχο του είδους του Client void loop() { /*i*/ EthernetClient client = server.available(); //Ενεργοποίηση του server. if (client) { // Έλεγχος για συνδεδεμένους χρήστες boolean cl = true; /*ii*/while (client.connected()) { if (client.available()) { /*iii*/ char c = client.read(); if (readstring.length() < 100) readstring += c; //Προσωρινή αποθήκευση των δεδομένων από τον χρήστη. if (c == '\n' && cl) //Κάθε εντολή τερματίζει με μία κενή γραμμή. {//Περίπτωση που έχει ολοκληρωθεί η ανάγνωση του αιτήματος GET /*iv*/ if (readstring.indexof("?") >0) webpagexe(); //Έλεγχος και εκτέλεση των εντολών που δόθηκαν. /*v*/ if(mobile) //Επιλογή Feedback αναλόγως με τον Client. myfile = SD.open("mobile.txt"); else {//Περίπτωση σύνδεσης μέσω Browser switch (state) {//Μέσα στην SWITCH: Αποστολή HTML αρχείων ανάλογα με την κατάσταση του Arduino case 0 : //Κανονική λειτουργία. case 1 : //Φόρτιση. case 2 : //Πλήρης φόρτιση. case 3 : //Τερματισμός. //end switch //end if(mobile) //Αποστολή Feedback ή αρχείου HTML (ανάλογα με την if(mobile)) /*vi*/ webpage(client); break; //break while loop για την περίπτωση που έχει να στείλει δεδομένα. //end if (c == '\n' && cl) //Έλεγχος αν υπάρχουν εισερχόμενες εντολές if (c == '\n') cl = true; else if (c!= '\r') cl = false; //end if(available) //end While

31 Κ Ε Φ Α Λ Α Ι Ο 2 A R D U I N O R O B O T I C P L A T F O R M 17 /*vii*/delay(10); readstring=""; client.stop(); //end if(client) //end loop() //Χρόνος για να ολοκληρωθεί η αποστολή των δεδομένων στον χρήστη //Καθαρισμός εισερχόμενων δεδομένων. //Τερματισμός της σύνδεσης. Κώδικας Arduino 2-2: Τμήμα του Κώδικα Επικοινωνίας του Arduino (συνάρτηση loop) 2.5 Ερμηνεία και Εκτέλεση Εντολών Οι εντολές μεταφέρονται στον μικροελεγκτή ως τμήματα του αιτήματος GET που στέλνει ο client. Ποιο συγκεκριμένα, χρησιμοποιείται ο δεσμευμένος χαρακτήρας? για να υποδείξει την αρχή του string των εντολών. Το αίτημα get είναι ένα URL που αποτελείται από την διεύθυνση της ρομποτικής πλατφόρμας και την προς εκτέλεση εντολή. Συγκεκριμένα, στην περίπτωση της Arduino Robotic Platform, η διεύθυνση της πλατφόρμας αποτελείται από το prefix « και την IP της πλατφόρμας. Η κάθε εντολή αποτελείται τον χαρακτήρα?, την προς εκτέλεση εντολή, και έχει την μορφή: IP_Ρομποτικής_Πλατφόρμας? Εντολή Η εντολή διαχωρίζεται στο όνομα της μεταβλητής, το σύμβολο = και την τιμή της, και συντάσσεται ως: όνομα_μτβλ = τιμή_μτβλ Για παράδειγμα, η εντολή να προχωρήσει μπροστά η ρομποτική πλατφόρμα (εντολή «butt0»), γίνεται ως: Οι εντολές που στέλνονται στον μικροελεγκτή, εξάγονται και ερμηνεύονται μέσα στη συνάρτηση «void webpagexe()» (κώδικας Arduino 2-3). Για την ερμηνεία τους, όμως, αρκεί το όνομα της μεταβλητής, και όχι καί τιμή που παίρνει. Αυτό σημαίνει πως για την αποστολή της εντολής επανεκκίνησης (εντολή «res»), αρκεί η σύνταξη: Μία γενική επισκόπηση του συνόλου των εντολών, του τρόπου σύνταξής τους, της ερμηνείας και της χρήσης τους, βρίσκεται στο Παράρτημα Α, που βρίσκεται στο τέλος της παρούσας εργασίας. Για την καλύτερη λειτουργία μέσω της εφαρμογής Arduino Vehicle, στην συνάρτηση webpagexe() προστέθηκαν δύο δομές ελέγχου, ώστε να ενσωματωθεί η λειτουργία της ε- φαρμογής, και ταυτόχρονα να διαχωριστεί από τις λειτουργίες του Browser. Ο πρώτος έλεγχος αφορά την σύνδεση για έλεγχο μέσω της εφαρμογής των Windows Phone. Δηλώθηκε η μεταβλητή, τύπου boolean, mobile, η οποία παίρνει τιμή «true» όταν

32 18 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ είναι συνδεδεμένη η εφαρμογή, ειδάλλως είναι «false». Η ενεργοποίησή γίνεται με την ε- ντολή «z», η οποία αποστέλλεται κατά το άνοιγμα της σελίδας MoveTestControl της εφαρμογής (κώδικας Arduino 2-3). void webpagexe() { int a=readstring.indexof("butt"); if(a>0){ // Περίπτωση ύπαρξης εντολής?butt* switch (i) { /* Αναγνώριση Client (Mobile Application ή Web Browser) */ case 9 : { /*Περίπτωση λειτουργίας μέσω app Arduino Vehicle*/ if(state!= 0) //Έλεγχος λειτουργειών: Φόρτιση / Τερματισμός moperate =!moperate; else /* Περίπτωση λειτουργίας μέσω Web Browser */ more =!more; break; //τέλος case 9 //τέλος switch //end if(a>0) /* Σύνδεση / αποσύνδεση της WP App Arduino Vehicle */ else if (readstring.indexof("z")>0) mobile =!mobile; /* Κώδικας που χρησιμοποιείται μόνο για λειτουργία μέσω WebBrowser */ else{ //Λήψη τιμών απευθείας για το R και L. --> Υπολογισμός της απόκλισης. //Λήψη τιμής απόκλισης. --> Υπολογισμός του L και R αν κινείται. //Λήψη τιμής της ταχύτητας. --> Υπολογισμός του L και R αν κινείται. //Εναλλαγή της γλώσσας στα Ελληνικά / Αγγλικά. //end webpagexe() Κώδικας Arduino 2-3: Τμήμα συνάρτησης Ερμηνίας και Εκτέλεσης εντολών (webpagexe) Ο δεύτερος έλεγχος αφορά τον τρόπο λειτουργίας της ρομποτικής πλατφόρμας. Σύμφωνα με την αρχική του λειτουργία, ο μικροελεγκτής απαγόρευε την χρήση των κινητήρων και οποιουδήποτε αισθητήρα διαθέτει όταν είναι συνδεδεμένος ο φορτιστής (διαδικασίες Φόρτισης και Πλήρους Φόρτισης). Αυτή η συμπεριφορά προκαλούσε προβλήματα σε καταστάσεις επίδειξης της πλατφόρμας, αλλά και σε πολλές περιπτώσεις δοκιμών. Για αυτό τον λόγο προστέθηκε η boolean μεταβλητή moperate. Η μεταβλητή αυτή χρησιμοποιείται μόνο από την εφαρμογή του Windows Phone, και παίρνει τιμή με την εντολή «butt9». Η κατάσταση «true» σημαίνει πως θα λειτουργεί κανονικά η πλατφόρμα ανεξαρτήτως σύνδεσης του φορτιστή. Η κατάσταση «false», επαναφέρει την πλατφόρμα στην αρχική της λειτουργία.

33 Κ Ε Φ Α Λ Α Ι Ο 2 A R D U I N O R O B O T I C P L A T F O R M Αποστολή FeedBack Η διαδικασία απάντησης της ρομποτικής πλατφόρμας στις εντολές που δέχεται από τον χρήστη αναλύεται σε τρία βήματα. Αρχικά, μέσα στην βασική συνάρτηση του μικροελεγκτή void loop() (κώδικας Arduino 2-2), γίνεται η επιλογή του αρχείου html που θα στείλει η πλατφόρμα ως feedback στον χρήστη. Σε περίπτωση σύνδεσης μέσω web browser τα αρχεία που επιλέγονται, ανάλογα με την κατάσταση της ρομποτικής πλατφόρμας, περιλαμβάνουν ολόκληρο το UI ελέγχου μαζί με τις σχετικές πληροφορίες. Ενώ, στην περίπτωση σύνδεσης μέσω του UI της εφαρμογής, επιλέγεται το αρχείο mobile, το οποίο περιλαμβάνει μόνο τις πληροφορίες που χρειάζονται από την εφαρμογή, για την κατάσταση της πλατφόρμας. Κατόπιν, καλείται η συνάρτηση webpage, όπου γίνεται η προσθήκη των πληροφοριών αυτών και η ολοκλήρωση του html αρχείου που θα αποσταλεί (κώδικας Arduino 2-4). Η λειτουργία της συνάρτησης, όπως φαίνεται και στο παρακάτω τμήμα κώδικα, εκκινείται με το άνοιγμα του html αρχείου στο οποίο θα προστεθούν οι πληροφορίες. Μετά τον έλεγχο και το άνοιγμα του αρχείου, ανακτάται και αποστέλλεται (στον χρήστη) ένας-ένας, όλοι οι χαρακτήρες της σελίδας (μέσα σε επανάληψη while). Ο κάθε χαρακτήρας ελέγχεται, μέχρις ότου εντοπιστεί το σύμβολο «$». Πάντα μετά το σύμβολο αυτό, ακολουθεί η μεταβλητή που περιλαμβάνει την ζητούμενη πληροφορία, οπότε και ξεκινάει η διαδικασία επιλογής και προσθήκης της πληροφορίας που αντιστοιχεί στην μεταβλητή αυτή. void webpage (EthernetClient client) { char sd; bool f = false; if (myfile) { //Έλεγχος αρχείου while (myfile.available()) { //Άνοιγμα Αρχείου sd=myfile.read(); //Διάβασμα Ενός (1) χαρακτήρα (σε κάθε επανάληψη) if (sd=='$') //Έλεγχος ύπαρξης μεταβλητής για προσθήκη τιμής f=true; else{ //Επιλογή μεταβλητής και αντιστοίχησή της με την σχετική πληροφορία. if(f){ /* Ενσωμάτωση των πληροφοριών στο αρχείο HTML που θα αποσταλεί */ if(sd=='b') //Κατεύθυνση else if (sd=='s') //Ταχύτητα - ποσοστό % else if (sd=='t') //Ταχύτητα else if (sd=='l') //τιμή θέσης Αριστερού τροχού else if (sd=='r') //τιμή θέσης Δεξιού τροχού else if (sd=='h') //Κατεύθυνση ποσοστό % else if (sd=='v') //Μπαταρία ποσοστό % else if (sd=='a') //Φόρτιση τιμή ρεύματος AC else if(sd=='b' && analogread(v)<700){ if(!el) //Εμφάνιση Μηνύματος Μπαταρίας //Εμφάνιση «Low Battery» else //Εμφάνιση «Χαμηλή Μπαταρία» else if (sd=='d') //Εμφάνιση Απόστασης από εμπόδιο

34 20 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ f=false; //Ολοκλήρωση αντιστοίχησης πληροφοριών ελέγχου της συσκευής else client.print(sd); //Ολοκλήρωση εισαγωγής της πληροφορίας στο αρχείο HTML //τέλος While myfile.close(); //Κλείσιμο Αρχείου. else { //Αν δεν ανοίξει το αρχείο που ζητήθηκε, Αποστολή μηνύματος σφάλματος. client.println("<html><form method= get>error opening file<br>check the sd card and then press the button to restart<input type=submit name=res value=restart> </form></html>"); Κώδικας Arduino 2-4: Συνάρτηση δημιουργίας Feedback (webpage) Η συνάρτηση ολοκληρώνεται με την αποστολή ολόκληρου του html αρχείου, και το κλείσιμο του αρχείου που τον περιείχε. Σε περίπτωση εμφάνισης σφάλματος κατά την λειτουργία της συνάρτησης, προβάλεται σχετικό μήνυμα (μορφή html). Στο Παράρτημα Β βρίσκεται ο πίνακας με το σύνολο των πληροφοριών που αποστέλλεται από την ρομποτική πλατφόρμα ως feedback στον χρήστη. Βιβλιογραφία Ρομποτική Πλατφόρμα Arduino 1. H ρομποτική πλατφόρμα «Arduino Robotic Platform» που τροποποιήθηκε και χρησιμοποιήθηκε στους ελέγχους της εφαρμογής αποτελεί παράγωγο της Πτυχιακής Εργασίας: «Διαδικτυακός Έλεγχος Ρομποτικής Πλατφόρμας», Νάτσιος Χρήστος, ΤΕΙ Λάρισας, Τμ. Μηχανικών Πληροφορικής Τ.Ε 2. Arduino Robotic Platform 3. Εικόνα 2-1: Arduino Robotic Platform 4. Arduino Robotic Platform f=2& t= Arduino WebServer: 6. Arduino WebClient

35 ΚΕΦΑΛΑΙΟ 3 Εφαρμογή Arduino Vehicle Η εφαρμογή Arduino Vehicle περιλαμβάνει ό- λες τις δυνατές επιλογές για τον απομακρυσμένο έ- λεγχο μίας ρομποτικής πλατφόρμας. Η σύνδεση με την ρομποτική πλατφόρμα γίνεται αποκλειστικά μέσω Internet. Επειδή το εύρος των δυνατών χρήσεων της είναι μεγάλο, οι λειτουργίες τμηματοποιούνται σε δύο μεγάλες κατηγορίες, που προσδιορίζουν και τον τρόπο ελέγχου της πλατφόρμας. Η πρώτη κατηγορία αφορά την άμεση χρήση της εφαρμογής και του συνόλου των δυνατοτήτων που έχει. Δηλαδή, ο έλεγχος της ρομποτικής πλατφόρμας γίνεται μέσω του έτοιμου περιβάλλοντος της εφαρμογής. Παράλληλα, είναι διαθέσιμες και όλες οι λειτουργίες αυτοματισμού που διατίθενται. Στο κομμάτι του αυτοματισμού, υλοποιείται η καταγραφή της διαδρομής που εκτελεί η ρομποτική πλατφόρμα, ή/και των υπολοίπων ενεργειών εκτελεί ο μικροελεγκτής. Σε δεύτερο στάδιο, δίδεται η δυνατότητα επεξεργασίας των αρχείων καταγραφής που έχουν δημιουργηθεί, είτε με την μετονομασία ή διαγραφή τους, είτε με την προσθήκη νέων δεδομένων (π.χ. επιμήκυνση της καταγεγραμμένης διαδρομής). Τέλος, σε τρίτο στάδιο, η εφαρμογή

36 22 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ μπορεί να αναπαράγει τα αποθηκεμένα δεδομένα ώστε η ρομποτική πλατφόρμα να εκτελεί πλήρως αυτόνομα τις εντολές αυτές (π.χ. αναπαραγωγή καταγεγραμμένης διαδρομής). Η δεύτερη κατηγορία αναφέρεται στην χρήση έτοιμου περιβάλλοντος ελέγχου, το ο- ποίο έχει δημιουργήσει ο κατασκευαστής της ρομποτικής πλατφόρμας. Όπως αναφέρθηκε, η εφαρμογή συνδέεται μέσω Internet. Συνεπώς, ο δεύτερος αυτός τρόπος ελέγχου περιλαμβάνει την χρήση αρχείων HTML τα οποία και αποτελούν το User Interface. Σε αυτό το σημείο δεν δύναται η χρήση των τεχνικών αυτοματισμού της εφαρμογής, καθώς το html UI του κατασκευαστή διαχειρίζεται εξ ολοκλήρου όλες τις λειτουργίες της ρομποτικής πλατφόρμας. H εφαρμογή ως οντότητα, αποτελείται από ένα σύνολο σελίδων (pages) και μηνυμάτων τα οποία κατευθύνουν τον χρήστη, και επιτρέπουν τον πλήρη έλεγχο της ρομποτικής πλατφόρμας. (εικόνα 3-1) Εικόνα 3-1: Διάγραμμα Περιγραφής και Λειτουργίας της Εφαρμογής 3.1 Κώδικας της Εφαρμογής Ο προγραμματισμός των εφαρμογών (applications) για το Windows Phone γίνεται κυρίως με την χρήση δύο γλωσσών προγραμματισμού. Το περιβάλλον ανάπτυξης είναι το «Visual Studio», όπου είναι απαραίτητη η χρήση του σχετικού Windows Phone SDK. Η ανάπτυξη εφαρμογών για τα WP7 και WP7.1 γίνεται μέσω στο Visual Studio 10, ενώ για

37 Κ Ε Φ Α Λ Α Ι Ο 3 Ε Φ Α Ρ Μ Ο Γ Η A R D U I N O V E H I C L E 23 δημιουργία εφαρμογών για τα WP8 και WP8.1 είναι απαραίτητο τουλάχιστον το Visual Studio 12 και τα Windows 8 ή 8.1 ως OS του υπολογιστή. Το γραφικό περιβάλλον (user interface) είναι γραμμένο σε γλώσσα XAML. Η γλώσσα αυτή είναι σχεδιαστική, και πηγάζει από την XML. Παράλληλα όμως, επιτρέπεται και η χρήση εμβόλιμου κώδικα (embed) html με υποστήριξη και html5. Στο SDK που χρησιμοποιείται, παρέχονται όλα τα βασικά αντικείμενα για την δημιουργία του UI (Button, Text block, Textbox, Bullets, Hyperlinks, κτλ). Οι λειτουργίες του γραφικού περιβάλλοντος, καθώς επίσης και το σύνολο των εργασιών που υλοποιεί η εφαρμογή προγραμματίζονται σε γλώσσα C#. Εδώ, πρωταρχικό ρόλο έχουν τα αντικείμενα και οι classes, καθώς η C# είναι μία καθαρά αντικειμενοστραφής γλώσσα. Όπως, όμως αναφέρθηκε και στην xaml, έτσι και εδώ επιτρέπονται τμήματα εμβόλιμου κώδικα, όπως για παράδειγμα, υποστηρίζονται scripts σε Java. Η Arduino Vehicle εφαρμογή είναι εξ ολοκλήρου γραμμένη σε XAML (UI) και C# (λειτουργίες). Ο προγραμματισμός της εφαρμογής γίνεται με βάση τις σελίδες της εφαρμογής (συγκεκριμένες λειτουργίες ανά σελίδα) αλλά και με βάση τις επιλογές του χρήστη (επιλογή ανάμεσα από πολλαπλές λειτουργίες σε μία σελίδα). Το συνολικό μέγεθος του κώδικα ολόκληρης της εφαρμογής είναι περίπου 3200 γραμμές. Ο αριθμός αυτός αντιστοιχεί περίπου σε γραμμές ανά σελίδα εφαρμογής, (XAML και C#). Λεπτομερέστερα, τα μεγέθη αναφέρονται στον επίλογο της παρούσας εργασίας (κεφ. 9) Στην συνέχεια της εργασίας, παρουσιάζονται διάφορα τμήματα του κώδικα σε XAML και σε C#. Προς διευκόλυνση της ανάγνωσης, διαχωρίζονται οι δύο αυτές γλώσσες, εκτός από τις λεζάντες, και με διαφορετικά χρώματα στα σχόλιά τους (XAML, C#). 3.2 Σελίδες της Εφαρμογής - Λειτουργία Μία πρώτη εικόνα της διάταξης και της λειτουργίας της εφαρμογής, φαίνεται αναλυτικότατα στο σχετικό διάγραμμα. (εικόνα 3-1) Ξεκινώντας, λοιπόν, την αναλυτική παρουσίαση των σελίδων, πρέπει να τονιστεί ότι η θέση προσανατολισμού της συσκευής, για την βέλτιστη λειτουργία της εφαρμογής, είναι η οριζόντια (orientation=landscape). Παρ όλα αυτά, όμως, η κεντρική σελίδα, και η σελίδα

38 24 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ των ρυθμίσεων υποστηρίζουν και την κάθετη θέση (orientation=portait). Έτσι παρουσιάζεται και η τεχνική διαχείρισης των αλλαγών στον τρόπο που κρατάει ο χρήστης την συσκευή του Κεντρική σελίδα (Main Page) Εκκινώντας, ο χρήστης την εφαρμογή, φορτώνεται η αρχική σελίδα (MainPage). Στη σελίδα αυτή υποστηρίζονται όλες οι θέσεις προσανατολισμού της συσκευής, με αναδιάταξη του περιεχομένου της.(εικόνα 3-2) Εικόνα 3-2: Κεντρική Σελίδα. ΑΡΙΣΤΕΡΑ: Κάθετη θέση, ΔΕΞΙΑ: Οριζόντια θέση Η σελίδα αυτή αποτελείται από ένα «pivot control», που περιέχει τρείς προβολές. Η στοίχιση είναι οριζόντια και κυκλική. Έτσι επιτρέπεται η αμφίδρομη μετακίνηση του χρήστη στις προβολές (αριστερά/δεξιά). Η πρώτη προβολή (move control) περιλαμβάνει την επιλογή ελέγχου μέσω της εφαρμογής. Η δεύτερη (website), την επιλογή ελέγχου μέσω web browser, και η τρίτη (about) περιέχει τις πληροφορίες περιγραφής της εφαρμογής.

39 Κ Ε Φ Α Λ Α Ι Ο 3 Ε Φ Α Ρ Μ Ο Γ Η A R D U I N O V E H I C L E 25 Στην application bar (εικόνα 3-3) της σελίδας αυτής, εμπεριέχονται οι βασικές ενέργειες για ρύθμιση, ενημέρωση σχετικά με την εφαρμογή, αλλά και οι επιλογές προώθησης και διαφήμισης της εφαρμογής. Εικόνα 3-3: Application Bar Κεντρικής σελίδας Συγκεκριμένα, αποτελείται από τέσσερα κουμπιά, και πέντε αντικείμενα menu. Το πρώτο κουμπί wifi, είναι το κουμπί σύνδεσης, το οποίο αλλάζει χρώμα και κείμενο, ανάλογα με την κατάσταση συνδεσιμότητας της συσκευής. το επόμενο κουμπί settings μεταφέρει τον χρήστη στην σελίδα ρυθμίσεων. Το τρίτο κουμπί, τον μεταφέρει στην προβολή about της κεντρικής σελίδας (όπου βρίσκεται) και το τέταρτο κουμπί τον μεταφέρει στον δικτυακό τόπο όπου βρίσκεται δημοσιοποιημένη η παρούσα εργασία. Τα αντικείμενα του menu είναι ορατά μόνο κατά την ανάπτυξη (expand) της appbar, και περιλαμβάνουν την δυνατότητα βαθμολόγησης της εφαρμογής στο store (rate me), την σύνδεση με facebook «like me», twitter «tweet me» και την δυνατότητα επικοινωνίας μέσω «mail me». Τέλος, υπάρχει και σύνδεση για την επίσημη σελίδα του μικροελεγκτή Arduino, ο οποίος είναι το εγκέφαλος της ρομποτικής πλατφόρμας που χρησιμοποιήθηκε στην εφαρμογή Σελίδα Ελέγχου (Move Control) Με επιλογή στο κουμπί «move control» της κεντρικής σελίδας, ο χρήστης μεταφέρεται στην σελίδα MoveTestPage. Η σελίδα αυτή αποτελεί την καρδιά της εφαρμογής, αφού εδώ πραγματοποιείται ο έλεγχος της ρομποτικής πλατφόρμας, καθώς επίσης και το σύνολο των λειτουργιών αυτοματισμού της συσκευής (καταγραφή / αναπαραγωγή διαδρομής). Οι συσκευές Windows Phone, όταν βρίσκονται σε πλάγια (οριζόντια) θέση, συνήθως κρατιούνται και με τα δύο χέρια από τον χρήστη. Έτσι, τα κουμπιά ελέγχου, τοποθετήθηκαν περιμετρικά της σελίδας, διαχωρίζοντας, παράλληλα και τις ομάδες εντολών που εκτελούν. (εικόνα 3-4)

40 26 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Εικόνα 3-4: Σελίδα Ελέγχου (MoveTestPage) Στην αριστερή πλευρά βρίσκεται το κουμπί σύνδεσης «connected», και τα κουμπιά κίνησης μπροστά «front», στάσης «stop» και κίνησης πίσω «back». Επιπλέον, τα κουμπιά «front» και «back», αλλάζουν τις λειτουργίες τους σε αύξηση ταχύτητας «fast» και μείωση ταχύτητας «slow», όταν η ρομποτική πλατφόρμα κινείται προς μία κατεύθυνση. Στην δεξιά πλευρά βρίσκονται τα κουμπιά κίνησης δεξιά «right» και αριστερά «left», αλλά και το κουμπί «options» που διαχειρίζεται την εμφάνιση ή απόκρυψη της application bar. Η application bar (εικόνα 3-4), αποτελείται από τέσσερα κουμπιά που ολοκληρώνουν το σύνολο των λειτουργιών της εφαρμογής. Πάνω (πρώτο) είναι το κουμπί «settings» που μεταφέρει τον χρήστη στην σελίδα των ρυθμίσεων. Το δεύτερο κουμπί «save trip» ενεργοποιεί την διαδικασία καταγραφής διαδρομής, και παράλληλα δίνει την επιλογή στον χρήστη να μεταφερθεί στην σελίδα των αρχείων. Με το κουμπί «power» ελέγχονται οι λειτουργίες ενέργειας της ρομποτικής πλατφόρμας. Οι επιλογές του είναι επανεκκίνηση «restart» και τερματισμός «shutdown». Τέλος, υ- πάρχει το κουμπί «refresh» με το οποίο ανανεώνεται η σύνδεση της εφαρμογής με την ρομποτική πλατφόρμα Σελίδα Αρχείων (File view Page) Αυτή η σελίδα, περιλαμβάνει στην αριστερή πλευρά μία λίστα με όλα τα αρχεία που έχει δημιουργήσει ο χρήστης, και τα οποία μπορεί να τα τροποποιήσει ή να εκτελέσει το περιεχόμενό τους. Στην δεξιά πλευρά εμφανίζεται το αρχείο που δημιουργήθηκε την τελευταία φορά, και δύο βασικές επιλογές. Η διαγραφή όλων των αρχείων «delete all», και η δημιουργία νέου αρχείου «create file». (εικόνα 3-5)

41 Κ Ε Φ Α Λ Α Ι Ο 3 Ε Φ Α Ρ Μ Ο Γ Η A R D U I N O V E H I C L E 27 Εικόνα 3-5: Σελίδα Αρχείων Η μετάβαση στην σελίδα αρχείων γίνεται από την σελίδα ελέγχου κίνησης (MoveTestPage), και μέσω της επιλογής «open saved» που βρίσκεται μέσα στο κουμπί «save trip» της appbar. Ο δεύτερος τρόπος μετάβασης σε αυτή την σελίδα είναι μετά την ολοκλήρωση της διαδικασίας καταγραφής, με την επιλογή «view file» μέσα στο σχετικό μήνυμα που εμφανίζεται. (εικόνα 3-5) Με την επιλογή (tap) του ονόματος ενός αρχείου, προβάλλονται τα περιεχόμενα του αρχείου (αποθηκευμένες εντολές), και εμφανίζονται οι επιλογές αυτοματισμού (αναπαραγωγή εντολών, επεξεργασία περιεχομένου, επιλογές επεξεργασίας αρχείου). Επιπλέον, με παρατεταμένη επιλογή του ονόματος ενός αρχείου, ενεργοποιούνται, ξεχωριστά, οι επιλογές επεξεργασίας του (μετονομασία / διαγραφή) Σελίδα Ελέγχου Web Browser Σε περίπτωση που ο χρήστης δεν επιθυμεί τον έλεγχο της πλατφόρμας μέσω της ε- φαρμογής, μπορεί να μεταβεί στο build-in πρόγραμμα browser των WP συσκευών (Internet Explorer), ώστε να συνδεθεί με αυτόν τον τρόπο. (εικόνα 3-6) Εικόνα 3-6: Έλεγχος μέσω Web Browser

42 28 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Στο κουτί κειμένου βρίσκεται ήδη η αποθηκευμένη διεύθυνση του μικροελεγκτή, ο- πότε η εφαρμογή συνδέεται άμεσα, επιλέγοντας το κουμπί «connect»(εικόνα 3-6). Εναλλακτικά, η διεύθυνση τροποποιείται είτε με άμεση επεξεργασία του περιεχομένου του textbox, είτε μέσα από την σελίδα των ρυθμίσεων της συσκευής Σελίδα Ρυθμίσεων Στην σελίδα αυτή βρίσκονται συγκεντρωμένες όλες οι ρυθμίσεις της εφαρμογής. Οι επιλογές που περιλαμβάνονται αφορούν τόσο την διεύθυνση URL της ρομποτικής πλατφόρμας, όσο και επιλογές για τον τρόπο σύνδεσης, τον τρόπο λειτουργίας και τις πληροφορίες εμφάνισης της εφαρμογής. Αναλυτικότερη παρουσίαση των περιεχομένων, των λειτουργιών και των μεθόδων που εφαρμόζονται, γίνεται στην ενότητα Μηνύματα Εφαρμογής Βασικός πυλώνας της καλής εμπειρίας χρήσης, είναι η επικοινωνία της εφαρμογής με τον χρήστη και η αλληλεπίδρασή τους. Για αυτόν το λόγο, εμφανίζονται σχετικά μηνύματα σε διάφορα στάδια της εφαρμογής, ώστε να ενημερώνεται και να κατευθύνεται ο χρήστης σε ένα πλήρως διαδραστικό περιβάλλον. Τα μηνύματα αυτά είναι δύο ειδών. Τα ενημερωτικά, περιλαμβάνουν διάφορες πληροφορίες σχετικά με τις καταστάσεις της εφαρμογής, της συνδεσιμότητάς της, και τις καταστάσεις λειτουργίας της ρομποτικής πλατφόρμας. Οι επιλογές προς τον χρήστη είναι είτε «ok» είτε «ok και cancel». Στο δεύτερο είδος, ανήκουν τα μηνύματα επιλογών, τα οποία περιέχουν τις διαθέσιμες επιλογές για την ολοκλήρωση συγκεκριμένων ενεργειών που αφορούν είτε τις λειτουργίες και τον τρόπο εμφάνισης της εφαρμογής, είτε την λειτουργία της ρομποτικής πλατφόρμας. Οι επιλογές - κουμπιά, σε αυτά τα μηνύματα, προσαρμόζονται ανάλογα με τις εκάστοτε λειτουργίες, σε κάθε, όμως, περίπτωση υπάρχει διαθέσιμη η επιλογή «cancel». Λεπτομερέστατη ανάλυση όλων των μηνυμάτων, των τρόπων υλοποίησης και λειτουργίας τους γίνεται στο σχετικό κεφάλαιο 7.

43 Κ Ε Φ Α Λ Α Ι Ο 3 Ε Φ Α Ρ Μ Ο Γ Η A R D U I N O V E H I C L E Κουμπί Συσκευών «ΠΙΣΩ» (Hardware Back Button) Όλες οι συσκευές Windows Phone διαθέτουν τρία κουμπιά, τοποθετημένα στο σώμα της συσκευής (hardware buttons). Τα κουμπιά αυτά είναι κοινά σε όλες τις συσκευές smartphone και βρίσκονται στην ίδια σειρά. Πρώτο, εξ αριστερών, είναι το κουμπί «πίσω» (back button), με το οποίο πλοηγείται ο χρήστης μέσα στην εφαρμογή (ανάμεσα στις σελίδες), αλλά και τερματίζει την λειτουργία της εφαρμογής. Το κουμπί αυτό, είναι και το μόνο διαθέσιμο για προγραμματισμό (overloading) ώστε να συμφωνεί η λειτουργία του με τις ανάγκες κάθε εφαρμογής. Το δεύτερο (μεσαίο) κουμπί είναι το κουμπί «έναρξη» (start button) που μεταφέρει τον χρήστη στην αρχική σελίδα του smartphone (main page), και το τρίτο (δεξιό) κουμπί είναι αυτό της «αναζήτησης» (search button), που εκτελεί αναζητήσεις μέσα στο τηλέφωνο, αλλά και στο Internet, μέσω της μηχανής Bing. Τα δύο αυτά κουμπιά, θέτουν την εκτελούμενη εφαρμογή σε κατάσταση αναμονής. Σε όλες τις σελίδες της εφαρμογής Arduino Vehicle, παραμετροποιήθηκε και ελέγχεται η λειτουργία του σταθερού κουμπιού «πίσω» (hardware back button). Αυτό γίνεται για να αποτραπεί οποιαδήποτε αθέμιτη ενέργεια αλλαγής σελίδων, τερματισμού της εφαρμογής, ή βίαιης διακοπής κάποιας διεργασίας-διαδικασίας. Ενδεικτικό παράδειγμα αποτελεί η λειτουργία του back button της σελίδας ελέγχου (MoveTestPage), που φαίνεται και στο παρακάτω κομμάτι κώδικα C# 3-1. Σε περίπτωση επιλογής του κουμπιού «πίσω», ο χρήστης μεταφέρεται στο κεντρικό μενού. Όμως, ενδέχεται να βρίσκονται σε εκτέλεση κάποιες λειτουργίες της εφαρμογής, ή να βρίσκεται σε κίνηση η ρομποτική πλατφόρμα. //Stop Arduino move + Disconnect if (IsArduino) { Communicate("?butt0"); //Εντολή για Στάση Κίνησης Communicate("?z"); //Αποσύνδεση Πλατφόρμας Εφαρμογής myappsettings.isarduinoconnected = false; if (iscapture) StopCapture(); //Διακοπή Καταγραφής if (isautomove) SelectCommand(int.MaxValue); //Διακοπή Αναπαραγωγής //Μεταφορά στην Κεντρική Σελίδα NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative)); Κώδικας C# 3-1: Εντολές του Hardware Back Button της MoveTestPage

44 30 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Έτσι, αρχικά, γίνεται διακοπή της κίνησης της ρομποτικής πλατφόρμας, και αποσύνδεσή της από την εφαρμογή. Κατόπιν γίνεται διακοπή των λειτουργιών καταγραφής και αυτόματης εκτέλεσης αποθηκεμένης διαδρομής (στην περίπτωση που εκτελείται κάποια από αυτές τις λειτουργίες αυτοματισμού). Τέλος, ολοκληρώνονται οι διαδικασίες με τη μεταφορά του χρήστη στην κεντρική σελίδα.

45 Κ Ε Φ Α Λ Α Ι Ο 3 Ε Φ Α Ρ Μ Ο Γ Η A R D U I N O V E H I C L E 31 Βιβλιογραφία Εισαγωγή στον Προγραμματισμό των Windows Phone 1. C# Προγραμματισμός 2. C# Προγραμματισμός 3. Terminology Windows Phone 7 for Absolute Beginners Phone-7-Development-for-Absolute-Beginners Windows Phone 8 for Absolute Beginners Phone-8-Development-for-Absolute-Beginners/ Windows Phone 8.1 for Absolute Beginners Ανάπτυξη εφαρμογών για Windows Phone: Οδηγός Developing 8. Ανάπτυξη εφαρμογών για WindowsPhone 9. WindowsPhone Tools WindowsPhone Power Tools Nullable variables Μήκος μεταβλητής string vs.90).aspx 13. Πληροφορίες Δικτύου (network info) html5 in WP app developingwindows-store-apps-with-html5-jump-start# fbid=zwpbo-9r1ke Stores: Windows Phone & Windows Σχετικά Βιβλία Βιβλία: ebook gallery Βιβλία: ebook gallery

46

47 Κ Ε Φ Α Λ Α Ι Ο 4 Ε Π Ι Κ Ο Ι Ν Ω Ν Ι Α 33 ΚΕΦΑΛΑΙΟ 4 Επικοινωνία Μετά την περιγραφή της ρομποτικής πλατφόρμας «Arduino Robitic Platform» και την βασική περιγραφή της εφαρμογής «Arduino Vehicle», σε αυτό το κεφάλαιο γίνεται λόγος για τον τρόπο σύνδεσης και επικοινωνίας των δύο αυτών μερών: της ρομποτικής πλατφόρμας και της εφαρμογής συσκευής Windows Phone. Αρχικά περιγράφεται ο τρόπος σύνδεσης στο Internet, και οι μέθοδοι που ακολουθούνται τόσο από την Ρομποτική Πλατφόρμα, όσο και από τις συσκευές Smartphone για αυτόν τον σκοπό. Στην συνέχεια παρουσιάζεται η διαδικασία σύνδεσης της εφαρμογής Arduino Vehicle στο Internet, και τέλος, η μέθοδος επικοινωνίας της εφαρμογής με τον μικροελεγκτή της ρομποτικής πλατφόρμας.

48 34 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 4.1 Σύνδεση Ρομποτικής Πλατφόρμας Η δικτυακή σύνδεση της ρομποτικής πλατφόρμας, διέπεται από την ακολουθία: Πλατφόρμα LAN WAN/Internet. Έτσι, προτείνεται η χρήση από την πλατφόρμα μίας στατικής διεύθυνσης (static IP) για την σύνδεσή της στο LAN, διότι συνήθως αυτή η ρύθμιση γίνεται μέσα στον μικροελεγκτή, και επίσης είναι σημαντικό να είναι πάντοτε γνωστή η IP της ρομποτικής πλατφόρμας. Στη συνέχεια, και ανάλογα με τις ρυθμίσεις του κάθε δικτύου, γίνεται δρομολόγηση (Routing rule) μεταξύ της public IP του δικτύου και της static IP της πλατφόρμας, ώστε να είναι προσβάσιμη από οποιοδήποτε σημείο του Internet. Εικόνα 4-1: Συνδεσμολογία Δικτύου της Ρομποτικής Πλατφόρμας Στη ρομποτική πλατφόρμα «Arduino Robotic Platform» που χρησιμοποιούμε, ο μικροελεγκτής συνδέεται, μέσω των pin του, μία Ethernet shield, η οποία με την σειρά της συνδέεται με καλώδιο ethernet (RJ45 straight-through) στο ethernet interface του access point. Στην συνέχεια, ολόκληρη η πλατφόρμα συνδέεται μέσω του wifi interface του access point στο τοπικό δίκτυο (LAN) και έπειτα στο Internet. (εικόνα 4-1) Η διευθυνσιοδότηση της πλατφόρμας γίνεται με την static IP , και στο access point δρομολογείται ολόκληρη η επικοινωνία από το wifi interface (WAN) στο ethernet interface (LAN). 4.2 Σύνδεση Συσκευής Windows Phone Οι συσκευές Widows Phone, διαθέτουν wifi network interface για σύνδεση σε οποιοδήποτε ασύρματο δίκτυο, και 3G ή/και 4G για σύνδεση δεδομένων ώστε να έχουν πρόσβαση ανά πάσα στιγμή στο Internet. Αυτό σημαίνει πως εφόσον η πλατφόρμα είναι συνδεδεμένη στο Internet, τότε θα είναι και προσβάσιμη από οποιαδήποτε συσκευή με Windows Phone

49 Κ Ε Φ Α Λ Α Ι Ο 4 Ε Π Ι Κ Ο Ι Ν Ω Ν Ι Α 35 Το ίδιο ισχύει και στην περίπτωση σύνδεσης μέσω τοπικού δικτύου (LAN). Η συσκευή θα βρει το δίκτυο της ρομποτικής πλατφόρμας (WAN wifi interface) του access point, και θα συνδεθεί. (εικόνα 4-2). Εικόνα 4-2: Προβολή των ρυθμίσεων WiFi και DataConnection (3G/4G) στα WP Σε αυτό το σημείο, πρέπει να διευκρινιστεί πως όταν είναι ταυτόχρονα ενεργοποιημένες η σύνδεση δεδομένων (3G/4G), και το ασύρματο δίκτυο (wifi), προτεραιότητα από το λειτουργικό σύστημα έχει η σύνδεση ασύρματου δικτύου. Όλα τα δεδομένα δρομολογούνται μέσω του wifi, και έτσι περιορίζεται η πιθανότητα χρέωσης του χρήστη Επικοινωνία Εφαρμογής με το Internet Κατά την εκκίνηση της εφαρμογής γίνεται έλεγχος συνδεσιμότητας της συσκευής. Το αποτέλεσμα αυτού του ελέγχου ενημερώνει τον χρήστη εάν είναι συνδεδεμένος στο δίκτυο (Internet), καθώς επίσης και με ποιο τρόπο είναι συνδεδεμένος (WiFi, 3G,κτλ). Παράλληλα, ενημερώνεται και το σχετικό εικονίδιο στην application bar, με το αντίστοιχο εικονίδιο και κείμενο. Οι καταστάσεις σύνδεσης που υποστηρίζει το λειτουργικό σύστημα για τις συσκευές Windows Phone είναι: Σύνδεση μέσω Wifi Σύνδεση δεδομένων GSM (3G/4G) Σύνδεση δεδομένων CDMA Σύνδεση μέσω Ethernet Καμία σύνδεση

50 36 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Πρακτικά, όμως, και συγκεκριμένα στα smartphones, οι καταστάσεις σύνδεσης που υποστηρίζονται και από το hardware είναι τρεις: Σύνδεση μέσω Wifi Σύνδεση δεδομένων (GSM/CDMA) Καμία Σύνδεση Έτσι, δημιουργήθηκαν τρία εικονίδια για την application bar, που να αντιστοιχούν στις τρείς παραπάνω καταστάσεις συνδεσιμότητας. (πίνακας 4-1) Πίνακας 4-1: Εικονίδια Σύνδεσης της Application Bar Σύνδεση Εικονίδιο Κείμενο Ενέργεια Εικονιδίου WiFi GSM / CDMA Αποσυνδεδεμένο wifi «όνομα σύνδεσης» κενό Εμφάνιση Λεπτομερειών Σύνδεσης: όνομα δικτύου, περιγραφή, τύπος δικτύου, υποτύπος (subtype), κατάσταση δικτύου, bandwidth, χαρακτηριστικά δικτύου Έλεγχος Συνδεσιμότητας Στην κεντρική σελίδα της εφαρμογής, η τιμή που προσδιορίζει την κατάσταση διαθεσιμότητας βρίσκεται στην μεταβλητή «NetType», η οποία ενημερώνεται με τους τρείς παρακάτω τρόπους. CheckConnectivity Πρώτος τρόπος είναι μέσα στον event handler CheckConnectivity ο οποίος καλείται όταν αλλάξει η διεύθυνση (IP) της συσκευής. Αλλαγή (ή ανανέωση) της IP γίνεται όταν γίνει αλλαγή στο δίκτυο που συνδέεται η συσκευή. Κάποιες από τις περιπτώσεις που γίνεται είναι η μετάβαση από GSM (3G/4G) σε wifi, και το αντίστροφο, όπως επίσης και λόγω η απώλειας σύνδεσης (disconnect). Η χρήση αυτής της μεθόδου γίνεται μέσα στην main συνάρτηση της σελίδας, με overloading της μεθόδου NetworkAddressChanged: System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged += new System.Net.NetworkInformation.NetworkAddressChangedEventHandler(CheckConnectivity);

51 NetworkAvailabilityChanged Κ Ε Φ Α Λ Α Ι Ο 4 Ε Π Ι Κ Ο Ι Ν Ω Ν Ι Α 37 Ο δεύτερος τρόπος ενημέρωσης της NetType γίνεται μέσα στον event handler networkavailabilitychanged, ο οποίος ενεργοποιείται με την αλλαγή της διαθεσιμότητας του δικτύου WiFi. Ο συγκεκριμένος τρόπος αφορά μόνο σύνδεση μέσω του wifi interface της συσκευής, οπότε και δεν εφαρμόζεται στην περίπτωση της σύνδεσης 3G/4G. Η χρήση του, και σε αυτή την περίπτωση, γίνεται με υπερφόρτωση (overloading) της μεθόδου NetworkAvailabilityChanged, μέσα στην main συνάρτηση της σελίδας: DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(networkAvailabilityChanged); Η C# γλώσσα είναι «key sensitive», οι δύο συναρτήσεις «NetworkAvailability Changed» και «networkavailabilitychanged», είναι δύο διαφορετικές μέθοδοι, και αυτό φαίνεται από την διαφορά στο πρώτο τους γράμμα (κεφαλαίο Ν, έναντι πεζού n). CheckConnection Ολοκληρώνοντας, ο τρίτος και κυριότερος τρόπος ενημέρωσης της NetType είναι μέσω της συνάρτησης CheckConnection (κώδικας C# 4-1). Αυτή είναι και η βασική συνάρτηση στην οποία πραγματοποιούνται όλοι οι έλεγχοι συνδεσιμότητας και ενημερώνεται το UI. Η κλίση της γίνεται κατά την έναρξη της εφαρμογής (με την ολοκλήρωση του loading της σελίδας), μέσα και στους δύο event handlers «CheckConnectivity» και «NetworkAvailability Changed» που περιγράφτηκαν παραπάνω, αλλά επίσης και μέσω του σχετικού κουμπιού σύνδεσης της application bar. Η συνάρτηση αυτή περιέχει μία δομή επιλογής (switch) η οποία, επιλέγοντας τον τύπο του δικτύου στο οποίο είναι συνδεδεμένη η WP συσκευή, ανανεώνει το UI, ενημερώνοντας τον χρήστη για τον τύπο του συνδεδεμένου δικτύου, ο οποίος επιστρέφεται από το property NetworkInterfaceType. Στην πραγματικότητα, όμως, η τιμή που επιστρέφεται αντιστοιχεί στο network interface της συσκευής, μέσω του οποίου πραγματοποιείται η σύνδεση στο δίκτυο. Με αυτόν τον τρόπο γίνεται η ταυτόχρονη εξαγωγή συμπερασμάτων για την κατάσταση συνδεσιμότητας αλλά και τον τύπο σύνδεσης. (κώδικας C# 4-1). private int CheckConnection() { //Select the Application Bar Icon-Button var appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[3]; try { switch //Switch the Current Connected network Interface (Microsoft.Phone.Net.NetworkInformation.NetworkInterface.NetworkInterfaceType)

52 38 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ { //Σύνδεση μέσω WiFi case NetworkInterfaceType.Wireless80211: appbtn.text = "Wifi"; //AppBar button Update appbtn.iconuri = new Uri("/Images/Icons/myIcons.connected.png); return 1; //Σύνδεση μέσω GSM case NetworkInterfaceType.MobileBroadbandGsm: //Σύνδεση μέσω CDMA case NetworkInterfaceType.MobileBroadbandCdma: //Σύνδεση μέσω Ethernet case NetworkInterfaceType.Ethernet: appbtn.text = Microsoft.Phone.Net.NetworkInformation.NetworkInterface. NetworkInterfaceType.ToString();//AppBar button Update appbtn.iconuri = new Uri("/Images/Icons/myIcons.mobInternet.png); //Navigate user to WiFi settings GoConnectionSettings("Message to User, "Connection Cost Warning"); return 2; //Αποσυνδεδεμένο default: appbtn.text = "NONE"; appbtn.iconuri = new Uri("/Images/Icons/myIcons.disconnected.png); GoConnectionSettings("Message to User", "NO Network"); return 0; //end switch catch (Exception) {//Περίπτωση εμφάνισης οποιουδήποτε σφάλματος ~> Ενέργειες όπως Αποσυνδεδεμένο appbtn.text = "NO Network"; appbtn.iconuri = new Uri("/Images/Icons/myIcons.disconnected.png); GoConnectionSettings("Message to User", "Network Detection Problem"); return 0; Κώδικας C# 4-1: Συνάρτηση Ελέγχου Συνδεσιμότητας της συσκευής* Επικοινωνία Εφαρμογής με τον Χρήστη Για την διάδραση της εφαρμογής με τον χρήστη, το περιβάλλον της εφαρμογής ανανεώνεται και ενημερώνεται ανάλογα με την συνδεσιμότητα. Οι ενέργειες που εκτελούνται περιλαμβάνουν την αλλαγή του εικονιδίου σύνδεσης και της λεζάντας του στην application bar (σύμφωνα με τον πίνακα 4-1), και ταυτόχρονα προσδιορίζονται και οι πληροφορίες σύνδεσης ή οδηγίες για επανασύνδεση που θα εμφανιστούν. (κώδικας C# 4-1). Στις περιπτώσεις που η σύνδεση είναι σύνδεση δεδομένων, ή δεν υπάρχει καμία σύνδεση, ή παρουσιαστεί κάποιο πρόβλημα στην εκτέλεση της NetworkInterfaceType, τότε καλείται η συνάρτηση GoConnectionSettings. Η κύρια λειτουργία της είναι να μεταφέρει τον χρήστη στη σελίδα ρυθμίσεων ασύρματων δικτύων (wifi) της συσκευής, ώστε να συνδεθεί μέσω wifi. Η συνάρτηση δέχεται δύο ορίσματα, το κείμενο, και τον τίτλο του μηνύματος

53 Κ Ε Φ Α Λ Α Ι Ο 4 Ε Π Ι Κ Ο Ι Ν Ω Ν Ι Α 39 που θα εμφανίσει, αναλόγως της κατάστασης κλίσης της, ενώ η μεταφορά ολοκληρώνεται με τις εντολές: //Δήλωση μεταβλητής connectionsettings ConnectionSettingsTask connectionsettings = new ConnectionSettingsTask(); //Ρύθμιση μετάβασης στην σελίδα ρυθμίσεων WiFi connectionsettings.connectionsettingstype = ConnectionSettingsType.WiFi; // Μετάβαση στην σελίδα connectionsettings.show(); Όπως φαίνεται, οι εντολές είναι η δήλωση (ρύθμιση) της σελίδας των ρυθμίσεων που θα μεταβεί, και η μετάβαση στην σελίδα αυτή. Ολοκληρώνοντας, όταν υπάρχει σύνδεση μέσω wifi, υπάρχει η δυνατότητα προβολής πληροφοριών - χαρακτηριστικών του δικτύου. Αυτό επιτυγχάνεται με επιλογή του κουμπιού σύνδεσης της application bar, το οποίο είναι πράσινο και φέρει την λεζάντα «wifi» (πίνακας 4-1). Οι πληροφορίες που εμφανίζονται είναι: NetworkInterfaceList net = new NetworkInterfaceList();//Δήλωση του αντικειμένου net.current.interfacename //όνομα δικτόυ - Network Name net.current.description //περιγραφή δικτύου - Description net.current.interfacetype //τύπος - Type net.current.interfacesubtype //SubType net.current.interfacestate //κατάσταση - State net.current.bandwidth //Bandwidth net.current.characteristics //χαρακτηριστικά δικτύου - Characteristics 4.3 Σύνδεση Εφαρμογής με Ρομποτική Πλατφόρμα Η επικοινωνία μεταξύ της ρομποτικής πλατφόρμας και του χρήστη-εφαρμογή γίνεται, κατά το πρότυπο «server-client». Ο μικροελεγκτής αναλαμβάνει ρόλο server, ώστε να δέχεται εντολές και να στέλνει κάθε φορά το αντίστοιχο feedback και ο χρήστης τον ρόλο client, στέλνοντας κάθε φορά μία εντολή, δεχόμενος την αντίστοιχη απάντηση για την ενημέρωση του UI. Εναλλακτικά, ο μικροελεγκτής θα μπορούσε να λειτουργήσει ως client, και να συνδέεται μέσω κάποιου άλλου server, το οποίο όμως δεν ήταν εφικτό στην παρούσα κατάσταση. (εικόνα 4-3). Συνεπώς, για την ρομποτική πλατφόρμα, διατηρείται το πλεονέκτημα αποστολής ο- λόκληρων αρχείων html, τα οποία είτε να αποτελούν ένα περιβάλλον χρήστη (UI), είτε να περιέχουν μόνο πληροφορίες σχετικά με την λειτουργία της (feedback). Ταυτόχρονα, λειτουργώντας αυτόνομα μέσω internet, επιτρέπει μία ενεργή σύνδεση κάθε φορά, ενώ είναι προσβάσιμη από οποιαδήποτε συσκευή που διαθέτει πρόγραμμα web browser.

54 40 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Εικόνα 4-3: Συνδεσμολογία Server (Arduino Platform) Client (WP Application) Επικοινωνία Εφαρμογής με τον Server - Μικροελεγκτή Όλες οι διεργασίες που περιλαμβάνουν επικοινωνία με άλλες συσκευές, ή/και streaming δεδομένων γίνονται ασύγχρονα στα Windows Phone. Έτσι, για να επιτευχθεί η επικοινωνία με την ρομποτική πλατφόρμα, εκτελείται μία σειρά από συναρτήσεις και event handlers που διαχειρίζονται την επικοινωνία αυτή. Κύρια συνάρτηση είναι η Communicate, η οποία αναλαμβάνει την επιλογή του τρόπου επικοινωνίας για την εκκίνηση των σχετικών διαδικασιών αποστολής των εντολών από την εφαρμογή προς τον μικροελεγκτή. Ακολουθεί η περιγραφή της λειτουργίας της, καθώς επίσης και τμήμα του κώδικά της. (κώδικας C# 4-2) public void Communicate(string command) {//Έλεγχος διαθεσιμότητας δικτύου if (IsNetwork) { //Σύνταξη URL πλατφόρμας + Εντολή NowCmd = arduinouri + command + "=" + DateTime.Now.Ticks; if (client.isbusy) //Έλεγχος ολοκλήρωσης προηγούμενης εντολής ResponceTxtblk.Text = "Waiting Response \n\n WebCliend is busy"; else {//Επιλογή τρόπου επικοινωνίας και αποστολή εντολής if (commode) { //Case HttpReq else { //Case WebClient Κώδικας C# 4-2: Συνάρτηση Επικοινωνίας με Arduino (αποστολή εντολών) Με την κλίση της Communicate, αρχικά γίνεται έλεγχος συνδεσιμότητας της συσκευής. Εφόσον η συσκευή είναι συνδεδεμένη στο δίκτυο, τότε εκτελούνται οι εντολές επικοινωνίας. Σε διαφορετική περίπτωση, ενημερώνεται ο χρήστης, και κλειδώνει το UI (απενεργοποιούνται συγκεκριμένα κουμπιά), ώστε να διασφαλιστεί η ποιότητα λειτουργίας της συσκευής.

55 Κ Ε Φ Α Λ Α Ι Ο 4 Ε Π Ι Κ Ο Ι Ν Ω Ν Ι Α 41 Τα Windows Phone 7.1 διαθέτουν δύο μεθόδους για ασύγχρονη επικοινωνία. Η μία είναι μέσω Web Client και η δεύτερη μέσω Http Web Request. Η βασική τους διαφορά έγκειται στο γεγονός ότι η Web Client ενσωματώνει (αυτοματοποιεί) τις λειτουργίες της HttpWebRequest, κάνοντάς την πιο εύκολη στην χρήση, αλλά λιγότερο παραμετροποιήσιμη, αφού «κρύβει» πολλά από τα ρυθμιζόμενα χαρακτηριστικά της επικοινωνίας. Στον αντίποδα, η Http Web Request, απαιτεί πιο προσεκτική χρήση, λόγω των παραμετροποιήσεων και των events που πρέπει να διαχειριστούν. Η λειτουργία της, όμως, είναι πιο σταθερή λειτουργία, και επιπλέον δίνεται η δυνατότητα χρήσης break points ή notification messages σε κάθε στάδιο της εκτέλεσής της. Επειδή οι δύο αυτές μέθοδοι εκτελούν τις ίδιες διεργασίες, στις επόμενες εκδόσεις του λειτουργικού (v8, 8.1), έχουν συγχωνευτεί σε μία, την HttpWebRequest. Στην εφαρμογή Arduino Vehicle, καθότι ο χαρακτήρας της εκτός από λειτουργικός είναι και εκπαιδευτικός, έχουν προστεθεί και οι δύο αυτές μέθοδοι, με ελεύθερη την επιλογή χρήσης τους. (κώδικας C# 4-2) Μέθοδος Web Client Η μέθοδος του αντικειμένου «WebClient» χωρίζει τον κώδικα λειτουργία της σε τέσσερα (4) τμήματα. Αρχικά γίνεται δήλωση του αντικειμένου μέσα στην class της σελίδας, ώστε να είναι προσβάσιμο από όλες τις συναρτήσεις. (κώδικας C# 4-3) WebClient client = new WebClient(); //Δήλωση WebClient μέσα στην class client.downloadstringasync(new Uri(NowCmd));//Κλίση του WebClient μέσα στην Communicate client.downloadstringcompleted += //Δήλωση-Υπερφόρτωση του event handler μέσα στη main new DownloadStringCompletedEventHandler(client_DownloadStringCompleted); //Χρήση του event handler για την απάντηση από τον server void client_downloadstringcompleted(object sender, DownloadStringCompletedEventArgs e) { if (!e.cancelled && e.error == null && e.result!= null) { //Case HAVE feedback Εντολές διαχείρισης του feedback Κώδικας C# 4-3: Χρήση μεθόδου WebClient Στη συνέχεια, οι ενέργειες ανάθεσης της διεύθυνσης (URL) σύνδεσης και η διαδικασία σύνδεσης αποστολής δεδομένων γίνονται μέσα στην συνάρτηση Communicate. (κώδικας C# 4-3)

56 42 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Για την αποδοχή της απάντησης από τον server, υπεύθυνος είναι o event handler DownloadStringCompleted, ο οποίος υπερφορτώνεται (overloading). Η διαδικασία αναλύεται σε δύο βήματα. Πρώτον υπερφορτώνεται ο event handler μέσα στην main συνάρτηση της σελίδας και δεύτερον, πραγματοποιείται η εκτέλεση των εντολών του. Μέθοδος Http Web Request Σε αντίθεση με την προαναφερθείσα μέθοδο WebClient, η μέθοδος HttpWebRequest είναι πολύ πιο συμμαζεμένη στον κώδικά της, και ταυτόχρονα παρέχει όλες τις δυνατότητες ελέγχου κάθε λεπτομέρειας της λειτουργίας της. Ξεκινώντας, η δήλωση και κλίση της γίνεται μέσα στην συνάρτηση Communicate (κώδικας C# 4-2), όπου κατά την δήλωση έχουμε και προσδιορισμό του URL που θα συνδεθεί. Επιπλέον, μαζί με την κλίση της (για την έναρξη της σύνδεσης) προσδιορίζεται και η μέθοδος που θα ακολουθηθεί για την διαχείριση της απάντησης (feedback) από τον server, όπως φαίνεται παρακάτω: //Δήλωση αντικειμένου HttpWebRequest μαζί με URL σύνδεσης HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(new Uri(NowCmd)); //Κλίση της συνάρτησης, και-ταυτόχρονα-προσδιορισμός της Απάντησης (feedback) request.begingetresponse(new AsyncCallback(ReadCallBack), request); Την απάντηση (response) του server διαχειρίζεται η συνάρτηση «ReadCallBack», στην οποία γίνεται αρχικά η δέσμευση για το αντικείμενο HttpWebRequest, ώστε να προσδιοριστεί πως θα γίνει χρήση του ασύγχρονου αποτελέσματος (asynchresult) της μεθόδου. Στην συνέχεια δεσμεύουμε το αντικείμενο HttpWebResponse με το οποίο θα διαχειριστούμε την απάντηση του server. (κώδικας C# 4-4) private void ReadCallBack(IAsyncResult asynchresult) { //Δήλωση μεταβλητής για το Request HttpWebRequest request = (HttpWebRequest)asynchResult.AsyncState; //Δήλωση και εκχώρηση τιμής για Response HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchResult); //Διάβασμα της Response με χρήση Stream reader using (StreamReader strmreader = new StreamReader(response.GetResponseStream())) { /* Διαχείριση της απάντησης και Εκτέλεση αντίστοιχων ενεργειών */ Κώδικας C# 4-4: Χρήση μεθόδου HttpRequest Τέλος, χρησιμοποιούμε έναν StreamReader για να εκμαιεύσουμε το κείμενο (string) στης απάντησης, και να κάνουμε σε/με αυτό, όλες οι αναγκαίες ενέργειες. (κώδικας C# 4-4)

57 Κ Ε Φ Α Λ Α Ι Ο 4 Σ Υ Ν Δ Ε Σ Η Ε Φ Α Ρ Μ Ο Γ Η Σ ME S E R V E R / Π Λ Α Τ Φ Ο Ρ Μ Α Αποστολή Εντολών Έλεγχος Ρομποτικής Πλατφόρμας Η κεντρική σελίδα ελέγχου (MoveTestPage) περιέχει όλα τα κουμπιά επιλογές ελέγχου της ρομποτικής πλατφόρμας. Σε κάθε επιλογή αντιστοιχεί και από μία εντολή προς την πλατφόρμα. Έτσι, συνδέεται το γραφικό περιβάλλον (κώδικας xaml) με τον κώδικα λειτουργίας (κώδικας C#) και τις μεθόδους επικοινωνίας της εφαρμογής. Όπως παρουσιάστηκε στην ενότητα 2.5, ο μικροελεγκτής δέχεται αιτήματα «GET» που εμπεριέχουν την εντολή που θα εκτελέσει. Κάθε αίτημα get, μαζί με την εντολή, συντάσσεται μέσα στην συνάρτηση «Communicate», και βρίσκεται στην μεταβλητή, τύπου string, «NowCmd». NowCmd = arduinouri + command + "=" + DateTime.Now.Ticks; Η «NowCmd», αποτελείται από τρείς μεταβλητές. Αρχικά την μεταβλητή arduinouri που περιλαμβάνει την διεύθυνση (IP) της πλατφόρμας και την μεταβλητή command που περιέχει την εντολή που θα εκτελεστεί, και η οποία αντιστοιχεί σε συγκεκριμένο κουμπί - επιλογή. Έπειτα προστίθεται το σύμβολο «=», και στο τέλος τα Ticks από το ρολόι της συσκευής smartphone. Αυτό γίνεται διότι το λειτουργικό σύστημα δεν στέλνει δυο φορές την ίδια εντολή, καθώς θεωρείται άσκοπη χρήση του traffic της επικοινωνίας. Οπότε, με την προσθήκη της ώρας, κάθε εντολή φαίνεται ως μοναδική και παρακάμπτεται ο περιορισμός αυτός. Παράλληλα, στον μικροελεγκτή παραλείπεται η τιμή της «Ticks» κατά την διαδικασία ερμηνείας του αιτήματος get που λαμβάνει. Στο Παράρτημα Α βρίσκεται ο πίνακας με το σύνολο των εντολών που δέχεται και εκτελεί η ρομποτική πλατφόρμα, καθώς επίσης και ο πίνακας με τις εντολές που στέλνει η εφαρμογή Απάντηση Ρομποτικής πλατφόρμας / server (feedback) Η ρομποτική πλατφόρμα, καθότι λειτουργεί ως server, έχει την δυνατότητα να στέλνει αρχεία html, τα οποία περιέχουν πληροφορίες της κατάστασης και των λειτουργιών της. Υπάρχουν δύο ειδών πληροφορίες που αποστέλλονται από την πλατφόρμα. Το πρώτο είδος (μορφή πλήρους αρχείου html), περιλαμβάνει μία ιστοσελίδα η οποία έχει τον ρόλο του UI, ενσωματώνοντας και όλες τις πληροφορίες λειτουργίας. Τα αρχεία

58 44 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ αυτά ερμηνεύονται και προβάλλονται από προγράμματα web browser, και αποτελούν το αρχικό UI του κατασκευαστή της πλατφόρμας. Η εφαρμογή διαθέτει έτοιμο UI, συνεπώς οι πληροφορίες που εμπεριέχονται στα αρχεία ιστοσελίδων html είναι πλεονασματικές. Έτσι, δημιουργείται το δεύτερο είδος πληροφοριών (αρχείο html), το οποίο χρησιμοποιείται από τον μικροελεγκτή για την επικοινωνία εφαρμογή. Το αρχείο αυτό περιέχει μόνο τα δεδομένα που περιγράφουν την κατάσταση και τη λειτουργία της πλατφόρμας, ώστε να μπορούν να επεξεργαστούν και να προβληθούν ά- μεσα στο UI. Ταυτόχρονα, ελαχιστοποιείται και ο όγκος των δεδομένων που μετακινούνται (traffic), με αποτέλεσμα την γρηγορότερη και ποιοτικά ανώτερη λειτουργία της ρομποτικής πλατφόρμας, με την παράλληλη αίσθηση άμεσης επικοινωνίας με την εφαρμογή-χρήστη Η εφαρμογή χρησιμοποιεί και προβάλλει πληροφορίες της ταχύτητας (speed) και της κατεύθυνσης (rotate) της κίνησης της ρομποτικής πλατφόρμας. Το αρχείο html που αποστέλλεται παρουσιάζεται στις ακόλουθες γραμμές: Αρχείο: Mobile.html Περιεχόμενο: *$s,$h* Αυτό το αρχείο είναι αποθηκεμένο μέσα στην SD card του μικροελεγκτή, μαζί με τα υπόλοιπα αρχεία html, και αποστέλλεται όταν η μεταβλητή mobile είναι «true». Το σύνολο, των δεδομένων που αποστέλλεται από την πλατφόρμα μαζί με την περιγραφή τους περιλαμβάνονται στο Παράρτημα Β Πίνακας Πληροφοριών feedback Επεξεργασία και Προβολή Απάντησης Η εφαρμογή, εφόσον δεχτεί το feedback της πλατφόρμας, προβαίνει στην ερμηνεία του, την ανάθεση των τιμών σε συγκεκριμένες μεταβλητές και στην προβολή τους. Η ενημέρωση, του UI γίνεται σε δύο στάδια. Το πρώτο περιλαμβάνει το τμήμα των γραφικών (προβολή κειμένου ή εικόνας) και το δεύτερο περιλαμβάνει την εμφάνιση των εισερχόμενων πληροφοριών. Ξεκινώντας, και ανάλογα με τον τρόπο επικοινωνίας που έχει επιλεγεί από τον χρήστη, εκτελούνται οι αντίστοιχοι event handlers για την αποδοχή της απάντησης της πλατφόρμας. Ανεξάρτητα όμως από τον κάθε event handler, οι διαδικασία που ακολουθείται είναι μία. Αρχικά, καλείται η συνάρτηση ManageFeedback. Η συνάρτηση αυτή είναι void και δέχεται ως όρισμα την απάντηση του server. Αφού ελέγξει πρώτα τις επιλογές προβολής του χρήστη (προβολή «debugger» ή «image», από SettingsPage πίνακας 6-1), προβαίνει στην

59 Κ Ε Φ Α Λ Α Ι Ο 4 Σ Υ Ν Δ Ε Σ Η Ε Φ Α Ρ Μ Ο Γ Η Σ ME S E R V E R / Π Λ Α Τ Φ Ο Ρ Μ Α 45 επεξεργασία της απάντησης του server, ώστε να είναι και οπτικά αναγνώσιμη, και κατόπιν στην προβολή της. (κώδικας C# 4-5) private void ManageFeedback(string thefeedback) { if (!feedbackviewer IsArduino==false) { //Προβολή του Debugger var panel = new StackPanel(); //Δημιουργία StackPanel var textblock = new TextBlock; //Δημιουργία Textblock { TextWrapping = TextWrapping.Wrap, FontSize = 22, Width = 350, Text = thefeedback ; panel.children.add(textblock); FeedBackScrlV.Content = panel; /* Αλλαγή του UI: Προβολή της απάντησης-feedback */ /* Change UI: Προβολή του ScrollViewer - απάντηση */ FeedBackScrlV.Opacity = 1; //Τέλος της if. Ακολουθεί η else. else //συνέχεια από το τέλος της if (!feedbackviewer IsArduino==false) { /* Εμφάνιση των αντικειμένων Images */ ResponceTxtblk.Opacity=0; ImageViewer.Opacity = 1; /* ΑΠΟΚΩΔΙΚΟΠΟΙΗΣΗ FEEDBACK ΤΟΥ ΑRDUINO */ if (!ArduinoDemo) try //Διαχωρισμός της κάθε μεταβλητής και προσθήκης της σε μία θέση του movedata { string[] movedata = thefeedback.split('*')[1].split(','); MoveDataUpdater(int.Parse(moveData[0]), int.parse(movedata[1])); /* Σε κάθε περίπτωση, είτε βρεί δεδομένα, είτε όχι (περίπτωση DEMO), καλείται η * MoveDataUpdater η οποία εμφανίζει αυτά τα δεδομένα στον χρήστη. */ catch { MoveDataUpdater(speed, rotation); else MoveDataUpdater(speed, rotation); /* Έλεγχος για διακοπή εκτέλεσης Αυτοματοποιημένων διαδικασιών και * Αλλαγές στο UI: ανάλογα με το Connection Status */ AutomationControl(IsNetwork); Κώδικας C# 4-5: Συνάρτηση Ερμηνείας και προβολής του feedback. Στην περίπτωση του «Debugger», επειδή η απάντηση του server (ανάλογα με τις μελλοντικές χρήσεις) μπορεί να είναι κείμενο μεγαλύτερο των 20 γραμμών, χρησιμοποιείται ένας scrollviewer. Έτσι ο χρήστης μπορεί να προηγηθεί μέσα στο κείμενο-feedback που προβάλλεται. Στην περίπτωση των εικόνων, απλά προβάλλεται η εικόνα που αντιστοιχεί στην κάθε κίνηση (πίνακας 8-3). Το string του feedback είναι της μορφής: *Τιμή1,Τιμή2*. Δηλαδή η έναρξη και λήξη του string γίνεται με το σύμβολο αστερίσκο(*), ενώ ο διαχωρισμός των μεταβλητών γίνεται με κόμμα(,). Η αποκωδικοποίηση και ο διαχωρισμός της απάντησης γίνεται με την εντολή string[] movedata = thefeedback.split('*')[1].split(','). Αρχικά, γίνεται διαχωρισμός του feedback με βάση τον αστερίσκο, και το αποτέλεσμα που περιέχει τις ζητούμενες τιμές, μπαίνει στο δεύτερο κελί ενός πίνακα string. Έπειτα, το

60 46 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ κελί αυτό διαχωρίζεται με βάση το κόμμα, και οι ζητούμενες τιμές, διαχωρισμένες πλέον, τοποθετούνται σε ένα κελί η κάθε μία, του string πίνακα movedata. Η μετατροπή σε Integer και η χρήση των δεδομένων feedback (στοιχεία του πίνακα movedata), γίνεται μέσα στην συνάρτηση «MoveDataUpdater». Στην ίδια συνάρτηση, επιλέγονται και οι εικόνες που θα εμφανιστούν, για την περίπτωση επιλεγμένης προβολής «image». Η συνάρτηση «ManageFeedback» (κώδικας C# 4-5) ολοκληρώνεται με την εκτέλεση της μεθόδου «AutomationControl», που αναλαμβάνει την ενημέρωση των αυτοματοποιημένων λειτουργιών της εφαρμογής (καταγραφή και αναπαραγωγή των εντολών). Είναι συνάρτηση void, και δέχεται ως όρισμα την ύπαρξη σύνδεσης στο δίκτυο (bool IsNetwork). Στις εργασίες της καλείται η UImodificator για την τελική ενημέρωση (update) του UI. Βιβλιογραφία Επικοινωνία Συσκευής 1. Web Client Web Client HTTP request HTTP request 5. push server 6. Sockets 7. Sockets 8. Sockets

61 ΚΕΦΑΛΑΙΟ 5 Διαχειριση Αποθηκευτικου Χωρου Σε κάθε συσκευή smartphone με Windows Phone, υπάρχει αποθηκευτικός χώρος (εσωτερική μνήμη) που διατίθεται από το λειτουργικό σύστημα στις εφαρμογές, σύμφωνα με τις ανάγκες τους. Ο χώρος αυτός είναι πλήρως στεγανοποιημένος, ώστε καμία εφαρμογή, ούτε και το ίδιο το λειτουργικό σύστημα, δεν έχουν πρόσβαση στα περιεχόμενα κάποιας άλλης εφαρμογής. Αντίστοιχα, καμία εφαρμογή δεν έχει πρόσβαση στα αρχεία του λειτουργικού συστήματος. Πρέπει να διευκρινιστεί, πως αναφερόμαστε σε τοπικά δεδομένα (local data), και όχι σε δεδομένα διαδικτύου (cloud data). Τα τοπικά δεδομένα είναι δεδομένα τα οποία βρίσκονται αποθηκεμένα στην εσωτερική μνήμη της κάθε συσκευής smartphone, οπότε και διαφέρουν και από χρήστη σε χρήστη. Εξασφαλίζοντας, λοιπόν, την ασφάλεια των δεδομένων της εφαρμογής, προχωράμε στην ανάλυση αυτού του διαθέσιμου χώρου αποθήκευσης.

62 48 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Εικόνα 5-1: Σχηματική απεικόνιση Local Data Storage Εφαρμογής Σε κάθε εφαρμογή, υπάρχουν τρία διαθέσιμα containers μνήμης (εικόνα 5-1). Isolated Storage Settings Χώρος αποθήκευσης Ρυθμίσεων (Μεταβλητές και οι τιμές τους) για την καλύτερη λειτουργία της εφαρμογής. Isolated Storage Χώρος αποθήκευσης Φακέλων και Αρχείων. Database Βάση Δεδομένων (LINQ). Χώρος διαθέσιμος για αποθήκευση και διαχείριση πληροφοριών σε μορφή βάσης δεδομένων. Το μέγεθος του αποθηκευτικού χώρου (MB) που δίδεται σε κάθε εφαρμογή, καθορίζεται από τους διαθέσιμους πόρους μνήμης της συσκευής. Το λειτουργικό σύστημα (OS) διαχειρίζεται το σύνολο της μνήμης κάθε συσκευής, και αναλαμβάνει την απόδοσή της σε κάθε εφαρμογή, σύμφωνα με το σύνολο των αναγκών τόσο της εφαρμογής όσο και των υπολοίπων λειτουργιών της συσκευής. Τα αρχεία που μπορούν να δημιουργηθούν, επεξεργαστούν και αποθηκευτούν από ε- φαρμογές (μέσα στο Isolated Storage) είναι αρχεία: δυαδικά (binary), κειμένου (text), αρχεία xml, εικόνες (images), και φωτογραφίες (captured images). Τα αρχεία ήχου (mp3, κτλ) καθώς επίσης και άλλες μορφές αρχείων, θεωρούνται δυαδικά αρχεία. Στο παρόν κεφάλαιο, θα αναπτυχθεί η διαχείριση του αποθηκευτικού χώρου για τις ρυθμίσεις και τα αρχεία-φακέλους. Δεν θα γίνει κάποια αναφορά στην χρήση βάσεων δεδομένων (χρήση γλώσσας LINQ), λόγω της μη εφαρμογής της στο κομμάτι του υλοποιημένου κώδικα (εφαρμογή Arduino Vehicle). Ο αποθηκευτικός χώρος των ρυθμίσεων χρησιμοποιείται για την έρρυθμη λειτουργία της εφαρμογής και του κύκλου λειτουργία της. Ενώ, ο αποθηκευτικός χώρος των αρχείων (Isolated Storage) χρησιμοποιείται στην υλοποίηση των λειτουργιών αυτοματισμού που α- ναλύονται στο επόμενο κεφάλαιο.

63 Κ Ε Φ Α Λ Α Ι Ο 5 Δ Ι Α Χ Ε Ρ Ι Σ Η Α Π Ο Θ Η Κ Ε Υ Τ Ι Κ Ο Υ Χ Ω Ρ Ο Υ Αποθήκευση Ρυθμίσεων Όπως αναφέρθηκε, στην εφαρμογή έχουν δημιουργηθεί και χρησιμοποιούνται κάποιες ρυθμίσεις. Για την για την αποθήκευση των ρυθμίσεων αυτών, γίνεται χρήση του Isolated Storage Settings. Συγκεκριμένα, δημιουργήθηκε η class «SettingsClass.cs», η οποία περιλαμβάνει όλες τις μεταβλητές και τις μεθόδους για την διαχείριση των ρυθμίσεων της εφαρμογής. Ως «best practice», προτείνεται η αποθήκευση των αρχικών ρυθμίσεων σε αντίστοιχες μεταβλητές, ώστε να είναι δυνατή η «επαναφορά» τους. Στην εφαρμογή Arduino Vehicle, χρησιμοποιούμε τα πεδία για τις ρυθμίσεις, όπως φαίνονται στον πίνακα 5-1. Κάθε πεδίο είναι και ένα property της class SettingsClass, τουτ έστιν, καλούνται και χρησιμοποιούνται μέσα στην εφαρμογή, ως ιδιότητες αντικειμένων τύπου SettingsClass. Η άμεση και κύρια προσπέλαση των δεδομένων των ρυθμίσεων, γίνεται στην σελίδα SettingsPage (ενότητα 6.1). Πριν όμως δούμε την εφαρμογή τους, θα αναλύσουμε τον τρόπο που αποθηκεύονται και ανακτώνται, καθώς επίσης και τον κώδικα που επιτρέπει όλες τις δυνατότητες προσπέλασής τους. Πίνακας 5-1: Περιεχόμενα properties του Isolated Storage Settings Μεταβλητές της Εφαρμογής Μεταβλητή Αρχική Τιμή Χρήση ArduinoURL ConnectionMethod false Είναι η Διεύθυνση Σύνδεσης της Ρομποτικής Πλατφόρμας Επιλογή Μεθόδου Επικοινωνίας false: χρήση μεθόδου WebClient true: χρήση μεθόδων HTTPrequest Viewer DemoMode false false Επιλογή Πληροφοριών Προβολής false: προβολή Debugger true: προβολή Arduino Image Επιλογή Τρόπου Λειτουργίας false: κανονική Λειτουργία true: Λειτουργία Demo Για την σύνδεση της class SettingsClass με τις σελίδες της εφαρμογής, δημιουργήθηκαν δύο constructors (default και overloaded), μέσα στους οποίους γίνεται πρώτα έλεγχος για την ύπαρξη ή μη, των ρυθμίσεων, και έπειτα η καταχώρησή τους. Επιπλέον, για την άμεση πρόσβαση σε κάθε ρύθμιση, έχουν δημιουργηθεί και οι αντίστοιχες properties. (κώδικας C# 5-1)

64 50 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ //Δήλωση Namespace του Isolated Storage Settings using System.IO.IsolatedStorage; //Δήλωση χρήσης του Isolated Storage Settings IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings; public SettingsClass() {//Κύριος (default) Cunstructor if (!settings.contains("arduinourl")) ArduinoURL=savedArduinoUriDefault; // Προσθήκη ArduinoURL if (!settings.contains("connectionmethod")) ConnectionMethod = savedconnmethoddefault; // Προσθήκη ConnectionMethod if (!settings.contains("viewer")) Viewer = savedvieweroptiondefault; // Προσθήκη Viewer if(!settings.contains("demo")) DemoMode = saveddemooptiondefault; // Προσθήκη Ρύθμισής DemoMode public SettingsClass(string url, bool conn, bool view) {//Overloaded Constructor ArduinoURL = url; ConnectionMethod = conn; Viewer = view; DemoMode = demo; Κώδικας C# 5-1: Constructors της Class SettingsClass Συναρτήσεις Τ Η εκχώρηση και η ανάκτηση της τιμής κάθε μεταβλητής, των ρυθμίσεων γίνεται μέσω δύο μεθόδων-συναρτήσεων Τ (κώδικας C# 5-2). Οι μέθοδοι τύπου Τ έχουν την ιδιαιτερότητα να δέχονται όλους τους τύπους μεταβλητής, καθώς οι πράξεις που εκτελούν δεν περιορίζονται από τον τύπο των δεδομένων που χρησιμοποιούν. Ο μοναδικός περιορισμός που υπάρχει είναι τα δεδομένα εισόδου και εξόδου να είναι του ιδίου τύπου. Δηλαδή, δεν επιτρέπεται η κλίση της συνάρτησης για έξοδο Boolean, όταν χρησιμοποιείται με είσοδο integer, ούτε η χρήση της για πράξεις με ορίσματα τύπου SettingsClass, δεχόμενη ως όρισμα μεταβλητές string. Στην εφαρμογή χρησιμοποιούνται δύο συναρτήσεις Τ, μία για εκχώρηση τιμής και η άλλη για ανάκτηση. Αναλύοντας τον τρόπο λειτουργίας αυτού του είδους συναρτήσεων, θα περιγραφούν άμεσα και αυτές της εφαρμογής. Η μέθοδος εκχώρησης «set» (SetSetting<T>) είναι «void» (δεν επιστρέφεται καμία τιμή), και δέχεται δύο ορίσματα. Το «όνομα» της μεταβλητής μέσα στον isolated storage settings (key), και την «τιμή» που αντιστοιχεί στη μεταβλητή αυτή (value). (κώδικας C# 5-2)

65 Κ Ε Φ Α Λ Α Ι Ο 5 Α Π Ο Θ Η Κ Ε Υ Σ Η Ρ Υ Θ Μ Ι Σ Ε Ω Ν Ε Φ Α Ρ Μ Ο Γ Η Σ 51 /* Μέθοδος Καταχώρησης (set) */ //key = Όνομα μεταβλητής στο Storage, keyvalue = η τιμή της μεταβλητής key private void SetSetting<T>(string key, T keyvalue) { if (settings.contains(key)) // Εάν υπάρχει μεταβλητή περάνει την τιμή settings[key] = keyvalue; else //Εάν ΔΕΝ υπάρχει η μεταβλητή, την Προσθέτει μαζί με την τιμή settings.add(key, keyvalue); /* Μέθοδος Ανάκτησης (get) */ private static T GetSetting<T>(string key, T defaultvalue) { try{ return (T)IsolatedStorageSettings.ApplicationSettings[key]; // Εάν δεν βρει το ζητούμενο δεδομένο, επιστρέφει την defaultvalue catch{ return defaultvalue; Κώδικας C# 5-2: Μέθοδοι Εκχώρησης και Ανάκτησης Πληροφοριών Ρυθμίσεων Η μέθοδος ανάκτησης «get» (T GetSetting<T>), χρησιμοποιεί εξίσου δύο ορίσματα, το «όνομα» της μεταβλητής (key) και μία «τιμή» (defaultvalue), η οποία τιμή θα επιστραφεί στην περίπτωση ύπαρξης κάποιου exception (σφάλματος) κατά την διαδικασία εξαγωγής των πληροφοριών από τη μνήμη. Η συνάρτηση αυτή επιστρέφει την τιμή που καλείται να εξάγει κάθε φορά. Επειδή είναι κοινή για όλους τους τύπους δεδομένων, δηλώνεται ως συνάρτηση τύπου Τ. (κώδικας C# 5-2) Χρήση Συναρτήσεων Τ Η χρήση των συναρτήσεων T είναι παρόμοια με την χρήση όλων των συναρτήσεων της C# λαμβάνοντας, όμως, πάντα υπόψιν τον περιορισμό που αναφέρθηκε παραπάνω. Ως ένα παράδειγμα χρήσης με μεταβλητές εισόδου/εξόδου τύπου «string», για την συνάρτηση set γράφουμε: SetSetting("ArduinoURL", value), όπου η «ArduinoURL» αναφέρεται στο «όνομα» της μεταβλητής μέσα στον isolated storage settings, και η «value» είναι τύπου string. Παράλληλα, την συνάρτηση get την χρησιμοποιούμε ως: GetSetting <string>("arduinourl", savedarduino-uridefault), η οποία δέχεται την μεταβλητή «savedarduinouridefault» που είναι τύπου «string» και αντιστοιχεί στην default τιμή της μεταβλητής «ArduinoURL». Η συνάρτηση λειτουργεί ως «συνάρτηση τύπου string», και επιστρέφει την ζητούμενη τιμή από τον χώρο αποθήκευσης της εφαρμογής. Σε περίπτωση που υπάρξει κάποιο πρόβλημα exception επιστρέφει την «savedarduinouridefault». (κώδικας C# 5-2).

66 52 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Ένα δεύτερο παράδειγμα, με βάση και τον πίνακας 5-1 παραπάνω, είναι: set: SetSetting("Viewer", value), όπου value είναι bool (true/false), και get: (επιστροφή τιμής bool) GetSetting<bool>("Viewer", savedvieweroptiondefault). Οι δύο αυτές συναρτήσεις Τ, με τον τρόπο χρήσης που περιεγράφηκε στα παραπάνω παραδείγματα, χρησιμοποιούνται μέσα στους setter/getter των properties της class SettingsClass. Τα properties αυτά, με την σειρά τους, χρησιμοποιούνται στις σελίδες της εφαρμογής, για την προσπέλαση των δεδομένων της μνήμης. Στο παρακάτω τμήμα κώδικα (κώδικας C# 5-3), περιγράφεται κάθε στάδιο της χρήσης των συναρτήσεων προσπέλασης των δεδομένων των ρυθμίσεων μέσα στην σελίδα SettingsPage. Τα δεδομένα που προσπελαύνονται είναι τύπου «string» (ArduinoURL) και «boolean» (Connection Method, Viewer). //Δήλωση μεταβλητής SettingsClass SettingsClass appsettings = new SettingsClass(); //Χρήση του Get για Ανάκτηση τιμής από το Storage this.urltxtbox.text = appsettings.arduinourl; clientrbtn.ischecked = appsettings.connectionmethod; DebugRbtn.IsChecked = appsettings.viewer; //Χρήση της Set για Εκχώρηση τιμής στο Storage appsettings.arduinourl = URLtxtBox.Text; appsettings.connectionmethod = ((bool)clientrbtn.ischecked)? false : true; appsettings.viewer = ((bool)debugrbtn.ischecked) Κώδικας C# 5-3: Χρήση Isolated Storage Settings μέσα σε Σελίδα εφαρμογής Παρατηρώντας τον κώδικα C# 5-3Κώδικας C# 5-3: Χρήση Isolated Storage Settings μέσα σε Σελίδα, αρχικά, δηλώνεται ένα αντικείμενο τύπου SettingsClass, και γίνεται ανάκτηση των αποθηκευμένων δεδομένων της μνήμης. Στην συνέχεια γίνεται εκχώρηση-αποθήκευση των νέων ρυθμίσεων στην μνήμη της συσκευής. 5.2 Κύκλος Λειτουργίας Εφαρμογής Αποθήκευση Μεταβλητών Λειτουργίας Όλες οι εφαρμογές στα Windows Phone έχουν έναν συγκεκριμένο κύκλο λειτουργίας. Αυτό συμβαίνει διότι ο κύριος σκοπός των συσκευών smartphone είναι να λειτουργούν ως κινητά τηλέφωνα. Έτσι, όσες εφαρμογές δεν λειτουργούν για αυτόν τον σκοπό (κλίσεις, μηνύματα, κτλ), έχουν δευτερεύουσα προτεραιότητα, και η λειτουργία τους δύνανται να

67 Κ Ε Φ Α Λ Α Ι Ο 5 Κ Υ Κ Λ Ο Σ Λ Ε Ι Τ Ο Υ Ρ Γ Ι Α Σ Ε Φ Α Ρ Μ Ο Γ Η Σ 53 ανασταλεί (suspend), ή να διακοπεί (interrupt) από τις λειτουργίες του τηλεφώνου (εφαρμογές πρώτης προτεραιότητας) ή από τον χρήστη. Σε αυτές τις περιπτώσεις, η λειτουργία της εφαρμογής περνάει σε κατάσταση αδράνειας (dormant Deactivated event). Σε αυτήν την κατάσταση, οι λειτουργίες της εφαρμογής αναστέλλονται, ενώ υπάρχουν δύο επιλογές για την εφαρμογή. Η πρώτη είναι η επαναφορά της εφαρμογής στο προσκήνιο (Activated event) και η συνέχιση της λειτουργίας της. Η δεύτερη επιλογή είναι ο τερματισμός της εφαρμογής (Tombstoned), απευθείας από την κατάσταση αδράνειας, χωρίς την επαναφορά της. (εικόνα 5-2) Εικόνα 5-2: Κύκλος Λειτουργίας-Ζωής μίας WindowsPhone εφαρμογής Για αυτόν τον λόγο, κρίνεται αναγκαία η αποθήκευση όσων πληροφοριών προσδιορίζουν την κατάσταση λειτουργίας της εφαρμογής. Οι πληροφορίες αυτές αποθηκεύονται στον χώρο των ρυθμίσεων της εφαρμογής (Isolated Storage Settings), πριν από την διακοπή της λειτουργίας της, και ανακτώνται κατά την επαναφορά της εφαρμογής στο προσκήνιο. Στην εφαρμογή Arduino Vehicle, οι πληροφορίες που αποθηκεύονται βρίσκονται στον παρακάτω πίνακας 5-2. Κάθε αλλαγή στην τιμή κάποιας από τις μεταβλητές αυτές, κατά την λειτουργία της εφαρμογής, ακολουθείται από την άμεση αποθήκευσή της. Η διαδικασία αποθήκευσης αφορά κάθε μεταβλητή ξεχωριστά, και εκτελείται στις σελίδες όπου αυτή προσπελαύνεται. Όπως προλέχθηκε, οι διαδικασίες που επηρεάζουν την λειτουργία της εφαρμογής είναι δύο. Η αναστολή και η διακοπή της λειτουργίας της εφαρμογής. Κατά την έναρξη της διαδικασίας αναστολής λειτουργίας της εφαρμογής, και πρίν να ολοκληρωθεί η διαδικασία αυτή, γίνεται διακοπή της κίνησης της ρομποτικής πλατφόρ-

68 54 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ μας, και όλων των λειτουργιών αυτοματισμού. Έτσι διασφαλίζεται ο πλήρης και συνεχόμενος έλεγχος της πλατφόρμας από τον χρήστη ανά πάσα στιγμή, και περιορίζονται οι πιθανότητες εμφάνισης προβλημάτων ελέγχου. Πίνακας 5-2: Περιεχόμενα app variables του Isolated Storage Settings Μεταβλητές Λειτουργίας της Εφαρμογής (app Life circle) Μεταβλητή Αρχική Τιμή Χρήση isnetwork isarduinoconnected iscurrentpage (bool) false (bool) false (string) null -ΚΕΝΟ ispivotitem (int) 0 isfilename (string) null -ΚΕΝΟ Αποθηκεύει εάν, ή όχι, υπάρχει σύνδεση με το Internet. Αποθηκεύει εάν, ή όχι, έχει γίνει σύνδεση με την Ρομποτική Πλατφόρμα. Αποθηκεύει την Σελίδα στην οποία βρίσκεται ο χρήστης. Αποθηκεύει τον αριθμό της τρέχουσας σελίδας του Pivot (Main page). (0έως2) Αποθηκεύει το όνομα του αρχείου που χρησιμοποιείται. Με την επαναφορά της εφαρμογής από την κατάσταση αδρανοποίησης, ανασύρονται από την μνήμη οι πληροφορίες που έχουν αποθηκευτεί, και ο χρήστης επανέρχεται στο στάδιο που βρισκόταν πριν. Συγκεκριμένα, τα βήματα που ακολουθούνται είναι τα εξής: i. Μετάβασή του χρήστη στην σελίδα της εφαρμογής όπου βρισκόταν ii. Έλεγχος των υπολοίπων μεταβλητών ώστε να επανέλθει στις τελευταίες εκτελούμενες λειτουργίες. Ένα παράδειγμα φαίνεται στο παρακάτω τμήμα κώδικα (κώδικας C# 5-4), όπου τα σχόλια περιγράφουν τις προαναφερόμενες διαδικασίες. /* ΚΩΔΙΚΑΣ ΕΠΑΝΑΦΟΡΑΣ ΤΗΣ ΕΦΑΡΜΟΓΗΣ * ΑΡΧΕΙΟ: App.xaml.cs - Application_Activated EVENT HANDLER */ switch (settings.iscurrentpage) //Ανάκτηση τρέχουσας Σελίδας { case "SettingsPage": //Πλοήγηση στην τρέχουσα σελίδα ((App)(App.Current)).RootFrame.Navigate(new Uri("/SettingsPage.xaml", UriKind.Relative)); break; case "MovePage": case "WebPage": // κώδικας Πλήγησης στις υπόλοιπες σελίδες case "FilePage": /* */

69 Κ Ε Φ Α Λ Α Ι Ο 5 Κ Υ Κ Λ Ο Σ Λ Ε Ι Τ Ο Υ Ρ Γ Ι Α Σ Ε Φ Α Ρ Μ Ο Γ Η Σ 55 /* ΑΡΧΕΙΟ: Main page - PhoneApplicationPage_Loaded EVENT HANDLER */ settings.iscurrentpage = "MainPage"; //Αποθήκευση τρέχουσας σελίδας //Ανάκτηση αποθηκευμένου αριθμού της προβαλλόμενης σελίδας-αντικειμένου Pivot. ArduinoMenuPivot.SelectedIndex = settings.ispivotitem; Κώδικας C# 5-4: Ανάκτηση και Αποθήκευση δεδομένων Κατάστασης της εφαρμογής Αντιστοίχως, κατά την διαδικασία διακοπής λειτουργίας (τερματισμού) της εφαρμογής εκτελείται ο event handler «Application_Closing» που βρίσκεται στο αρχείο App.xaml.cs, και ο οποίος καλεί τη συνάρτηση «ResetAppSettings» (της SettingsClass). Με αυτόν τον τρόπο αρχικοποιούνται οι τιμές των μεταβλητών κατάστασης της εφαρμογής (πίνακας 5-2), ώστε κατά την επόμενη εκκίνησή της, να μην επηρεαστεί η λειτουργία της από προηγούμενες καταστάσεις. 5.3 Αποθήκευση Αρχείων και Φακέλων Ολοκληρώνοντας τις λειτουργίες αποθήκευσης των ρυθμίσεων και των καταστάσεων λειτουργίας της εφαρμογής, οι οποίες υλοποιούνται με χρήση του «isolated storage settings», περνάμε στο επόμενο κομμάτι που είναι η χρήση του χώρου αποθήκευσης φακέλων και αρχείων. Εδώ, χρησιμοποιείται ο «Isolated Storage». Η επεξεργασία και η διαχείριση αυτού του τμήματος μνήμης, γίνεται με την βοήθεια μίας άλλης class, της «FileManipulations.cs». Μέσα, λοιπόν, στην class FileManipulations, υλοποιούνται οι βασικές λειτουργίες που αφορούν την διαχείριση αρχείων. Οι λειτουργίες αυτές είναι: Δημιουργία αρχείου Ανάγνωση Ανάκτηση δεδομένων από το αρχείο Εγγραφή πληροφοριών μέσα στο αρχείο (είτε κατά την δημιουργία, είτε με προσθήκη σε υπάρχον αρχείο) Διαγραφή του αρχείου Μετονομασία του αρχείου.

70 56 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Δημιουργία Αρχείου Η διαδικασία αυτή έχει δύο βασικά χαρακτηριστικά. Πρώτον η δήλωση μίας διαδρομής τοποθέτησης (αποθήκευσης) του αρχείου (filepath) που αποτελείται από τα «ονόματα των φακέλων» που πρέπει να προσπελαστούν για να φτάσουμε στο αρχείο, και το «όνομα του αρχείου». Δεύτερον, η κατάλληλη μορφοποίηση των δεδομένων που θα εισαχθούν στο αρχείο. Στο πρώτο χαρακτηριστικό, το όνομα του αρχείου, είναι υποχρεωτικό να περιλαμβάνεται και την κατάληξή του (τύπος αρχείου), συνεπώς ολόκληρο το file Path παίρνει τη μορφή: filedirectory/filename.filetype. Με βάση αυτόν τον κανόνα, σε ένα παράδειγμα ο- νοματολογίας αρχείου, έχοντας το αρχείο κειμένου example, ως αρχείο θα αναγραφεί: «example.txt», και το filepath θα είναι: «myfolder/example.txt». Ο φάκελος των αρχείων καταγραφών που δημιουργούνται στην εφαρμογή είναι στατικά δηλωμένος. Το όνομα του φακέλου είναι «SavedRoutes» και η δήλωσή του μέσα στον κώδικα της εφαρμογής είναι: string FileDirectory = "SavedRoutes"; Το όνομα του αρχείου που δίνεται αυτόματα από την εφαρμογή, είναι της μορφής «Ημερομηνία-Ώρα», και αντιστοιχεί σε αρχείο κειμένου (.txt). Έτσι, για κάθε αρχείο που δημιουργεί ο χρήστης, το όνομα είναι διαφορετικό από τα προηγούμενα, ώστε να προσδιορίζει τον χρόνο εκτέλεσης των εντολών που περιέχει. Αυτό, υλοποιείται με το αντικείμενο DateTime, στο οποίο η συνάρτηση ToString(string) χρησιμοποιείται με την μορφή: DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt". Στην παραπάνω εντολή, ο τρόπος εμφάνισης της ημερομηνίας και ώρας, καθορίζεται μέσω της συνάρτησης ToString(string), χρησιμοποιώντας τα δεσμευμένα γράμματα: «yyyy» για το έτος (μορφή: 2014), «MM» για τον μήνα (09), «dd» για την ημέρα (11), ο χαρακτήρας «-» ως διαχωριστικό, «HH» για την ώρα (21), «mm» για τα λεπτά (30), και «ss» για τα δευτερόλεπτα (53). Τέλος προστίθεται και η κατάληξη του αρχείου «.txt». Το αποτέλεσμα είναι: « txt», και αυτό είναι το όνομα του αρχείου που δημιουργείται στις 11 Σεπτεμβρίου 2014, στις 9:30:53μμ. Συνοψίζοντας τον τρόπο ονοματολογίας του αρχείου, σύμφωνα με τα παραπάνω παραδείγματα, το file Path του αρχείου θα είναι: «SavedRoutes/ txt». Το δεύτερο χαρακτηριστικό της διαδικασίας δημιουργίας αρχείου είναι η δήλωση των δεδομένων που θα εγγραφούν μέσα στο αρχείο. Τα δεδομένα, καθώς και ο τρόπος-μορφή που θα έχουν μέσα στο αρχείο, καθορίζονται από τις ανάγκες κάθε εφαρμογής.

71 Κ Ε Φ Α Λ Α Ι Ο 5 Α Π Ο Θ Η Κ Ε Υ Σ Η Α Ρ Χ Ε Ι Ω Ν Κ Α Ι Φ Α Κ Ε Λ Ω Ν 57 Στην εφαρμογή, για την δημιουργία αρχείων χρησιμοποιείται η συνάρτηση string «CreateFile(string filepath, string filedata)», η οποία είναι private διότι καλείται μόνο από την public συνάρτηση «EditFile», που είναι υπεύθυνη για όλες τις αλλαγές στο περιεχόμενο των αρχείων. Η συνάρτηση, λοιπόν, «CreateFile», δέχεται ως ορίσματα το filepath, και το string με τις πληροφορίες που θα εγγραφούν στο αρχείο, και επιστρέφει ένα μήνυμα string, ανάλογα με την έκβαση της διαδικασίας (επιτυχία ή αποτυχία). (κώδικας C# 5-5) private string CreateFile(string filepath, string filedata) { string result; IsolatedStorageFile myappstorage = IsolatedStorageFile.GetUserStoreForApplication(); //Έλεγχος για ΜΗ ύπαρξη του Directory (φακέλου αρχείων) if (!myappstorage.directoryexists(filedirectory)) { myappstorage.createdirectory(filedirectory); //Έλεγχος για ΜΗ ύπαρξη του αρχείου (File exist Control) if (!myappstorage.fileexists(filepath)) { using (var file = myappstorage.createfile(filepath)) {//Δημιουργία του αρχείου και εγγραφή των δεδομένων using (var writer = new StreamWriter(file)) { writer.write(filedata); result = ""; //Επιστροφή «ΟΚ!» else result = "File did NOT created"; //Επιστροφή «ERROR!» return result; Κώδικας C# 5-5: Δημιουργία Αρχείου Όσον αφορά τα δεδομένα κίνησης που θα εγγραφούν στο αρχείο, βρίσκονται στην μεταβλητή string «filedata», και εγγράφονται με την χρήση ενός αντικειμένου stream (StreamWriter) (κώδικας C# 5-5) Εγγραφή Προσθήκη Δεδομένων Όπως αναφέρθηκε, η συνάρτηση CreateFile, χρησιμοποιείται μέσα σε μία γενικότερη συνάρτηση την «string EditFile(string data)», η οποία διαχειρίζεται όλα τα δεδομένα-περιεχόμενα των αρχείων. Η συνάρτηση αυτή, (EditFile), παίρνει μόνο ένα όρισμα, τα δεδομένα προς εγγραφή μέσα στο αρχείο, ενώ, το όνομα του αρχείου που θα προσπελαστεί, ανακτάται από το class property «CurrentFileName», το οποίο και χρησιμοποιείται στην δημιουργία του τελικού file path του αρχείου.(κώδικας C# 5-6)

72 58 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Το αποτέλεσμα της διαδικασίας εγγραφής δεδομένων επιστρέφεται ως μήνυμα (string result), το οποίο, είναι «κενό» όταν όλα γίνουν καλώς, ενώ σε κάθε άλλη περίπτωση περιλαμβάνει το μήνυμα του προβλήματος που έχει εμφανιστεί. Το ίδιο ακριβώς γίνεται και στην συνάρτηση CreateFile παραπάνω. public string EditFile(string data) { string result= "Isolated Storage Problem"; //Περίπτωση Προβλήματος δήλωσης Storage string filepath = FileDirectory + "/" + CurrentFileName; using (IsolatedStorageFile mystorage = IsolatedStorageFile.GetUserStoreForApplication()) {//Έναρξη αναζήτησης αρχείου if (mystorage.fileexists(filepath)) {//Έλεγχος Υπάρξης Αρχείου try { using (IsolatedStorageFileStream streamer = mystorage.openfile(filepath, FileMode.Append, FileAccess.Write)) //Μεταφορά στο ΤΕΛΟΣ του αρχείου για προσθήκη νέων δεδομένων { using (StreamWriter writer = new StreamWriter(streamer)) {//Εγγραφή Δεδομένων στο αρχείο writer.write(data); writer.close(); result = ""; //Περίπτωση Όλα ΟΚ! //Κλείσιμο try{ catch { result = "Data did NOT added"; //Περίπτωση Πρόβλημα εγγραφής data //Περίπτωση ΜΗ ύπαρξης αρχείου. Το αρχείο θα δημιουργηθεί! else result = CreateFile(filePath, data); //Κλήση της CreateFile return result; Κώδικας C# 5-6: Συνάρτηση Επεξεργασίας Περιεχομένων του Αρχείου Περιγράφοντας την λειτουργία της συνάρτησης EditFile (κώδικας C# 5-6), αρχικά γίνεται ένας έλεγχος για την ύπαρξη του αρχείου μέσα στον Isolated Storage. Σε περίπτωση που το αρχείο υπάρχει, τότε γίνεται προσθήκη των νέων δεδομένων στο τέλος του αρχείου. Στην περίπτωση, όμως που το αρχείο δεν υπάρχει μέσα στον isolated storage, τότε καλείται η συνάρτηση CreateFile για την δημιουργία του αρχείου και την αποθήκευση σε αυτό των δεδομένων. Ο πυρήνας της συνάρτησης (κώδικας C# 5-6), στην περίπτωση της προσθήκης δεδομένων σε υπάρχον αρχείο, δεν είναι άλλος από την ίδια διαδικασία εισαγωγής των δεδομένων, η οποία γίνεται με την χρήση ενός αντικειμένου streamwriter. Ο streamwriter διαθέτει δύο κύριες συναρτήσεις εγγραφής δεδομένων. Την «Write(string)» και την «WriteLine(string)». H διαφορά των δύο αυτών μεθόδων έγκειται στο ότι η «WriteLine» προσθέτει μία νέα γραμμή στο τέλος των δεδομένων εγγραφής, η οποία περιγράφεται από

73 Κ Ε Φ Α Λ Α Ι Ο 5 Α Π Ο Θ Η Κ Ε Υ Σ Η Α Ρ Χ Ε Ι Ω Ν Κ Α Ι Φ Α Κ Ε Λ Ω Ν 59 τον χαρακτήρα «\r». Λόγω του συγκεκριμένου κώδικα για την ανάκτηση και επεξεργασία του περιεχομένου του αρχείου, στην εφαρμογή χρησιμοποιούμε την Write και όχι την WriteLine Άνοιγμα Αρχείου και Ανάκτηση Δεδομένων Το άνοιγμα του αρχείου και η ανάκτηση των δεδομένων του γίνονται στην συνάρτηση OpenFile() η οποία επιστρέφει μία τιμή boolean (true/false) ανάλογα με την επιτυχία ή όχι της εκτέλεσης των εντολών της. (κώδικας C# 5-7). public bool OpenFile() { /* Δηλώσεις μεταβλητών */ string filecontent = ""; IsolatedStorageFile myappstorage = IsolatedStorageFile.GetUserStoreForApplication(); string filepath = FileDirectory + "/" + CurrentFileName; //Δήλωση file Path /* Έναρξη κώδικα */ if (myappstorage.fileexists(filepath)) //Έλεγχος ύπαρξης αρχείου { try {//Άνοιγμα και Διάβασμα από το αρχείο using (StreamReader sr = new StreamReader (myappstorage.openfile(filepath, System.IO.FileMode.Open))) { filecontent = sr.readtoend(); //Επεξεργασία & Αποθήκευση (εξαγωγή) των δεδομένων του αρχείου FileLines = filecontent.split('\n'); catch { return false; //Περίπτωση σφάλματος κατά την ανάγνωση else return false; //Περίπτωση σφάλματος κατά το άνοιγμα return true; ; //Περίπτωση Όλα ΟΚ! Κώδικας C# 5-7: Άνοιγμα και Διάβασμα Αρχείου. Ακολουθώντας τα σχόλια στο παραπάνω τμήμα κώδικας C# 5-7, το περιεχόμενο του αρχείου (αποθηκευμένα δεδομένα), εξάγεται, διαχωρίζεται ανά γραμμή και τοποθετείται στην μεταβλητή «FileLines», που αποτελεί property της class FileManipulations. Η μεταβλητή αυτή (FileLines) αποτελεί έναν πίνακας string που σε κάθε του γραμμή αντιστοιχεί και μία αποθηκεμένη εντολή (δήλωση: public string[] FileLines { get; set; )

74 60 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 5.4 Διαχείριση Αρχείων Μέσα στην σελίδα FileViewPage της εφαρμογής, δίνεται στον χρήστη η δυνατότητα να διαχειριστεί, ως ξεχωριστές οντότητες, το περιεχόμενο του isolated storage, δηλαδή τα αρχεία καταγραφών. Συγκεκριμένα, για κάθε αρχείο, δίνεται η δυνατότητα Μετονομασίας και Διαγραφής του, και επιπλέον, η δυνατότητα ταυτόχρονης διαγραφής όλων των αρχείων που έχουν δημιουργηθεί. Για την υλοποίηση αυτών των διαδικασιών έχουν θεσπιστεί τρείς συναρτήσεις: RenameFile για μετονομασία, DeleteFile για διαγραφή και DeleteALL για μαζική διαγραφή όλων των αρχείων Συνάρτηση Μετονομασίας (RenameFile) Για την μετονομασία ενός αρχείου του isolated storage, δυστυχώς, δεν υπάρχει κάποιος αυτοματοποιημένος τρόπος, μέσα στο Windows Phone 7.1, οπότε και ακολουθείται η αλγοριθμική μέθοδος. (κώδικας C# 5-8) public string RenameFile(string newfilename) { string result; string filepath = FileDirectory + "/" + CurrentFileName; try { using (IsolatedStorageFile myappstorage = IsolatedStorageFile.GetUserStoreForApplication()) { //Έλεγος ύπαρξης αρχείου if (myappstorage.fileexists(filepath)) {//Δημιουργία Αντιγράφου του αρχείου, με Νέο Όνομα myappstorage.copyfile(filepath, FileDirectory+"/"+newFileName); myappstorage.deletefile(filepath); //Διαγραφή του «παλαιού» αρχείου result = ""; //Αποτέλεσμα = ΟΚ! CurrentFileName = newfilename; //Καταχώρηση του νέου Ονόματος στο property else //Περίπτωση ΜΗ ύπαρξης αρχείου result = "File: " + newfilename+" ("+CurrentFileName + ") in the dir: " + FileDirectory + " does not Exist"; catch { result = "File did NOT Renamed"; //Περίπτωση σφάλματος Μετονομασίας return result; Κώδικας C# 5-8: Μετονομασία Αρχείου του Isolated Storage Αφού ολοκληρωθεί με επιτυχία ο έλεγχος για την ύπαρξη του αρχείου που θέλουμε να μετονομάσουμε, δημιουργείται ένα αντίγραφο του αρχείου αυτού, έχοντας το νέο όνομα. Κατόπιν, διαγράφεται το αρχικό αρχείο (με το παλαιό όνομα), και γίνεται ενημέρωση του class property CurrentFileName.

75 Κ Ε Φ Α Λ Α Ι Ο 5 Α Π Ο Θ Η Κ Ε Υ Σ Η Α Ρ Χ Ε Ι Ω Ν Κ Α Ι Φ Α Κ Ε Λ Ω Ν 61 Ολοκληρώνοντας, λοιπόν την περιγραφή, πρέπει να τονιστεί πως, όπως στις προηγούμενες συναρτήσεις, έτσι και στη RenameFile επιστρέφεται ένα string με την περιγραφή του προβλήματος, σε περίπτωση κάποιου exception, ενώ σε αντίθετη περίπτωση (επιτυχημένη ολοκλήρωση εντολών) το επιστρεφόμενο string είναι κενό. Χρήση της διαδικασίας Μετονομασίας Η διαδικασία που περιγράφτηκε παραπάνω υλοποιείται μέσα στην σελίδα «FileViewPage», και πιο συγκεκριμένα μέσα σε αντικείμενα μηνυμάτων (αντικείμενο MessageCanvas). Η ενεργοποίηση του «MessageCanvas» γίνεται με δύο τρόπους. Πρώτον, με παρατεταμένο άγγιγμα στο όνομα του αρχείου, και δεύτερον με την επιλογή του κουμπιού «Modify» στην «προβολή περιεχομένων του αρχείου». (βλ.παράγραφο 7.2.2). H έναρξη της διαδικασίας, γίνεται με κλίση της συνάρτησης mymessageshow, έχοντας ως «τίτλο» και «κείμενο» του μηνύματος τις σχετικές πληροφορίες του αρχείου και τις διατιθέμενες επιλογές («μετονομασία» ή «ακύρωση»). Καθώς επιθυμούμε την ενεργοποίηση της «προβολής τροποποίησης» του αρχείου, το τρίτο όρισμα που δέχεται η mymessashow είναι η επιλογή «true». (κώδικας C# 5-9) Επιλέγοντας ο χρήστης «Rename», καλείται η mymessageoptions και εκτελείται ο κώδικα της «case 1», καθώς το κουμπί «Rename» έχει tag=1. (κώδικας C# 5-9) Μέσα στην «case 1», ο κώδικας που εκτελείται, ενεργοποιεί το TextBox όπου θα γραφτεί το νέο όνομα, και τοποθετεί στο περιεχόμενό του, επιλεγμένο, το ισχύον όνομα του αρχείου. Στην συνέχεια, εμφανίζει το πληκτρολόγιο και αλλάζει το tag του κουμπιού σε 10. /* Κλίση της mymessageshow με επιλογή RENAME */ mymessageshow("file Options", "Select whether RENAME or DELETE the file: \"" + myfile.currentfilename + "\".", true); /* Συνάρτηση mymessageoptions */ private void mymessageoptions(object sender, RoutedEventArgs e) { switch (((Button)sender).Tag.ToString())//.ToString()) {//Επιλογή με βάση το Tag του κουμπιού που επέλεξε ο χρήστης case "1": //Επιλογή Τροποποίησης: Μετονομασία showcanvas = true; newfilename.visibility = System.Windows.Visibility.Visible;//Προβολή TextBox MsgOption2.IsEnabled = false; newfilename.text = myfile.currentfilename; //Προσθήκη του Τρέχοντος Ονόματος newfilename.focus(); //Προβολή Πληκτρολογίου newfilename.selectall(); //Επιλογή όλου του Ονόματος //Αλλαγή του Tag του κουμπιού ((Button)sender).Tag = 10; break;

76 62 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ case "10": //Διαδικασία Μετονομασίας if (!string.isnullorempty(newfilename.text)) //Μετονομασία μόνο εφόσον έχει FileToRename(newFileName.Text); //γράψει κάτι ο χρήστης. else MessageBox.Show("No Changes occured!"); //UI modification ((Button)sender).Tag = 1; //Επαναφορά του Tag του κουμπιού MsgOption2.IsEnabled = true; //Απόκρυψη του TextBox newfilename.visibility = System.Windows.Visibility.Collapsed; break; Κώδικας C# 5-9: Κώδικας διαχείρισης της διαδικασίας Μετονομασίας Με την ολοκλήρωση της προσθήκης του νέου ονόματος επιλέγεται από τον χρήστη ξανά το κουμπί «Rename», το οποίο τώρα εκτελεί διαφορετικό κώδικα, καθώς το tag του άλλαξε σε «10», και εκκινείται η διαδικασία μετονομασίας του αρχείου.(κώδικας C# 5-9) Οι ενέργειες που γίνονται μετά την δεύτερη επιλογή του κουμπιού «Μετονομασία» (tag=10), περιλαμβάνουν, πρώτα απ όλα, έναν έλεγχο για το εάν έχει γράψει ο χρήστης νέο όνομα για το αρχείο. Εάν δεν έχει γράψει τίποτα (κενό textbox), εμφανίζεται σχετικό μήνυμα και επιστρέφει στην προηγούμενη προβολή που βρισκόταν. Διαφορετικά, καλείται η συνάρτηση «FileToRename» η οποία ελέγχει και διορθώνει το όνομα που έδωσε ο χρήστης (κώδικας C# 5-10). Σε κάθε περίπτωση το tag του κουμπιού «Rename», επανέρχεται στην αρχική του τιμή (tag=1). private void FileToRename(string NewFileName) { //Elegxei to filename gia Kena! if (NewFileName.IndexOf(" ") > -1) NewFileName = NewFileName.Replace(" ", null); //Ελέγχει / προσθέτει την κατάληξη.txt στο νέο όνομα αρχείου NewFileName = (NewFileName.IndexOf(".txt") == -1)// Έλεγχος ΟΧΙ ύπαρξης.txt? NewFileName + ".txt" // True: Προσθέτει.txt : NewFileName; // False: Το όνομα είναι ΟΚ string result = myfile.renamefile(newfilename); //class Function Do rename if (result == "") //Έλεγχος Ολοκλήρωσης Μετονομασίας { MessageBox.Show("File RENAMED successful"); UpdateFileList(); else MessageBox.Show(result); //Περίπτωση προβλήματος στην Μετονομασία Κώδικας C# 5-10: Συνάρτηση FileToRename για έλεγχο-διόρθωση FileName Η διαδικασία ελέγχου και διόρθωσης του νέου ονόματος για την μετονομασία αρχείου υλοποιείται στην συνάρτηση «FileToRename» η οποία καλείται με όρισμα το νέο όνομα του αρχείου. Αρχικά, αναζητά την ύπαρξη κενών στο όνομα, τα οποία και αφαιρεί. Κατόπιν, ελέγχει για την ύπαρξη της κατάληξης «.txt» που πρέπει να έχουν όλα τα αρχεία, την οποία

77 Κ Ε Φ Α Λ Α Ι Ο 5 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η Α Ρ Χ Ε Ι Ω Ν 63 και προσθέτει σε περίπτωση που λείπει. Ολοκληρώνοντας την λειτουργία της, μετά το τέλος των ελέγχων στο νέο όνομα του αρχείου, καλείται η μέθοδος «RenameFile», για την υλοποίηση της μετονομασίας. (κώδικας C# 5-8) Συνάρτηση Διαγραφής αρχείου Για την διαγραφή ενός αρχείου από τον Isolated Storage της εφαρμογής, χρησιμοποιείται η έτοιμη συνάρτηση DeleteFile(string). Η διαδικασία που ακολουθείται, όπως και στις προηγούμενες μεθόδους, είναι ο έλεγχος πρωτίστως για την ύπαρξη του αρχείου που θέλουμε να διαγράψουμε, και στην συνέχεια, η διαγραφή του. Σε κάθε περίπτωση, η συνάρτηση επιστρέφει ένα μήνυμα ενημέρωσης. (κώδικας C# 5-11) public string DeleteFile(string filename) { string result; string filepath = FileDirectory + "/" + filename; try //Έναρξη κώδικα διαγραφής {//Έλεγος ύπαρξης αρχείου using (IsolatedStorageFile myappstorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myappstorage.fileexists(filepath)) { //Διαγραφή Αρχείου myappstorage.deletefile(filepath); result = ""; else //Περίπτωση ΜΗ ύπαρξης αρχείου result = "File: "+filename+" in the dir: "+FileDirectory+" does not Exist"; catch { result = "File did NOT Deleted"; //Περίπτωση σφάλματος Διαγραφής return result; Κώδικας C# 5-11: Συνάρτηση Διαγραφής αρχείου Χρήση διαδικασίας Διαγραφής Η διαδικασία «διαγραφής» είναι εν μέρει συνδεδεμένη με την διαδικασία «μετονομασίας» που περιγράφτηκε στην προηγούμενη ενότητα, καθώς ενεργοποιείται μέσω του ί- διου μηνύματος (αντικείμενο MessageCanvas). Εκκινείται, όμως, με το κουμπί «Delete», το οποίο καλεί την mymessageoptions με tag «2» (case 2), και αυτή με την σειρά της καλεί την FileToDelete με όρισμα το όνομα του τρέχοντος αρχείου. Αυτό φαίνεται και στο παρακάτω τμήμα κώδικα:

78 64 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ private void mymessageoptions(object sender, RoutedEventArgs e) { switch (((Button)sender).Tag.ToString())//.ToString()) {//Επιλογή με βάση το Tag του κουμπιού που επέλεξε ο χρήστης case "2": //Select Delete FileToDelete(myFile.CurrentFileName); //Κλίση συνάρτησης Διαγραφής break; Η διάδραση της εφαρμογής με τον χρήστη υλοποιείται μέσω της μεθόδου «FileToDelete». Η εκτέλεσή της ξεκινάει με την ενημέρωση του χρήστη για την επικείμενη διαγραφή. Έπειτα, και εφόσον ο χρήστης είναι σύμφωνος, καλείται η συνάρτηση «DeleteFile» που υλοποιεί την διαγραφή και παρουσιάστηκε παραπάνω (κώδικας C# 5-11). Ολοκληρώνοντας τις εργασίες αλληλεπίδρασης, η «FileToDelete» ενημερώνει τον χρήστη για την έκβαση της διαδικασίας διαγραφής και τον μεταφέρει στην προβολή που βρισκόταν πριν επιλέξει «διαγραφή». Τα βήματα αυτά είναι:. private void FileToDelete(string filename) { //Προβολή μηνύματος ερώτησης για διαγραφή if (MessageBox.Show("Do you want to Delete the File: " + filename + "?", "Delete File", MessageBoxButton.OKCancel) == MessageBoxResult.OK) {//Διαγραφή Αρχείου και επιστροφή του αποτελέσματος της διαδικασίας. string result = myfile.deletefile(filename); //Διαδικασία Διαγραφής if (result == "") {//Διαγραφή Επιτυχής MessageCanvas.Visibility = System.Windows.Visibility.Collapsed; MessageBox.Show("File DELETED successful"); //Προβολή Μηνύματος Επιτυχίας UpdateFileList(); //Ενημέρωση της Λίστας των Αρχείων else //Περίπτωση σφάλματος MessageBox.Show(result); Διαγραφή αρχείων Εκκαθάριση Isolated Storage Κλείνοντας την ενότητα αυτή, γίνεται αναφορά στην διαδικασία διαγραφής όλων των αρχείων καταγραφής που έχει δημιουργήσει ο χρήστης στην εφαρμογή. Οι εντολές που πραγματοποιούν αυτή την διαδικασία περιλαμβάνονται στην συνάρτηση DeleteALL, η ο- ποία δεν παίρνει κανένα όρισμα, και επιστρέφει ένα string με το αποτέλεσμα των πράξεων της. (κώδικας C# 5-12) Η διαγραφή όλων των αρχείων, δεν μπορεί να γίνει με άμεση διαγραφή του φακέλου που τα περιλαμβάνει, λόγω περιορισμού του λειτουργικού συστήματος. Για να διαγραφεί ένας φάκελος, θα πρέπει να είναι άδειος (κανένα αρχείο περιεχόμενο). Έτσι, αυτό που υλοποιείται, αρχικά, είναι η ανάκτηση όλων των ονομάτων των αρχείων που βρίσκονται

79 Κ Ε Φ Α Λ Α Ι Ο 5 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η Α Ρ Χ Ε Ι Ω Ν 65 στον φάκελο «SavedRoutes» (φάκελος των καταγραφών). Έπειτα, μέσα σε μία δομή επανάληψης «for», εκτελείται η εντολή διαγραφής, για κάθε ένα αρχείο που υπάρχει μέσα στον φάκελο. (κώδικας C# 5-12) Επιλέχτηκε η χρήση της «for» αντί για την «foreach», για τον λόγο ότι στην «foreach» θα έπρεπε για κάθε όνομα αρχείου να δεσμεύεται μία μεταβλητή string, ενώ αντίθετα, στην for, αρκεί ένας Integer μετρητής για την προσπέλαση όλων των αρχείων. Με αυτόν τον τρόπο επιτυγχάνεται ελάττωση των πόρων του συστήματος που χρησιμοποιεί η εφαρμογή. Ενημερωτικά, η σύνταξη της foreach είναι: foreach(string singlefilename in filenames[]){..code to execute... Τέλος, η συνάρτηση DeleteALL επιστρέφει ένα string με το αποτέλεσμα των διεργασιών της, το οποίο είναι κενό στην περίπτωση που ολοκληρωθούν επιτυχώς όλες οι ενέργειες. public string DeleteALL() { try { using (IsolatedStorageFile myappstorage = IsolatedStorageFile.GetUserStoreForApplication()) {//Έλεγχος ύπαρξης Φακέλου if (myappstorage.directoryexists(filedirectory)) { //Ανάκτηση όλων των ονομάτων των αρχείων string[] filenames = myappstorage.getfilenames(filedirectory + "\\*"); //Προσπέλαση όλων των αρχείων για Διαγραφή for (int i = 0; i < filenames.length; i++) myappstorage.deletefile(filedirectory + "/" + filenames[i]); return ""; //Περίπτωση όλα ΟΚ! else //Περίπτωση ΜΗ ύπαρξης του φακέλου με τα αρχεία return "Dir: " + FileDirectory + " NOT deleted"; //Περίπτωση Exception στον Isolated Storage catch { return "myappstorage Problem"; Κώδικας C# 5-12: Συνάρτηση Διαγραφής του Συνόλου των Αρχείων από τον Isolated Storage Η χρήση της συνάρτησης αυτής (DeleteAll), γίνεται μέσα στον event handler «DeleteAllbtn_Click» οποίος αντιστοιχεί στο κουμπί «Delete All» που βρίσκεται στην σελίδα FileViewPage.

80 66 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Βιβλιογραφία Κύκλος Λειτουργίας Εφαρμογής Application Life Circle Application Life Circle 10/managing-app-lifecycle-so-your-apps-feel-quot-always-alive-quot.aspx Application Life Circle Application Life Circle Διαχείριση Αρχείων Isolated Storage Isolated Storage Isolated Storage Εικόνα 5-1: Σχηματική απεικόνιση Local Data Storage Εφαρμογής Text Files Delete files / directories vs.110%29.aspx Skydrive usage Απεικόνιση Περιεχομένου Αρχείων Large Text large text files Wrap Panel Wrap Panel Wrap Panel & Listbox

81 ΚΕΦΑΛΑΙΟ 6 Αυτοματοποιημένες Διαδικασίες Εκτός από τον έλεγχο της ρομποτικής πλατφόρμας σε πραγματικό χρόνο, η εφαρμογή εκτελεί κάποιες επιπλέον λειτουργίες, εκμεταλλευόμενη τόσο τους πόρους των συσκευών Windows Phone, όσο και την υπολογιστική τους ισχύ. Οι λειτουργίες αυτές είναι: i. Άμεση χρήση και αποθήκευση ρυθμίσεων (ρυθμίσεις λειτουργίας και προβολής) ii. Καταγραφή εντολών iii. Διαχείριση αρχείων καταγραφών iv. Αναπαραγωγή καταγεγραμμένων εντολών, με αυτοματοποιημένο έλεγχο, σε πραγματικό χρόνο v. Προσομοίωση λειτουργίας Η διάρθρωση αυτού του κεφαλαίου έγινε με βάση την παραπάνω λίστα των πέντε λειτουργιών Αυτοματισμού.

82 68 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 6.1 Ρυθμίσεις της Εφαρμογής Όπως αναφέρθηκε λεπτομερώς στο προηγούμενο κεφάλαιο, υπάρχει το container μνήμης Isolated Storage Settings, το οποίο διατίθεται από το λειτουργικό σύστημα για την αποθήκευση ρυθμίσεων της εφαρμογής. Στην Arduino Vechicle, για την δημιουργία και χρήση αυτών των ρυθμίσεων, δημιουργήθηκε η σελίδα SettingsPage. Τα αντικείμενα που διαχειρίζεται η σελίδα αυτή είναι αντικείμενα τύπου SettingsClass. Εικόνα 6-1: Σελίδα Ρυθμίσεων της εφαρμογής (SettingsPage) Όπως φαίνεται και στην εικόνα 6-1, υπάρχουν συγκεκριμένες ρυθμίσεις διαθέσιμες για τον χρήστη. Αυτές περιλαμβάνουν τον τρόπο σύνδεσης με την ρομποτική πλατφόρμα και τις πληροφορίες προβολής της σελίδας ελέγχου (MoveTestPage UI). Οι ρυθμίσεις αυτές αναφέρονται στον ακόλουθο πίνακα 6-1. Πίνακας 6-1: Ρυθμίσεις Εφαρμογής Ρύθμιση Επιλογές Χρήστη Αρχική Ρύθμιση (Default) Μεταβλητή Storage Settings Διεύθυνση (URL) Ρομποτικής Πλατφόρμας Εισαγωγή URL Κειμένου ArduinoURL Επιλογή Μεθόδου Ε- πικοινωνίας WebClient HTTPrequest ConnectionMethod Επιλογή Πληροφορίων Προβολής Debugger Arduino Image Viewer Επιλογή Τρόπου Λειτουργίας false: κανονική Λειτουργία true: Λειτουργία Demo DemoMode Για το πεδίο διεύθυνσης της ρομποτικής πλατφόρμας, χρησιμοποιούνται δύο αντικείμενα textbox, με την μέθοδο Watermark (κώδικας XAML 6-1).

83 Κ Ε Φ Α Λ Α Ι Ο 6 Α Υ Τ Ο Μ Α Τ Ο Π Ο Ι Η Μ Ε Ν Ε Σ Δ Ι Α Δ Ι Κ Α Σ Ι Ε Σ 69 Η μέθοδος watermark έχει συγκεκριμένη λειτουργία. Τα δύο textboxes τοποθετούνται ακριβώς το ένα πάνω στο άλλο. Αυτό που βρίσκεται «από κάτω» σηματοδοτείται ως watermark. Όταν είναι απενεργοποιημένο το textbox εισαγωγής (δεν εμφανίζεται το πληκτρολόγιο), τότε ως περιεχόμενο εμφανίζεται αυτό του watermark, δηλαδή η ήδη αποθηκεμένη διεύθυνση. Στην περίπτωση που επιλεγεί το textbox, εξαφανίζεται το περιεχόμενο του watermark, και το κουτί κειμένου είναι ελεύθερο για νέα εισαγωγή. <!-- Right Side --> <Grid Name="LeftSide" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0"> <!--1. Είναι το Watermark --> <TextBox Name="URLtxtBoxWATERMARK" Height="70" HorizontalAlignment="Stretch" VerticalAlignment="Top" IsHitTestVisible="False" Margin="20,50,20,0" Foreground="{StaticResource PhoneTextBoxReadOnlyBrush" FontSize="23"/> <!--2. Είναι το TextBox --> <TextBox Name="URLtxtBox" Height="70" VerticalAlignment="Top" HorizontalAlignment="Stretch" InputScope="Url" Margin="20,50,20,0" FontSize="23" Opacity="0" KeyUp="EnterKeyPressed" LostFocus="URLtxtBoxLostFocus" GotFocus="URLtxtBoxGotFocus"/> </Grid> Κώδικας XAML 6-1: TextBox με Watermark Όταν ο χρήστης ολοκληρώσει την εισαγωγή της νέας διεύθυνσης, γίνεται ένας έλεγχος του κειμένου, για την περίπτωση ύπαρξης σφάλματος ή/και παράλειψης, και διορθώνεται το URL, παίρνοντας έγκυρη μορφή (valid uri). Ο έλεγχος και η διόρθωση είναι ενσωματωμένα στην εντολή εκχώρησης του url, και φαίνεται στο ακόλουθο τμήμα κώδικα. (κώδικας C# 6-1) appsettings.arduinourl = //Εκχώρηση Τιμής URL (string.isnullorempty(urltxtbox.text)) //If URLtxtBox.Text είναι Άδειο /Null? URLtxtBoxWATERMARK.Text // True: παίρνει την τιμή prefix : (URLtxtBox.Text.IndexOf(" == -1) // False: Ελέγχει εάν ΔΕΝ έχει " + URLtxtBox.Text // True: Προσθέτει το Http Prefix : (URLtxtBox.Text.IndexOf(" ") > -1) // False: Ελέγχει εάν έχει κενά? URLtxtBox.Text = URLtxtBox.Text.Replace(" ", null) // True: σβήνει τα κενά : URLtxtBox.Text; // False: Ο χρήστης έδωσε το URL χωρίς σφάλματα! Κώδικας C# 6-1: Διόρθωση URL ρομποτικής πλατφόρμας. Πρώτα, προσφέρεται η επιλογή του τρόπου επικοινωνίας μεταξύ εφαρμογής και ρομποτικής πλατφόρμας. Η εφαρμογή της ρύθμισης αυτής γίνεται στην σελίδα MoveTestPage. Έπειτα, παρουσιάζονται οι επιλογές των πληροφορίων που θα εμφανίζονται στον χρήστη κατά την λειτουργία της εφαρμογής. Με την επιλογή «debugger εμφανίζεται αυτούσιο το κείμενο feedback που παίρνει η εφαρμογή από την ρομποτική πλατφόρμα. Εναλλακτικά, με

84 70 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ την επιλογή «arduino image», παρουσιάζεται σε εικόνα την κατεύθυνση κίνησης της πλατφόρμας, βασιζόμενη, πάντα, στα δεδομένα feedback που παίρνει από αυτή. Οι πληροφορίες που εμφανίζονται, ανανεώνονται σε κάθε εντολή που εκτελείται, ώστε να είναι άμεση η επικοινωνία και η διάδραση με τον χρήστη. Οι ρυθμίσεις της εφαρμογής ολοκληρώνονται με την δυνατότητα επιλογής του τρόπου λειτουργίας «demo» (on/off). Αυτή η ρύθμιση (demo on), επιτρέπει στον χρήστη να χρησιμοποιήσει την εφαρμογή χωρίς την πραγματική αποστολή των εντολών (εικονική λειτουργία demo). Τα οφέλη αυτής της επιλογής είναι πολλαπλά, με κυριότερα την δυνατότητα δοκιμών των λειτουργιών αυτοματισμού (που αναλύονται παρακάτω), αλλά και την χρήση της εφαρμογής ως παιχνίδι. Απενεργοποιώντας την επιλογή «demo» (demo off), η εφαρμογή χρησιμοποιείται για τον άμεσο έλεγχο της ρομποτικής πλατφόρμας σε πραγματικό χρόνο. Σε αυτή την κατάσταση, όλες οι εντολές ελέγχου αποστέλλονται και η εφαρμογή εκτελεί όλες τις λειτουργίες και τους ελέγχους της. Εμφάνιση της Σελίδας (UI) Για την καλύτερη διάρθρωση του περιεχομένου της σελίδας, και για να είναι οπτικά κομψό, έχουν προστεθεί δύο γραμμές, μία κάθετη και μία οριζόντια. Η σχεδίασή τους υλοποιείται με το αντικείμενο «Line», και βασίζεται σε δύο ζευγάρια μεταβλητών (x,y) που αντιστοιχούν στα δύο σημεία άκρα της γραμμής, τα οποία και θα ενωθούν για τον σχηματισμό της. (κώδικας XAML 6-2) Όπως φαίνεται και στον παρακάτω κώδικα, η κάθετη γραμμή, έχει την ίδια τιμή x (x=360) και για τα δύο σημεία, ενώ για την τιμή y έχουμε δύο διαφορετικές τιμές (y1=0, y2=390). Αντίστροφα, η οριζόντια γραμμή, σε αντίθεση με την κάθετη, έχει διαφορετικές τιμές για το x (x1=40, x2=400), και ίδιες για το y (y=20). <!-- Κάθετη Γραμμή - Separator --> <Line Name="SeparatorLine" StrokeThickness="5" Stroke="#FF838386" X1="360" X2="360" Y1="0" Y2="390" /> <!-- Οριζόντια Γραμμή - Separator --> <Line Name="SeparatorLineR" StrokeThickness="5" Stroke="#FF838386" X1="40" X2="400" Y1="20" Y2="20"/> <!-- Radio button (Group: Connection Method) --> <RadioButton Name="clientRbtn" GroupName="ConnectionMethod" Content="WebClient" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="23,0" FontSize="22"/> <!-- Radio button (Group: Viewer) --> <RadioButton Name="DebugRbtn" GroupName="Viewer" Content="Debugger" Margin="23,0" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="22" />

85 Κ Ε Φ Α Λ Α Ι Ο 6 Α Υ Τ Ο Μ Α Τ Ο Π Ο Ι Η Μ Ε Ν Ε Σ Δ Ι Α Δ Ι Κ Α Σ Ι Ε Σ 71 <!-- Checkbox (DEMO mode) --> <CheckBox Content="Demostration Mode" HorizontalAlignment="Right" Margin="0,230,0,0" Name="DemoRbtn" FontSize="22" IsChecked="{Binding demomode, Mode=TwoWay" Click="DemoRbtn_Click"/> Κώδικας XAML 6-2: Σχεδίαση αντικειμένων για τη σελίδα των Ρυθμίσεων SettingsPage Συνεχίζοντας, οι διαθέσιμες επιλογές για την «μέθοδο επικοινωνίας», και για τις «πληροφορίες προβολής», δεν είναι τίποτα παραπάνω από «radio buttons» τα οποία είναι τοποθετημένα σε group ώστε να μην είναι εφικτή η ταυτόχρονη επιλογή δύο radio buttons του ίδιου group. Παράλληλα, η επιλογή «λειτουργία demo», υλοποιείται με την χρήση ενός checkbox, το οποίο όταν είναι επιλεγμένο (checked) υποδηλώνει την ενεργοποίηση της λειτουργίας αυτής. (κώδικας XAML 6-2) Η ενημέρωση του UI, με βάση τις ρυθμίσεις που είναι αποθηκευμένες, γίνεται στην συνάρτηση UIupdater. Όπως φαίνεται στον παρακάτω κώδικα XAML 6-2, οι αποθηκεμένες τιμές εκχωρούνται στο watermark, στο checkbox και στα radio buttons, όπου το grouping που έχει γίνει επιτρέπει την χρήση «NOT» με τον τελεστή «!». Όσον αφορά τον τρόπο αποθήκευσης και ανάκτησης των ρυθμίσεων αυτών, παρουσιάστηκε λεπτομερέστερα στην ενότητα Αποθήκευση Ρυθμίσεων. private void UIupdater() {//Get and Display Current Settings this.urlinfotxtblk.text = "The prefix IP Address (URL) to connect has set to:\n \""+ (this.urltxtboxwatermark.text = appsettings.arduinourl) + "\"."; //Ρύθμιση Λειτουργίας Demo με αντίστοιχη ενεργοποίηση του TextBox. URLtxtBox.IsEnabled = URLtxtBoxWATERMARK.IsEnabled =!(bool)(demorbtn.ischecked =demomode= appsettings.demomode); //Ρύθμιση των Check Boxes clientrbtn.ischecked =!(HttpRbtn.IsChecked = appsettings.connectionmethod); DebugRbtn.IsChecked =!(ImageRbtn.IsChecked = appsettings.viewer); Κώδικας C# 6-2: Ενημέρωση Προβολή των ρυθμίσεων (SettingsPage) 6.2 Καταγραφή Εντολών Μία από τις κύριες δυνατότητες της εφαρμογής είναι η καταγραφή των εντολών που εκτελεί η ρομποτική πλατφόρμα, και η αποθήκευσή τους σε αρχείο. Με αυτόν τον τρόπο αποθηκεύεται τόσο η διαδρομή, όσο και οι υπόλοιπες λειτουργίες που εκτελεί.

86 72 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Για να γίνει αυτό εφικτό υπάρχουν δύο πιθανές προσεγγίσεις. Η πρώτη αναφέρεται στην ενσωμάτωση ενός πομπού-δέκτη GPS στην ρομποτική πλατφόρμα. Μέσω του συστήματος αυτού, αποστέλλονται οι πραγματικές της συντεταγμένες της πλατφόρμας, μαζί με ένα πλήθος άλλων πληροφοριών να προσδιορίζουν την γεωγραφική θέση και την κινητική της κατάσταση. Κάτι τέτοιο όμως, στην παρούσα πειραματική πλατφόρμα είναι αδύνατο, διότι, όπως αναφέρθηκε και στα προηγούμενα κεφάλαια (ενότητα Κώδικας του Arduino) η μνήμη του μικροελεγκτή είναι εξαιρετικά μικρή και το μεγαλύτερο μέρος της ήδη κατειλημμένο από τον υπάρχοντα κώδικα. Εικόνα 6-2: Μήνυμα επιλογών για την διαδικασία Καταγραφής και γενικότερη πρόσβαση στις Αυτοματοποιημένες Διαδικασίες Έτσι, περνάμε στην δεύτερη προσέγγιση για την υλοποίηση του route tracking. Το βασικό σκεπτικό είναι η παρακολούθηση και καταγραφή των εντολών κίνησης που στέλνει ο χρήστης στην πλατφόρμα, μέσω της εφαρμογής. Για να υλοποιηθεί κάτι τέτοιο, εκμεταλλευόμαστε τους πόρους (σε μνήμη και υπολογιστική ισχύ) της συσκευής που τρέχει την εφαρμογή ελέγχου Δεδομένα Καταγραφής - Μορφοποίηση Ξεκινώντας, θα ασχοληθούμε με τα δεδομένα που θα πρέπει να αποθηκευτούν, ώστε να έχουμε τον βέλτιστο και αποδοτικότερο προσδιορισμό της κίνησης. Εφόσον ο χρήστης κινεί την πλατφόρμα, μέσω συγκεκριμένων εντολών-κουμπιών, αρκεί μία καταγραφή των εντολών που δίνει. Παράλληλα, όμως, θα πρέπει να γνωρίζουμε και την χρονική διάρκεια της εντολής (π.χ. χρόνος κίνησης προς συγκεκριμένη κατεύθυνση). Έτσι, εκτός από την καταγραφή των εντολών, πρέπει να γίνεται καταγραφή και του χρόνου εκτέλεσης της κάθε εντολής. Στο «Παράρτημα Α» βρίσκεται ο πίνακας 9-2 με τις εντολές που εκτελεί ο μικροελεγκτής μέσω της εφαρμογής. Αντιστοιχώντας, την κάθε εντολή σε συγκεκριμένο κουμπί, μπορούμε να γνωρίζουμε και να καταγράφουμε τις όλες επιλογές του χρήστη.

87 Κ Ε Φ Α Λ Α Ι Ο 6 Κ Α Τ Α Γ Ρ Α Φ Ή Κ Ι Ν Η Σ Ε Ω Ν Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 73 Όσον αφορά την διάρκεια εκτέλεσης της κάθε εντολής, μπορούμε να την προσδιορίσουμε με εξαιρετική ακρίβεια, μετρώντας το χρονικό διάστημα που μεσολαβεί μεταξύ δύο εντολών (εκτελούμενης και νέας προς εκτέλεση). Αυτό επιτυγχάνεται με χρήση του αντικειμένου «DateTime», και συγκεκριμένα του πεδίου του, «Milliseconds». Έτσι, κάθε καταγεγραμμένη εντολή που αποθηκεύεται, καταλαμβάνει μία γραμμή στο αρχείο, η οποία αποτελείται από την εντολή και τον χρόνο εκτέλεσής της. Η μορφή της κάθε γραμμής καταγραφής είναι: Εντολή Χρόνος. Για παράδειγμα:?butt0 1162, όπου η Εντολή είναι?butt0 και ο Χρόνος 1162, που αντιστοιχεί σε milliseconds Διαδικασία Καταγραφής Όπως επεξηγήθηκε αναλυτικότατα και στην ενότητα (Επικοινωνία Εφαρμογής με τον Server - Μικροελεγκτή), η επικοινωνία της εφαρμογής με την ρομποτική πλατφόρμα προϋποθέτει την χρήση Ασύγχρονων μεθόδων επικοινωνίας. Αυτό σημαίνει πως η επικοινωνία εφαρμογής πλατφόρμας γίνεται στο background. Παράλληλα όμως, υπάρχει και μία καθυστέρηση στην διαδικασία λήψης και εκτέλεσης της εντολής από τον μικροελεγκτή. Αυτή η καθυστέρηση χρόνου θα πρέπει να υπολογιστεί, ώστε να αποφευχθούν φαινόμενα συνεχόμενης αποστολής μη εκτελούμενων εντολών από τον χρήστη. Για την διαχείριση τέτοιων καταστάσεων και την αποφυγή σφαλμάτων, η καταγραφή των εντολών γίνεται κατά την απάντηση της ρομποτικής πλατφόρμας (feedback), μετά την εκτέλεση της κάθε εντολής. Έτσι, είμαστε σίγουροι πως η εντολή που έχει καταγραφεί έχει εκτελεστεί, και ταυτόχρονα, γίνεται ευκολότερος ο υπολογισμός της χρονικής διάρκειας της κάθε εντολής. Έναρξη Καταγραφής Η έναρξη της διαδικασίας καταγραφής των κινήσεων της ρομποτικής πλατφόρμας πραγματοποιείται κατόπιν της θετικής απάντησης του χρήστη στο μήνυμα που εμφανίζεται. Το μήνυμα αυτό αποτελείται από το όνομα του αρχείο καταγραφής, και την διαδικασία διακοπής ολοκλήρωσης της καταγραφής. (εικόνα 6-3) Προγραμματιστικά, η έναρξη της καταγραφής υλοποιείται στην void συνάρτηση «StartCapture» η οποία παίρνει δύο ορίσματα. Το πρώτο όρισμα είναι το όνομα του αρχείου που θα διατηρήσει τα δεδομένα (string filename). Το δεύτερο όρισμα, είναι ένας διακόπτης

88 74 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ (switch) που ο ρόλος του είναι να προσδιορίσει εάν η καταγραφή είναι για νέο αρχείο ή πρόκειται για προσθήκη εντολών σε υπάρχον αρχείο (bool fromnavigation). Εικόνα 6-3: Μήνυμα Έναρξης Καταγραφής Κινήσεων της πλατφόρμας Εάν ο χρήστης επιλέξει «cancel», τότε ελέγχεται η μεταβλητή-διακόπτης fromnavigation. Έτσι, εάν ο χρήστης, πριν την έναρξη της καταγραφής, βρισκόταν στην σελίδα των αρχείων (FileViewPage), θα μεταβεί πάλι εκεί. Στην αντίθετη περίπτωση (επιλογή «ok»), εκτελούνται οι εξής εντολές αρχικοποίησης της Καταγραφής: myfile.currentfilename = filename; //Δήλωση του αρχείου iscapture = true; //Ενεργοποίηση Καταγραφής (Set capture ON) DataToFile = null; //Καθαρισμός του Data string first = true; //Boolean: Εγγραφή πρώτης γραμμής Νέα καταγραφή UImodificator(true, false); // Τροποποίηση του UI της σελίδας MoveTestPage Λειτουργία Καταγραφής Όπως αναφέρθηκε, η καταγραφή των εντολών γίνεται κατά την απάντηση (feedback) της πλατφόρμας. Πιο συγκεκριμένα, καλείται η void συνάρτηση StoreCommands, δεχόμενη ως όρισμα την εντολή που θα καταγραφεί. (κώδικας C# 6-3) Ο πρώτος έλεγχος της συνάρτησης είναι η ύπαρξη ή όχι κάποιας εντολής προς καταγραφή. Ο σκοπός είναι να διαχειριστούμε την περίπτωση όπου ο χρήστης, ενώ έχει ενεργοποιήσει την καταγραφή, δεν έχει στείλει καμία εντολή στον μικροελεγκτή. Οπότε, η διαδικασία καταγραφής ακυρώνεται και δεν δημιουργείται κανένα αρχείο. Διαφορετικά, το αρχείο που θα είχε δημιουργηθεί θα ήταν κενό, οπότε και μη χρήσιμο. Έπειτα, με την εκτέλεση της πρώτης εντολής του χρήστη (που τοποθετείται στην πρώτη γραμμή στο αρχείο) γίνεται η αρχικοποίηση του χρόνου ώστε να υπολογιστεί σωστά η διάρκεια όλων των εντολών. Κατόπιν, προστίθεται η εντολή αυτή μέσα στην string μεταβλητή DataToFile, και έτσι αρχίζει να παίρνει μορφή το τελικό αρχείο καταγραφής που θα προκύψει. (κώδικας C# 6-3)

89 Κ Ε Φ Α Λ Α Ι Ο 6 Κ Α Τ Α Γ Ρ Α Φ Ή Κ Ι Ν Η Σ Ε Ω Ν Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 75 DateTime lasttime = new DateTime(); //Δήλωση αντικειμένου χρόνου της Τρέχουσας εντολής private void StoreCommands(string command) {//Setup the lasttime + command to Data. if (currentcmd!= null) { if (first) { lasttime = DateTime.Now; //Αρχικοποίηση χρόνου first = false; DataToFile += command; //Προσθήκη πρώτης εντολής else {//Προσθήκη Εντολής και Χρονικής Διάρκειας DataToFile += "-" + //Υπολογισμός χρονικής διαφοράς και μορφοποίηση γραμμής εντολής DateTime.Now.Subtract(lastTime).TotalMilliseconds.ToString() + "\n" + command;//αλλαγή γραμμής και προσθήκη επόμενης εντολής lasttime = DateTime.Now; //Επαναπροσδιορισμός χρόνου (για την επόμενη εντολή Κώδικας C# 6-3: Συνάρτηση Καταγραφής Εντολών Για όλες τις επόμενες εντολές, (κώδικας C# 6-3), ολοκληρώνεται η μορφοποίηση της γραμμής της εντολής με την προσθήκη της παύλας -, και τον υπολογισμό και προσθήκη του χρόνου της προηγούμενης εκτελεσθείσας εντολής (εφόσον τώρα βρισκόμαστε στην ε- πόμενη). Στην συνέχεια προστίθεται σε νέα γραμμή και η τρέχουσα νέα εντολή (αυτή που μόλις εκτελέστηκε). Δηλαδή, αρχικά τοποθετείται η εκτελεσθείσα εντολή Α. Ο χρόνος της εντολής αυτής τοποθετείται με την εκτέλεση της επόμενης εντολής Β (ώστε να υπολογιστεί και η πιθανή καθυστέρηση στην επικοινωνία). Στην συνέχεια, προστίθεται η εντολή Β σε νέα γραμμή. Η διαδικασία αυτή επαναλαμβάνεται μέχρι την ολοκλήρωση της καταγραφής. Ολοκλήρωση Καταγραφής και Αποθήκευση Αρχείου Η Καταγραφή των κινήσεων της ρομποτικής πλατφόρμας ολοκληρώνεται με δύο τρόπους. Ο πρώτος είναι, αυτός που περιγράφεται στο μήνυμα έναρξης της καταγραφής (Εικόνα 6-3), κατόπιν επιλογής του κουμπιού αποθήκευσης στην «μπάρα της εφαρμογής» (application bar). Ο δεύτερος τρόπος είναι με την επιλογή (TAP) πάνω στο κείμενο «CAPTURING» που εμφανίζεται στην πάνω δεξιά γωνία, μέσα στην σελίδα ελέγχου (MoveTestPage). Και με τους δύο αυτούς τρόπους, ενεργοποιείται η void συνάρτηση StopCapture() η οποία αναλαμβάνει την ολοκλήρωση της τελευταίας γραμμής εντολής του αρχείου και την

90 76 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ απενεργοποίηση των boolean «διακοπτών» που υποδεικνύουν την λειτουργία της καταγραφής. Έπειτα γίνεται αποθήκευση του string «DataToFile» μέσα στο σχετικό αρχείο και επανέρχεται το UI της σελίδας ελέγχου στην αρχική του κατάσταση.(κώδικας C# 6-4) private void StopCapture() {//Διακοπή Ολοκλήρωση διαδικασίας καταγραφής iscapture = false; currentcmd = null; //Διαδικασία Αποθήκευσης σε αρχείο if (DataToFile!= null) { //Ολοκλήρωση τελευταίας γραμμής εντολής DataToFile += "-" + DateTime.Now.Subtract(lastTime).TotalMilliseconds.ToString() + "\n"; //Αποθήκευση δεδομένων σε αρχείο string result = myfile.editfile(datatofile); if (result == "") //Περίπτωση Επιτυχημένης αποθήκευσης { //Μήνυμα για προβολή του αρχείου που δημιουργήθηκε // (ΟΚ = μετάβαση στην σελίδα FileViewPage.xaml if (MessageBox.Show("this Route has been successfully saved.\n Do you want to View the file?", "Saved Successsful", MessageBoxButton.OKCancel) == MessageBoxResult.OK) NavigationService.Navigate(new Uri("/Pages/FileViewPage.xaml?file=" + myfile.currentfilename + "&connected=" + (myappsettings.isarduinoconnected = IsArduino), UriKind.Relative)); else //Περίπτωση εμφάνισης προβλήματος MessageBox.Show(result); DataToFile = ""; //Καθαρισμός μεταβλητής δεδομένων καταγραφής //Επαναφορά του UI της σελίδας UImodificator(true, false); Κώδικας C# 6-4: Συνάρτηση Ολοκλήρωσης της Καταγραφής Τέλος, με την επιτυχημένη αποθήκευση του αρχείου καταγραφής, εμφανίζεται στον χρήστη η επιλογή να μεταβεί στην σελίδα FileViewPage για να δει και να διαχειριστεί το περιεχόμενο του αρχείου Συνέχιση καταγραφής Προσθήκη Όπως είδαμε και στην ενότητα 5.3, μετά την δημιουργία του αρχείου, μπορούμε να προβούμε σε ενέργειες προσπέλασης και επεξεργασίας του περιεχομένου του. Οπότε, σε αυτή την παράγραφο θα παρουσιαστεί η διαδικασία «προσθήκης νέων εντολών σε υπάρχον αρχείο».

91 Κ Ε Φ Α Λ Α Ι Ο 6 Κ Α Τ Α Γ Ρ Α Φ Ή Κ Ι Ν Η Σ Ε Ω Ν Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 77 Η δυνατότητα αυτή, δίδεται στον χρήστη μέσα στην σελίδα «FileViewPage». Η ενεργοποίησή της γίνεται με την επιλογή «Add», που βρίσκεται στο MessageBox με το περιεχόμενο του αρχείου. (εικόνα 6-4) Εικόνα 6-4: Εμφάνιση του περιεχομένου του αρχείου, μαζί με τις Επιλογές Επεξεργασίας του (canvas: MessageCanvas, Grid: MessageFilePanel) Το κουμπί «Add» έχει Tag = 22, και κατά την επιλογή του καλεί την συνάρτηση «mymessageoptions» η οποία ερμηνεύει όλες τις επιλογές (κουμπιά) που περιλαμβάνονται στο αντικείμενο «MessageCanvas» το οποίο και φαίνεται στην εικόνα 6-4. Η διαδικασία, λοιπόν, που ακολουθείται είναι η μεταφορά του χρήστη στην σελίδα MoveTestPage, με ήδη ενεργοποιημένη την διαδικασία καταγραφής. (κώδικας C# 6-5) Όπως περιγράψαμε προηγουμένως, η καταγραφή ενεργοποιείται μέσω της συνάρτησης «StartCapture» που βρίσκεται στην σελίδα MoveTestPage. Η συνάρτηση χρειάζεται ως ορίσματα το όνομα του αρχείου και μία μεταβλητή boolean. Στην προκειμένη περίπτωση, η boolean μεταβλητή είναι «true», επειδή πρόκειται για προσθήκη εντολών σε υπάρχον αρχείο. Για να περαστούν, λοιπόν, τα δεδομένα αυτά από την σελίδα FileViewPage (στην ο- ποία βρισκόμαστε), στην σελίδα MoveTestPage, όπου πραγματοποιείται ο έλεγχος της ρομποτικής πλατφόρμας, και η καταγραφή-προσθήκη των εντολών, χρησιμοποιείται η Navigate. (κώδικας C# 6-5) private void mymessageoptions(object sender, RoutedEventArgs e) { switch (((Button)sender).Tag.ToString())//.ToString()) { /* File Content viewer */ // Add Button case "22": //Χρήση της Navigate για αποστολή Δεδομένων στην σελίδα MoveTestPage NavigationService.Navigate( new Uri("/MoveTestPage.xaml?file=" + myfile.currentfilename, UriKind.Relative)); Κώδικας C# 6-5: Κουμπί Προσθήκης Νέων εντολών σε αρχείο

92 78 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Για την καλύτερη κατανόηση της παραπάνω εντολής, ακολουθεί το παρακάτω παράδειγμα. Χρησιμοποιώντας ως όνομα αρχείου το «Test.txt», η κλίση της Navigate γίνεται: Navigate("/MoveTestPage.xaml?file=Test.txt", UriKind.Relative); Με την μετάβαση στην σελίδα MoveTestPage, πραγματοποιείται η ερμηνεία του Navigation string, και ενεργοποιείται η καταγραφή. Αυτές οι λειτουργίες γίνονται μέσα στον event handler PhoneApplicationPage_Loaded Είναι σημαντικό να σημειωθεί πως οι διαδικασίες της καταγραφής και της προσθήκης νέων εντολών, είναι ενεργές και επιτρέπεται να εκτελεστούν μόνο στην περίπτωση ό- που υπάρχει ενεργή σύνδεση στο Internet και είμαστε συνδεδεμένοι με την ρομποτική πλατφόρμα. Σε διαφορετική περίπτωση, οι σχετικές επιλογές είναι απενεργοποιημένες (μη επιλεγόμενες). 6.3 Αναπαραγωγή εντολών Με την ολοκλήρωση της διαδικασίας καταγραφής, περνάμε στο επόμενο στάδιο των αυτοματισμών της εφαρμογής, την αναπαραγωγή των εντολών που είναι αποθηκεμένες σε αρχείο. Για την λειτουργία αυτή, είναι απαραίτητα τα βήματα: ανάγνωση, ερμηνεία και ε- κτέλεση των εντολών. Αρχικά, προϋπόθεση είναι η μεταφορά του χρήστη από την σελίδα FileViewPage όπου βρίσκεται η επιλογή της διαδικασίας Αναπα`ραγωγής, στην σελίδα MoveTestPage όπου θα υλοποιηθεί. Η επιλογή «Run», που εμφανίζεται μετά το άνοιγμα του αρχείου καταγραφής (εικόνα 6-4), είναι ο εκκινητής της όλης διαδικασίας. Οι εντολές του κουμπιού αυτού, μεταφέρουν τον χρήστη στην σελίδα MoveTestPage, και ενεργοποιούν την διαδικασία αναπαραγωγής (AutoMove). Ο τρόπος λειτουργίας του είναι ίδιος με το κουμπί «Add» που περιγράψαμε προηγουμένως (κώδικας C# 6-5) Έναρξη Αναπαραγωγής Με την μεταφορά, λοιπόν, στην MoveTestPage και την ενεργοποίηση της διαδικασίας αναπαραγωγής, εκτελείται η συνάρτηση void AutoMove(string filename), παίρνοντας ως όρισμα το όνομα του αρχείου που θα εκτελεστεί. Οι ενέργειές περιλαμβάνουν τη διαδικασία

93 Κ Ε Φ Α Λ Α Ι Ο 6 Α Ν Α Π Α Ρ Α Γ Ω Γ Η Α Π Ο Θ Η Κ Ε Υ Μ Ε Ν Ω Ν Ε Ν Τ Ο Λ Ω Ν 79 ανάγνωσης και ερμηνείας των δεδομένων, τροποποιεί το UI και καλεί την μέθοδο Select- Command. (κώδικας C# 6-6) Όπως δηλώνει και το όνομά της, η SelectCommand επιλέγει την εντολή που θα εκτελεστεί, και ξεκινάει τον μετρητή χρόνου για το χρονικό διάστημα που αντιστοιχεί στην επιλεγμένη εντολή. Με την λήξη του χρονομέτρου, εκτελείται η τρέχουσα εντολή, και καλείται ξανά η SelectCommand για την επιλογή της επόμενης εντολής. Αυτό επαναλαμβάνεται μέχρι την ολοκλήρωση της διαδικασίας αναπαραγωγής, ή μέχρι να την διακόψει ο χρήστης. private void AutoMove(string filename) { //Set the CurrentFileName myfile.currentfilename = filename; //Open the file if (myfile.openfile()) { //εντολές μετά το Επιτυχημένο Άνοιγμα αρχείου isautomove = true; //Ενεργοποίηση Αναπαραγωγής (automove) UImodificator(true,true); //UI modifications //Επιλογή εντολής και έναρξη διαδικασίας εκτέλεσης SelectCommand(curCMDpos=0); else //case Problem MessageBox.Show("Could NOT Open the file \n\n AutoMove will be Canceled"); Κώδικας C# 6-6: Συνάρτηση AutoMove - Έναρξη Αναπαραγωγής Κίνησης Ανάγνωση και Ερμηνεία Δεδομένων Η Ανάγνωση των δεδομένων και η Ερμηνεία τους γίνονται μέσα στην class FileManpulations, και βασίζονται σε κάποιες βασικές λειτουργίες. Πρωτίστως, γίνεται το άνοιγμα του αρχείου και το διάβασμα του περιεχομένου του. Όπως αναφέρθηκε, κάθε σειρά του αρχείου αντιστοιχεί σε μία εντολή, και αποτελείται από την εκτελούμενη εντολή και τον χρόνο εκτέλεσής της. Έτσι, το σύνολο των δεδομένων χωρίζεται σε σειρές. (κώδικας C# 6-7) public bool OpenFile() { //Άνοιγμα του αρχείου using (StreamReader sr = new StreamReader(myappStorage.OpenFile(filePath, System.IO.FileMode.Open))) { filecontent = sr.readtoend(); //Διάβασμα του αρχείου //Διαχωρισμός του περιεχομένου σε γράμμες FileLines = filecontent.split('\n'); Κώδικας C# 6-7: Εξαγωγή των εντολών από το Αρχείο Καταγραφής

94 80 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Έπειτα, στην κάθε σειρά, χωρίζεται η εντολή από το χρονικό διάστημα, και εκχωρούνται σε έναν πίνακα (σε διαφορετικές στήλες, η εντολή και ο χρόνος της). Ο πίνακας αυτός, ονομάζεται «Commands», είναι δύο διαστάσεων και περιλαμβάνει όλες τις εντολές (σειρά) και τις αντίστοιχες τιμές χρόνου (στήλη). (κώδικας C# 6-8) Για τον σωστό διαχωρισμό, το μέγεθος του πίνακα υπολογίζεται με βάση τις γραμμές που έχει ως: πλήθος_γραμμών 2. Ο τύπος αυτός προκύπτει διότι κάθε αρχείο τελειώνει με μία κενή γραμμή (χαρακτήρας "\r" και ""), η οποία και παραλείπεται. Οπότε, μέσα την for που θα προσπελάσει όλες τις γραμμές, το σύνολο των επαναλήψεων (size) θα είναι ίσο με Πλήθος_Γραμών_Πίνακα 1_Γραμμή. Υπολογίζοντας και την έναρξη της αρίθμησης από το «0», η τελική συνθήκη της for, γίνεται: <size. Έτσι, επιτυγχάνεται το ζητούμενο μέγεθος: Πλήθος_Γραμμών 2. public string[][] FileCommands() { if (Commands == null) {//Χρήση για Πρώτη φορά: Διαχωρίζει command - time int size = FileLines.Length - 1; //Υπολογισμός μεγέθους Commands = new string[size][]; //Δέσμευση Πίνακα Εντολών for (int i = 0; i < size; i++) { Commands[i] = FileLines[i].Split('-'); //Διαχωρισμός: Εντολή Χρόνος //Επιστροφή αποτελέσματος return Commands; Κώδικας C# 6-8: Διαχωρισμός Εντολών Χρόνου Επιλογή Εντολής και Εκτέλεση Εφόσον ολοκληρώθηκαν η εξαγωγή και ο διαχωρισμός των εντολών και των χρόνων τους, πλέον τον βασικό ρόλο αναλαμβάνουν τρείς μέθοδοι. Η συνάρτηση SelectCommand για την επιλογή της κάθε εντολής που θα εκτελεστεί και την ρύθμιση του χρόνου εκτέλεσής της, ο event handler ontimer_tick για τον έλεγχο του χρόνου εκτέλεσης της κάθε εντολής, και η συνάρτηση Communicate που είναι υπεύθυνη για την εκτέλεση της εντολής. Το μυστικό της λειτουργίας βρίσκεται στην συνεργασία της SelectCommand και του on- Timer_Tick που λειτουργούν σαν μία αναδρομική συνάρτηση η οποία επαναλαμβάνεται μέχρι το πέρας των εντολών ή την επιλογή του χρήστη για διακοπή. (κώδικας C# 6-9) Ξεκινώντας, με την SelectCommand, δεσμεύεται ο πίνακας που περιέχει όλα τα δεδομένα προς εκτέλεση, και η θέση της τρέχουσας εντολής στον πίνακα αυτόν, περνάει ως όρι-

95 Κ Ε Φ Α Λ Α Ι Ο 6 Α Ν Α Π Α Ρ Α Γ Ω Γ Η Α Π Ο Θ Η Κ Ε Υ Μ Ε Ν Ω Ν Ε Ν Τ Ο Λ Ω Ν 81 σμα. Κατόπιν, γίνεται ο έλεγχος για την περίπτωση που ολοκληρωθεί ή διακοπεί η αναπαραγωγή. Σε αυτή την περίπτωση γίνεται διακοπή του χρονομέτρου, και επαναφορά του UI στην αρχική του κατάσταση (πριν την έναρξη της AutoMove λειτουργίας). Διαφορετικά, (else), ακολουθούν οι εντολές προσδιορισμού της επόμενης προς εκτέλεση εντολής: myfile.commandfollow = filecommands [CMDposition][0]; και του χρόνου της. (κώδικας C# 6-9) Για την ρύθμιση του χρόνου, γίνεται πρώτα η μετατροπή των δεδομένων από string (που είναι μέσα στον πίνακα) σε Integer. Έπειτα, υπολογίζεται ο χρόνος εκτέλεσης της κάθε εντολής, σύμφωνα με τον καταγεγραμμένο χρόνο και την τιμή του χρονομέτρου που τρέχει: int duration = (int)(cmdtime - Timer.Interval.TotalMilliseconds); Αυτό γίνεται, για την περίπτωση που καθυστερήσει η εκτέλεση της προηγούμενης εντολής (λόγω προβλήματος στην επικοινωνία, ή λόγω άλλης λειτουργίας της ρομποτικής πλατφόρμας). Σε μία τέτοια περίπτωση, δεν πρέπει να αλλάξει ο χρόνος εκτέλεσης των ε- πόμενων εντολών, οπότε και αφαιρείται το χρονικό διάστημα καθυστέρησης. Όλες οι επόμενες εντολές εκτελούνται κανονικά. Λεπτομερέστερα, στην περίπτωση που υπάρξει καθυστέρηση, η επόμενη εντολή εκτελείται κανονικά, ενώ εάν υπάρξει συντόμευση του χρόνου, η διαφορά αυτή θα υπολογιστεί στον χρόνο της επόμενης εντολής: (duration>0)?duration: CMDtime Τέλος, γίνεται έναρξη του χρονομέτρου. (κώδικας C# 6-9) private void SelectCommand(int CMDposition) { string[][] filecommands = myfile.filecommands(); //Πίνακας Εντολών και Χρόνων if (CMDposition >= filecommands.length) {//case: END AutoMove Τερματισμός Αναπαραγωγής Timer.Stop(); //Διακοπή λειτουργίας χρονομέτρου isautomove = false; UImodificator(true, true); //Αλλαγή (επαναφορά) του UI MessageBox.Show("~~ End Replay ~~ "); else //case: Next Move Επόμενη εντολή για εκτέλεση { myfile.commandfollow = filecommands[cmdposition][0]; //Επιλογή εντολής //Ρύθμιση χρόνου εντολής σε miliseconds int CMDtime = int.parse(filecommands[cmdposition][1]); int duration = (int)(cmdtime - Timer.Interval.TotalMilliseconds); //Ρύθμιση Χρονομέτρου Timer.Interval = new TimeSpan(0, 0, 0, 0, ((duration>0)?duration:cmdtime) ); Timer.Start(); //Εκκίνηση Χρονομέτρου /* ************************************************************************ */

96 82 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ private void ontimer_tick(object sender, EventArgs e) { if(isarduino) Communicate(myFile.CommandFollow); else {//Simulation mode FeedBackScrlV.Opacity = 0; Timer.Stop(); ResponceTxtblk.Text = "Simulation Mode\n(Arduino Disconnected)\n\n Executing Command:\n" + myfile.commandfollow; SelectCommand(++curCMDpos); Κώδικας C# 6-9: SelectCommand και ontimer_tick: για την αυτόματη εκτέλεση των εντολών Το χρονόμετρο (αντικείμενο Timer), λειτουργεί στο υπόβαθρο-background της εφαρμογής. Αυτό επιτρέπει την ελεύθερη χρήση της εφαρμογής, μέχρι την στιγμή που θα εκτελεστεί ο event handler «ontimer_tick», ο οποίος και θα διακόψει την λειτουργία της εφαρμογής για να εκτελέσει τις εντολές του. Η εκτέλεσή του συμπίπτει με την ολοκλήρωση της λειτουργίας του χρονομέτρου, το οποίο έχει οριστεί στην SelectCommand. (κώδικας C# 6-9) Εάν είναι συνδεδεμένη η ρομποτική πλατφόρμα, τότε αποστέλλεται η εντολή για να εκτελεστεί από τον μικροελεγκτή (Communicate(myFile.CommandFollow);). Σε διαφορετική περίπτωση, όπου η πλατφόρμα δεν είναι συνδεδεμένη με την εφαρμογή, τρέχει ένας προσομοιωτής ο οποίος προσομοιώνει ολόκληρη την διαδικασία αυτόματης αναπαραγωγής των καταγεγραμμένων εντολών, σε πραγματικές συνθήκες, χωρίς όμως την αποστολή δεδομένων. Η επιλογή της επόμενης εντολής, μαζί με την διακοπή του χρονομέτρου από την εκτέλεση της προηγούμενης, γίνεται μέσα την συνάρτηση «ConnectionUImod». Η μέθοδος αυτή ελέγχει και ενημερώνει τις βασικές λειτουργίες της εφαρμογής, κατά την απάντηση (feedback) της ρομποτικής πλατφόρμας, μετά την ολοκλήρωση της εκτέλεσης της εντολής που δόθηκε. Αυτό σημαίνει ότι η μετάβαση στην επόμενη προς εκτέλεση εντολή, επιτρέπεται μόνο κατόπιν λήψης του σχετικού feedback από την ρομποτική πλατφόρμα. Στη συνέχεια γίνεται παύση του χρονομέτρου και επιλογή της επόμενης εντολής. Συνεπώς, σε περίπτωση που υπάρξει οποιαδήποτε καθυστέρηση, αυτή θα υπολογιστεί σύμφωνα με ότι αναφέρθηκε παραπάνω και οι επόμενες εντολές θα εκτελεστούν κανονικά.

97 Κ Ε Φ Α Λ Α Ι Ο 6 Α Ν Α Π Α Ρ Α Γ Ω Γ Η Α Π Ο Θ Η Κ Ε Υ Μ Ε Ν Ω Ν Ε Ν Τ Ο Λ Ω Ν Ολοκλήρωση Αναπαραγωγής - Διακοπή Ο έλεγχος για την ολοκλήρωση της διαδικασίας γίνεται μέσα στην SelectCommand (κώδικας C# 6-9). Η λειτουργία της αναπαραγωγής διακόπτεται όταν η θέση της επόμενης προς εκτέλεση εντολής υπερβεί το μέγεθος του πίνακα εντολών και χρόνων. Αυτό σημαίνει, ότι δεν υπάρχει επόμενη εντολή. Έτσι, ελέγχοντας την τρέχουσα θέση κάθε εντολής, ελέγχεται πλήρως η αναπαραγωγή και να ρυθμίζεται η δυνατότητα διακοπής της. Λόγω των διαφορετικών αρχείων καταγραφής που μπορεί να προκύψουν, δεν είναι γνωστό εξ αρχής, το πλήθος των εντολών (μέγεθος του πίνακα), που πρόκειται να αναπαραχθούν. Για τον τερματισμό, λοιπόν, της διαδικασίας αναπαραγωγής, τίθεται ως θέση επόμενης μεταβλητής η μέγιστη τιμή που μπορεί να πάρει ένας Integer. Έτσι, καλείται η συνάρτηση SelectCommand ως εξής: SelectCommand(int.MaxValue). 6.4 Demo Λειτουργία της Εφαρμογής Στα προηγούμενα κεφάλαια και ενότητες έγινε η πλήρης παρουσίαση όλων των λειτουργιών που υλοποιούνται από την εφαρμογή Arduino Vehicle, για τον άμεσο έλεγχο μίας ρομποτικής πλατφόρμας. Επιπλέον υλοποιήθηκαν και οι διαδικασίες αυτοματισμού που ε- μπλουτίζουν την εμπειρία χρήσης που παρέχεται, προσφέροντας μία ολοκληρωμένη πρόταση λύση στον τομέα του απομακρυσμένου ελέγχου. Όλες αυτές οι διαδικασίες, είναι ενεργές και διαθέσιμες προς χρήση μόνο στην περίπτωση που υπάρχει ενεργή σύνδεση μεταξύ της Windows Phone Smartphone συσκευής και της ρομποτικής πλατφόρμας. Γεννήθηκε, λοιπόν, η ιδέα να παρακαμφθούν αυτοί οι έλεγχοι συνδεσιμότητας, και να δοθεί στον χρήστη η δυνατότητα χρήσης της εφαρμογής σε κατάσταση demo. Συγκεκριμένα, προσφέρεται η δυνατότητα προσομοίωσης των λειτουργιών ελέγχου κίνησης της πλατφόρμας (παράγραφοι 4.3.2, και 4.3.4), και των λειτουργιών αναπαραγωγής (ενότητα 6.3). Η επιλογή του τρόπου λειτουργίας βρίσκεται μέσα στην σελίδα των ρυθμίσεων (SettingsPage). Η αρχική του κατάσταση (default) είναι μη επιλεγμένο (unchecked), οπότε και η εφαρμογή λειτουργεί με βάση όλους τους ελέγχους συνδεσιμότητας. Με την ενεργοποίηση της λειτουργίας demo, μέσα στην σελίδα MoveTestPage, γίνονται οι εξής ενέργειες: (κώδικας C# 6-10)

98 84 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ i. Εμφανίζεται το κείμενο «DEMO mode» με έντονο πορτοκαλί χρώμα, στην πάνω δεξιά γωνία της σελίδας ελέγχου (MoveTestPage). ii. Παρακάμπτονται οι έλεγχοι συνδεσιμότητας (κώδικας μέσα σε if) iii. Υπολογίζονται και προβάλλονται εικονικές τιμές στα δεδομένα απόκρισης της πλατφόρμας (feedback), σύμφωνα, πάντα, τις επιλογές του χρήστη. //* i)** Κατά την έναρξη της σελίδας (event handler PhoneApplicationPage_Loaded) ** */ if (ArduinoDemo = myappsettings.demomode) DemoTxtBlk.Opacity = 1; else DemoTxtBlk.Opacity = 0; /* ii)** Μέσα στην ManageFeedback ** */ if (!ArduinoDemo) /* Περίπτωση ΣΥΝΔΕΣΗΣ με ρομποτική πλατφόρμα Αποκωδικοποίηση του Feedback */ else MoveDataUpdater(speed, rotation); //Εκχώρηση εικονικών τιμών ταχύτητας/κατεύθυνσης //* iii)** Μέσα στην MoveDataUpdater ** */ if(!arduinodemo) { //Εμφάνιση εικονικών τιμών ταχύτητας / κατεύθυνσης DirectionBlock_FBspeed.Text = Speed.ToString(); DirectionBlock_LRspeed.Text = Math.Abs(Rotate).ToString(); Κώδικας C# 6-10: Εντολές για την Λειτουργία Προσομοίωσης (Demo mode) Θα πρέπει να διευκρινιστεί πως κατά την λειτουργία προσομοίωσης (demo mode), δεν αποστέλλεται καμία εντολή στην ρομποτική πλατφόρμα. Ταυτόχρονα, όμως, όλες οι λειτουργίες είναι ενεργές (προσομοίωση ελέγχου κίνησης, αναπαραγωγή εντολών, διαχείριση αρχείων, κτλ). Έτσι, η εφαρμογή μπορεί να αποτελέσει ένα αυτόνομο εργαλείο ελέγχου των λειτουργιών της, ενώ παράλληλα, μπορεί να λειτουργήσει και ως παιχνίδι, για την εισαγωγή νέων χρηστών στις τεχνολογίες και τις διαδικασίες του ασύρματου ελέγχου και του αυτοματισμού. 6.5 Ολοκλήρωση Λειτουργιών Αυτοματισμού Οι λειτουργίες αυτοματισμού που παρουσιάστηκαν και αναλύθηκαν στο κεφάλαιο αυτό μπορούν να περιγραφούν σε τέσσερεις βασικές ομάδες: Τις Ρυθμίσεις της εφαρμογής, την Καταγραφή, την Αναπαραγωγή των εντολών, και την Λειτουργία Προσομοίωσης. Οι ρυθμίσεις της εφαρμογής τοποθετούνται και επεξεργάζονται μέσα στην σελίδα SettingsPage. Παρ όλα αυτά, η πρόσβασή τους είναι δυνατή από ολόκληρη την εφαρμογή,

99 Κ Ε Φ Α Λ Α Ι Ο 6 Α Υ Τ Ο Μ Α Τ Ο Π Ο Ι Η Μ Ε Ν Ε Σ Δ Ι Α Δ Ι Κ Α Σ Ι Ε Σ 85 καθώς περιλαμβάνουν παραμέτρους που είναι ζωτικής σημασίας για την πληθώρα των λειτουργιών που εκτελούνται (π.χ url ρομποτικής πλατφόρμας, κα) Οι λειτουργίες της καταγραφής και της αναπαραγωγής εντολών υλοποιούνται προγραμματιστικά μέσα στην σελίδα ελέγχου της ρομποτικής πλατφόρμας, MoveTestPage. Αυτό προϋποθέτει την ύπαρξη επιπλέον βοηθητικών μεθόδων που θα μπορούν να ελέγξουν και να διαχειριστούν διάφορες καταστάσεις είτε κατά την επικοινωνία με τον μικροελεγκτή, είτε με την χρήση των πόρων της συσκευής (αρχεία/δεδομένα). Οι βοηθητικές αυτές μέθοδοι ρυθμίζουν επίσης και τις αλλαγές στο UI που γίνονται ανάλογα με την συνδεσιμότητα της συσκευής/εφαρμογής, ή/και ανάλογα με τις λειτουργίες που εκτελούνται. Τέλος, η λειτουργία προσομοίωσης (demo mode) δίνει την δυνατότητα διεξαγωγής ελέγχων στο σύνολο των διαδικασιών που υλοποιεί η εφαρμογή. Επιπλέον, προφέρει την ευκαιρία να χρησιμοποιηθεί η εφαρμογή ως παιχνίδι από χρήστες κάθε ηλικίας, προωθώντας ταυτόχρονα και τον εκπαιδευτικό χαρακτήρα που διαθέτει η εφαρμογή.

100 86 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ Ι Γ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Βιβλιογραφία Ρυθμίσεις Εφαρμογών Σελίδα Ρυθμίσεων (settings page) Σελίδα Ρυθμίσεων (settings page) Σελίδα Ρυθμίσεων (settings page) Σελίδα Ρυθμίσεων (settings page) Λειτουργικότητα Εφαρμογής 5. Orientation 6. Orientation 7. Operation & Programming Tips 8. Cross platform behavior 9. Cross platform behavior Cross platform behavior Cross platform behavior Input Control Absolute-Beginners/Silverlight-Input-Controls

101 ΚΕΦΑΛΑΙΟ 7 Μηνύματα Εφαρμογής 7.1 Αρχική Μέθοδος (Default Method) Στα Windows Phone Mango (OS 7.1) υπάρχει ένας τρόπος εμφάνισης μηνυμάτων, και αυτός είναι μέσω της συνάρτησης «MessageBox.Show», η οποία επιστρέφει την απάντηση του χρήστη ως boolean (true=ok, false=cancel). Η συνάρτηση αυτή (Show), με βάση τα ορίσματα που παίρνει, έχει δύο μορφές: i. Show(string): Εμφανίζεται ένα μήνυμα ενημέρωσης προς τον χρήστη. Η επιλογή που προσφέρεται σε αυτή την περίπτωση είναι μόνο η επιλογή «ok», και το κυρίως κείμενο του μηνύματος βρίσκεται μέσα στο string που παίρνει ως όρισμα η Show. ii. Show(string Body, string Title, MessageBoxButton button): Είναι η πλήρης μορφή της συνάρτησης εμφάνισης μηνύματος, που περιλαμβάνει όλες τις δυνατές επιλογές. Το string Body, περιλαμβάνει το κυρίως κείμενο του μηνύματος, το string Title περιέχει τον τίτλο που θα έχει το μήνυμα, και η MessageBoxButton περιλαμβάνει τις δυνατές επιλογές απάντησης του χρήστη. Οι επιλογές που δίδονται είναι δύο: a. Η περίπτωση «ok» (MessageBoxButton.OK), η οποία θα εμφανίσει μόνο το κουμπί «ok», όπως στην περίπτωση i. με την Show(string).

102 88 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ b. Η δεύτερη επιλογή απάντησης είναι με την εμφάνιση δύο επιλογών «ok» και «cancel» (MessageBoxButton.OKCancel). Σε αυτή την περίπτωση, η συνάρτηση Show χρησιμοποιείται ως όρισμα μέσα σε μία δομή ελέγχου. Έτσι, ελέγχεται η α- πάντηση του χρήστη, και γίνονται οι ανάλογες ενέργειες. 7.2 Παραμετροποιημένη μέθοδος (mymessage) Όπως είπαμε, η μέθοδος εμφάνισης μηνυμάτων στα WindowsPhone είναι συγκεκριμένη και μη παραμετροποιήσιμη, πέραν των δύο μορφών που διαθέτει. Για τον λόγο αυτό δημιουργήθηκε η συνάρτηση mymessage, ώστε να προστεθούν παραπάνω επιλογές για τον χρήστη (Option1, Option2, Option3), με τρόπο τέτοιο που να έχει και μία ευρύτερη χρήση σε διάφορα σημεία της εφαρμογής. <!-- Message Canvas --> <Canvas Name="MessageCanvas" Height="479" Width="800" Margin="0,-94,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Background="#E " Opacity="0" IsHitTestVisible="False"> <StackPanel Background="#FF212121" Width="800"> <!-- Τίτλος Μηνύματος --> <TextBlock Name="MesssageTitle" FontSize="30" FontWeight="SemiBold" Margin="10,10" FontStretch="UltraExpanded" /> <!-- Περιεχόμενο Μηνύματος --> <TextBlock Name="MesssageContent" Margin="30" FontSize="25" TextWrapping="Wrap" Style="{StaticResource PhoneTextNormalStyle"/> <Grid> <!-- Επιλογή 1 --> <Button Name="cnvOption1" Width="196" Height="124" Margin="20,0,0,0" VerticalAlignment="Top" Click="myMessageOptions" HorizontalAlignment="Left" /> <!-- Επιλογή 2 --> <Button Name="cnvOption2" Width="196" Height="124" Margin="294,0,306,0" VerticalAlignment="Top" Click="myMessageOptions" /> <!-- Επιλογή CANCEL --> <Button Name="cnvOption3" Content="CANCEL" Width="170" Height="89" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,29,51,0" Click="myMessageOptions" Tag="0" /> </Grid> </StackPanel> </Canvas> Κώδικας XAML 7-1: Message Canvas Page: MoveTestPage Συγκεκριμένα, μέσα στο xaml αρχείο δημιουργείται ένα αντικείμενο canvas, το οποίο περιέχει δύο textblocks και τρία buttons. Έτσι καλύπτεται ο τίτλος του μηνύματος και το κυρίως κείμενό του, ενώ με τα buttons, οι δυνατές επιλογές. Από τα κουμπιά, το ένα είναι το «cancel», το οποίο είναι στατικά ορισμένο, ενώ τα υπόλοιπα δύο αντιστοιχούν στις δύο επιλογές που θα έχει ο χρήστης (κώδικας XAML 7-1). Τα κουμπιά αυτά, ανάλογα με το κείμενο που εμφανίζεται, αλλά και με τις συνθήκες χρήσης της εφαρμογής (περίπτωση με

103 Κ Ε Φ Α Λ Α Ι Ο 7 Μ Η Ν Υ Μ Α Τ Α Ε Φ Α Ρ Μ Ο Γ Η Σ 89 συνδεδεμένο/αποσυνδεδεμένο μικροελεγκτή, κτλ) ρυθμίζονται δυναμικά από την C# τόσο στο περιεχόμενο των επιλογών τους, αλλά και στο εάν θα είναι ενεργά-επιλέξιμα στον χρήστη. Με βάση τις λειτουργίες που αναπτύχθηκαν παραπάνω, δημιουργήθηκαν δύο εκδοχές της συνάρτησης προβολής μηνυμάτων. Η «mymessage», με 5 ορίσματα, και η «mymessageshow» με 3ορίσματα mymessage Η συνάρτηση αυτή χρησιμοποιείται μέσα στην «MoveTestPage». Περιλαμβάνει τρείς (3) επιλογές για τον χρήστη και παίρνει πέντε ορίσματα ως εξής: (κώδικας C# 7-1) string Title: Τίτλος Μηνύματος, string Content: Περιεχόμενο Μηνύματος, string Option1: περιεχόμενο Επιλογής 1, string Option2: περιεχόμενο Επιλογής 2, int firstoptiontag: Ο αριθμός tag της Επιλογής 1, που χρησιμοποιείται για να μπορέσουμε να διαχειριστούμε την Απάντηση του χρήστη. Για την Εμφάνιση/Απόκρυψη του μηνύματος, καθώς αυτό είναι ένα αντικείμενο Canvas μέσα στην Σελίδα, χρησιμοποιείται το canvas property «Opacity», αντί για το «Visibility» (κώδικας C# 7-1). Έχει επιλεγεί αυτός ο τρόπος (opacity), διότι η χρήση του visibility, αναγκάζει το σύστημα να ξαναφορτώσει τα περιεχόμενα ολόκληρης της Σελίδας, με αποτέλεσμα να αυξάνεται η κατανάλωση των πόρων του συστήματος. Αντιθέτως, η opacity, απλώς κρύβει ή εμφανίζει το κάθε στοιχείο. Επειδή όμως με opacity="0" το αντικείμενο δεν φαίνεται, αλλά παραμένει ενεργό στην σελίδα, χρησιμοποιείται και η property IsHitTestVisible="False" ώστε να απενεργοποιηθεί - να μην μπορεί να επιλεγεί. O ορισμός του Tag μέσα στην mymessage (κώδικας C# 7-1) γίνεται δυναμικά, ανάλογα με την χρήση της συνάρτησης. Όλα τα κουμπιά του μηνύματος καλούν την ίδια συνάρτηση απάντησης (συνάρτηση «mymessageoptions»), η οποία διαχωρίζει τον κώδικα της κάθε επιλογής, με βάση το tag του κουμπιού της. (κώδικας C# 7-2) Η επιλογή «CANCEL», επειδή θεωρείται default option, είναι ορισμένη στατικά μέσα στην XAML, και έχει tag= 0. (κώδικας XAML 7-1)

104 90 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ private void mymessage(string Title, string Content, string Option1, string Option2, int firstoptiontag){ MesssageTitle.Text = Title; //Τίτλος MesssageContent.Text = Content; //Κείμενο Μηνύματος cnvoption1.content = Option1; //Κείμενο 1 ου κουμπιού - επιλογής cnvoption1.tag = firstoptiontag; //Ρύθμιση του ID TAG του 1 ου κουμπιού cnvoption2.content = Option2; // Κείμενο 2 ου κουμπιού - επιλογής cnvoption2.tag = ++firstoptiontag; // Ρύθμιση του ID TAG του 2 ου κουμπιού //Αλλαγές Προβολής (Visibility change) ApplicationBar.IsVisible = false; MessageCanvas.Opacity = 1; //Προβολή Μηνύματος MessageCanvas.IsHitTestVisible = true; Κώδικας C# 7-1: mymessage με 5 ορίσματα Διαχείριση Επιλογών Μηνύματος Για την διαχείριση και εκτέλεση των επιλογών του χρήστη, η mymessage συνδυάζεται με τον event handler «MyMessageOptions» (κώδικας C# 7-2), ο οποίος ερμηνεύει την απάντηση του χρήστη. Για να γίνει αυτό, ελέγχεται το tag από το κουμπί που επιλέχθηκε από τον χρήστη (εντολή: (Button)sender).Tag.ToString()), και με βάση αυτό εκτελούνται οι α- ντίστοιχες εντολές. private void mymessageoptions(object sender, RoutedEventArgs e) { MessageCanvas.Opacity = 0; //Απόκρυψη μηνύματος (Message Hide) MessageCanvas.IsHitTestVisible = false; switch (((Button)sender).Tag.ToString())//Επιλογή TAG του Κουμπιού Επιλογής { case "1"://Select Restart case "2"://Select Shutdown case "3"://Start Capture case "4": //Open Saved default://select CANCEL Κώδικας C# 7-2: mymessageoptions για την διαχείριση των επιλογών του χρήστη mymessageshow Ο δεύτερος, τρόπος προβολής ενός μηνύματος περιλαμβάνει και αυτός τρείς επιλογές για τον χρήστη, και χρησιμοποιείται μέσα στην σελίδα «FileViewPage». Το ιδιαίτερο αυτής της μεθόδου είναι η ολοκλήρωση διαφορετικών εργασιών από τον χρήστη μέσα στο ίδιο canvas object του μηνύματος. (κώδικας XAML 7-2)

105 Κ Ε Φ Α Λ Α Ι Ο 7 Μ Η Ν Υ Μ Α Τ Α Ε Φ Α Ρ Μ Ο Γ Η Σ 91 <Canvas Name="MessageCanvas" Height="428" HorizontalAlignment="Left" Margin="4,34,0,0" VerticalAlignment="Top" Width="790" Background="Black" Grid.RowSpan="2" Visibility="Collapsed"> <! > <!-- ΤΜΗΜΑ 1 - Μήνυμα για: File Modification Options --> <StackPanel Name="MessageOptionPanel" Background="#FF212121" Width="800" Opacity="0" IsHitTestVisible="False" Canvas.Top="60" Canvas.Left="0"> <!-- Προβολή Κειμένου του μηνύματος και του Texbox για μετονομασία --> <TextBox Name="newFileName" Width="700" KeyUp="EnterKeyPressed" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="20,0,0,0" Visibility="Collapsed" /> <Grid Margin="0,30,0,0"> <!-- Κουμπιά Επιλογών του χρήστη --> <Button Name="MsgOption3" Content="CANCEL" Width="170" Height="89" Click="myMessageOptions" Tag="0" VerticalAlignment="Top" HorizontalAlignment="Right" Margin="0,29,51,0" Background="Black"/> </Grid> </StackPanel> <! > <!-- ΤΜΗΜΑ 2 Μήνυμα για: file Content --> <Grid x:name="messagefilepanel" Canvas.Top="0" Canvas.Left="0" Opacity="0" IsHitTestVisible="False"> <StackPanel Name="MessLeft" Grid.Column="0"> <!-- Προβολή Κειμένου του μηνύματος και του Περιεχομένου του Αρχείου --> <ScrollViewer Name="ScrollingFileText" Margin="0,5,0,0" Height="350" Grid.Column="0" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Hidden" UseLayoutRounding="False" /> </StackPanel> <Grid Name="MessRight" Grid.Column="1" Height="426" VerticalAlignment="Top"> <!-- Κουμπιά Επιλογών του χρήστη --> </Grid> </Grid> <! > <!-- Τίτλος του μηνύματος. Φαίνεται ανεξάρτητα από την επιλογή προβολής --> <TextBlock Name="MesssageTitle" Text="Message Title" Margin="10,0,0,0" Width="400" TextWrapping="Wrap" FontSize="40" Canvas.Top="0" /> </Canvas> Κώδικας XAML 7-2: Message Canvas Page: FileViewPage Πιο συγκεκριμένα, στο παραπάνω τμήμα κώδικα (κώδικας XAML 7-2) το message canvas αποτελείται από δύο containers. Ένα stackpanel «MessageOptionPanel» το οποίο περιέχει τις επιλογές για Μετονομασία και Διαγραφή του Αρχείου Καταγραφής, και ένα grid «MessageFile-Panel» που εμφανίζει το περιεχόμενο του αρχείου μαζί με τις σχετικές επιλογές. Με αυτό τον τρόπο, κατά την εμφάνιση του μηνύματος επιλέγουμε ποια από τις δύο αυτές διαδικασίες θέλουμε να εκτελέσουμε, και εμφανίζουμε μόνο αυτή. Η συνάρτηση παίρνει τρία Ορίσματα: (κώδικας C# 7-3) string title: Τίτλος του μηνύματος, string message: Κείμενο του μηνύματος, bool fileoptions: Boolean μεταβλητή που καθορίζει την λειτουργία του μηνύματος: true = εμφάνιση των επιλογών για μετονομασία / διαγραφή.

106 92 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ private void mymessageshow(string title, string message, bool fileoptions) { MesssageTitle.Text = title; //Τίτλος Μηνύματος - Set the Message Title //Επιλογή Τρόπου Προβολής if(fileoptions) {//ΠΡΟΒΟΛΗ Επιλογών αρχείου (Μετονομασία/Διαγραφή) MsgContent.Text = message; //Κείμενο μηνύματος - Set Message Body //Ρυθμίσεις Προβολής: Show Option Panel & Hide FileContent Panel else {//ΠΡΟΒΟΛΗ περιεχομένου Αρχείου (file Content) MesssageTxtblk.Text = message; // Κείμενο μηνύματος - Set Message Body //VIEW file Content ScrollingFileText.Content = FileToTextblk(); //Ρυθμίσεις Προβολής: Hide Option Panel & Show FileContent Panel //Προβολή μηνύματος MessageCanvas.Visibility = System.Windows.Visibility.Visible; Κώδικας C# 7-3: mymessageshow με 3 ορίσματα Με την επιλογή συγκεκριμένου αρχείου εμφανίζεται το αντικείμενο MessageCanvas. Το άγγιγμα του χρήστη, είναι αυτό που καθορίζει και την λειτουργία του μηνύματος, όπως περιγράφεται παρακάτω. Με απλό άγγιγμα στο όνομα του αρχείου στην λίστα των αποθηκευμένων καταγραφών, εμφανίζεται το μήνυμα με το περιεχόμενο του αρχείου (ορατό grid). Έτσι ο χρήστης βλέπει τα περιεχόμενα του αρχείου και τις δυνατές επιλογές που έχει. (κώδικας C# 7-3). Με παρατεταμένο άγγιγμα στο όνομα του αρχείου στην λίστα των αποθηκευμένων καταγραφών ή με την επιλογή του κουμπιού «Modify» (μέσα στην προβολή περιεχομένων του αρχείου), εμφανίζεται το μήνυμα επιλογών τροποποίησης αρχείου (ορατό stackpanel) (κώδικας C# 7-3). Στο μήνυμα επιλογών τροποποίησης του αρχείου, η επιλογή «Rename», ενεργοποιεί την εμφάνιση, μέσα στο ίδιο μήνυμα, ενός textbox που περιέχει το όνομα του αρχείου προς μετονομασία. Εναλλακτικά, με την επιλογή «Delete», διαγράφεται το συγκεκριμένο αρχείο. Διαχείριση Επιλογών Μηνύματος Για την ερμηνεία των επιλογών του χρήστη στο μήνυμα, χρησιμοποιούνται δύο, διαθέσιμες από την C#, τεχνικές. Η πρώτη αναφέρεται στη χρήση μίας συνάρτησης event handler για όλες τις επιλογές, όπως και στην περίπτωση της μεθόδου mymessage. Εκεί, αναγνωρίζεται η κάθε επιλογή - κουμπί με βάση το tag του, και εκτελούνται οι ανάλογες εντολές. Αυτή η τεχνική εφαρμόζεται στην πλειοψηφία των επιλογών.

107 Κ Ε Φ Α Λ Α Ι Ο 7 Μ Η Ν Υ Μ Α Τ Α Ε Φ Α Ρ Μ Ο Γ Η Σ 93 Η δεύτερη τεχνική, προϋποθέτει το κάθε κουμπί να έχει την δική του, μοναδική, συνάρτηση, και δεν διαφέρει σε τίποτα από τον κλασικό τρόπο προγραμματισμού κουμπιών μέσα σε μία σελίδα. Η εφαρμογή αυτής της τεχνικής γίνεται στο κουμπί «Modify» μέσα στην προβολή περιεχομένων του αρχείου. 7.3 Μηνύματα Σφαλμάτων Η λειτουργία της εφαρμογής μπορεί να γίνει κάτω από διάφορες συνθήκες, σε αμέτρητες περιπτώσεις και με πολλαπλές χρήσεις. Θα πρέπει, λοιπόν, να υπάρχει και ένας μηχανισμός που να προστατεύει τον χρήστη από οποιασδήποτε κατάσταση που μπορεί να διακόψει την εύρυθμη λειτουργία της εφαρμογής ή της συσκευής. Χρησιμοποιούνται πολλές τεχνικές για την διαχείριση τέτοιων καταστάσεων (βλ. κεφάλαιο. 8). Δυστυχώς, όμως, δεν είναι εφικτό να προβλεφθούν και να προληφθούν όλα τα πιθανά σφάλματα που δύναται να εμφανιστούν. Για τον λόγο αυτόν, δημιουργήθηκε μέσα στην εφαρμογή μία σελίδα, η ErrorPage. Η σελίδα αυτή έχει τον ρόλο μηνύματος, και περιλαμβάνει την περιγραφή οποιουδήποτε προβλήματος δεν έχει προβλεφθεί. Οι εντολές που διαχειρίζονται το μήνυμα σφάλματος και οδηγούν σε αυτή την σελίδα, βρίσκονται μέσα στο κεντρικό αρχείο της εφαρμογής «App.xaml.cs», και εκτελούνται από τον event handler Application_UnhandledException. // Code to execute on Unhandled Exceptions private void Application_UnhandledException (object sender, ApplicationUnhandledExceptionEventArgs e) { if (System.Diagnostics.Debugger.IsAttached) { //Εμφανίστηκε unhandled exception. Διακόπτονται οι λειτουργίες System.Diagnostics.Debugger.Break(); //Περίπτωση ύπαρξης σφάλματος e.handled = true; ErrorPage.ExceptionCase = e.exceptionobject; //Τοποθέτηση σφάλματος στην ErrorPage //Μεταφορά στην ErrorPage (RootVisual as Microsoft.Phone.Controls.PhoneApplicationFrame).Source = new Uri("/ErrorPage.xaml", UriKind.Relative); Κώδικας C# 7-4: Κώδικας για Unhandled Exceptions Όπως φαίνεται στον κώδικα C# 7-4, το μήνυμα μεταφέρεται και τοποθετείται μέσα σε ένα textbox το οποίο βρίσκεται μέσα σε αντικείμενο scrollviewer της ErrorPage σελίδας. Κατόπιν, ο χρήστης μεταφέρεται στην σελίδα αυτή, ενώ παράλληλα διακόπτονται όλες οι λειτουργίες της εφαρμογής.

108 94 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Η διαδικασία αυτή είναι λίγο-πολύ αυτοματοποιημένη, και ενδείκνυται να χρησιμοποιείται σε κάθε εφαρμογή που αναπτύσσεται. Βιβλιογραφία Απεικόνιση Περιεχομένου Αρχείων Large Text 1. Message Box Large text files Wrap Panel 4. Wrap Panel 5. Wrap Panel & Listbox

109 ΚΕΦΑΛΑΙΟ 8 Διαχείριση User Interface Το User Interface της εφαρμογής δεν είναι τίποτα άλλο από τις Σελίδες που αποτελούν την Arduino Vehicle. Κάθε σελίδα περιλαμβάνει συγκεκριμένα αντικείμενα τα οποία είτε αναδιατάσσονται αλλάζουν θέση στην σελίδα ανάλογα με τον Προσανατολισμό της συσκευής, είτε απενεργοποιούνται ή ενεργοποιούνται ανάλογα με τις συγκεκριμένες λειτουργίες ή τις συνθήκες συνδεσιμότητας της εφαρμογής. Οι αλλαγές αυτές υλοποιούνται με τρείς τρόπους. Ο πρώτος είναι κατά την Εκκίνηση (loading) της σελίδας, μέσα στον event handler pagename_loaded. Ο δεύτερος τρόπος είναι μέσα σε event handlers που ενεργοποιούνται από διάφορες αλλαγές του συστήματος (αλλαγή orientation, connection IP, κτλ). Τέλος, ο τρίτος τρόπος είναι μέσω συναρτήσεων/μεθόδων στις οποίες, γίνεται έλεγχος των σχετικών συνθηκών και κατόπιν ο προσδιορισμός και η εκτέλεση των αλλαγών που θα γίνουν. Στην Arduino Vehicle, χρησιμοποιούνται και οι τρεις προαναφερθέντες τρόποι, τόσο αυτόνομα (ξεχωριστά ο καθένας) όσο και σε συνδυασμό (event handler μαζί με συναρτήσεις), ανάλογα με τις ανάγκες κάθε περίπτωσης.

110 96 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 8.1 Επιλογές Προσανατολισμού συσκευής Ο προσανατολισμός (Orientation) της συσκευής προσδιορίζει τον τρόπο που κρατάει ο χρήστης την συσκευή στα χέρια του. Η εφαρμογή Arduino Vehicle, υποστηρίζει όλες τις επιλογές προσανατολισμού μίας συσκευής Windows Phone, με τις δύο κύριες να είναι: κατακόρυφα (Portrait) και οριζόντια (Landscape). Έτσι, ανάλογα με την θέση της συσκευής, αναδιατάσσεται το περιεχόμενο της σελίδας ώστε να είναι άμεσα προσβάσιμο και οπτικά ορθό (σύμφωνα με τις οδηγίες της Microsoft). Στην Arduino Vehicle, η ενεργοποίηση των επιλογών προσανατολισμού δεν γίνεται σε όλες τις σελίδες. Επιτρέπεται στην κύρια σελίδα της εφαρμογής (MainPage) και στην σελίδα των ρυθμίσεων (SettingsPage). Αντιθέτως, στις υπόλοιπες σελίδες της εφαρμογής είναι απενεργοποιημένη και οι σελίδες είναι σχεδιασμένες για οριζόντιο κράτημα (landscape). Ο λόγος είναι, ότι με την οριζόντια θέση της εφαρμογής, η λειτουργία της είναι πιο προσιτή και εύκολη για τον χρήστη, καθώς το περιεχόμενο των σελίδων καταλαμβάνει τον βέλτιστο χώρο, με τα αντικείμενα να βρίσκονται στις επιθυμητές θέσεις άμεσης πρόσβασης. Η αναδιάταξη των αντικειμένων σε μία σελίδα, αναλόγως της θέσης προσανατολισμού της συσκευής, υλοποιείται σε τρία στάδια. Στάδιο Πρώτο Αρχικά, πρέπει να οριστούν οι υποστηριζόμενες θέσης της συσκευής. Αυτό γίνεται μέσα στον XAML κώδικα της σελίδας, στο τμήμα των αρχικοποιήσεων: //Επιλογή Υποστηριζόμενων Orientations - Αρχικοποίηση θέσης-προβολής της σελίδας SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" Στάδιο Δεύτερο Για να μπορέσει η εφαρμογή να προσαρμόσει τα αντικείμενα της σελίδας, σύμφωνα με τον προσανατολισμό της συσκευής, θα πρέπει όλα τα αντικείμενα να βρίσκονται ομαδοποιημένα. Έτσι, ορίζοντας τις θέσεις κάθε ομάδας, τοποθετούνται και τα αντικείμενα στα επιθυμητά σημεία. Δύο βασικά containers, το grid και το stackpanel επιτρέπουν την ομαδοποίηση των αντικειμένων. (κώδικας XAML 8-1)

111 Κ Ε Φ Α Λ Α Ι Ο 8 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η U S E R I N T E R F A C E 97 <Grid x:name="contentsettings"> <!-- Βασικό Container Περιεχομένου Σελίδας --> <Grid.ColumnDefinitions> <! Προσδιορισμός Στηλών --> <ColumnDefinition Width="360"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <! Προσδιορισμός Γραμμών --> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- Αντικείμενα ΑΡΙΣΤΕΡΗΣ πλευράς (Οριζόντια θέση) θα πάνε ΠΑΝΩ (στην Κάθετη Θέση) --> <Grid Name="LeftSide" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="0"> //Περιεχόμενα του Grid της Αριστερής / Πάνω θέσης της Σελίδας </Grid> <!-- Αντικείμενα ΔΕΞΙΑΣ πλευράς (Οριζόντια θέση) θα πάνε ΚΑΤΩ (στην Κάθετη Θέση) --> <StackPanel Name="RightSide" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1"> //Περιεχόμενα του Stack Panel της Δεξιάς / Κάτω θέσης της Σελίδας </StackPanel> </Grid> Κώδικας XAML 8-1: Χρήση Grid και StackPanel στην XAML Το Grid, δεν είναι τίποτα άλλο από ένα πλέγμα, στο οποίο καθορίζουμε το πλήθος και τις διαστάσεις των γραμμών και των στηλών, σύμφωνα με τις ανάγκες μας. Οπότε, τα αντικείμενα ομαδοποιούνται ανά θέση στο Grid, η οποία θέση προσδιορίζεται από τον αριθμό της γραμμής και της στήλης. Το StackPanel, από την άλλη πλευρά, είναι μία δομή όπου το κάθε αντικείμενο που περιέχει τοποθετείται μετά το προηγούμενό του, με ιεραρχικό τρόπο. Ανάλογα με το είδος του StackPanel γίνεται και η τοποθέτηση των αντικειμένων. Εάν είναι οριζόντιο (orientation=horizontal) τότε τα περιεχόμενα τοποθετούνται το ένα δίπλα στο άλλο, και όταν συμπληρωθεί η μία γραμμή, συνεχίζεται η τοποθέτηση στην επόμενη. Εάν είναι κάθετο (orientation=vertical) τότε τα περιεχόμενα τοποθετούνται σε μία στήλη, κάθετα, το ένα κάτω από το άλλο. (κώδικας XAML 8-1) Στάδιο Τρίτο Το τρίτο στάδιο της διαδικασίας διαχείρισης των αλλαγών θέσης της WP συσκευής, είναι και το κυριότερο. Τον βασικό ρόλο αναλαμβάνει ο event handler: private void Phone- ApplicationPage_OrientationChanged(object sender, OrientationChanged-EventArgs e), ο οποίος ερμηνεύει τις αλλαγές στην θέση της συσκευής (αλλαγές orientation), και εκτελεί τις εντολές αναδιάταξης του περιεχομένου.

112 98 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Το περιεχόμενο του event handler αυτού είναι χωρισμένο σε δύο βασικά μέρη, το καθένα εκ των οποίων, περιέχει τις αλλαγές που πρέπει να γίνουν στην συγκεκριμένη θέση προσανατολισμού. (κώδικας C# 8-1) private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) { if ((Orientation & PageOrientation.Landscape) == PageOrientation.Landscape) {/ * LANDSCAPE mode */ Grid.SetColumn(MoveButton, 0); //Αλλαγή Στήλης (Grid.Column) Grid.SetRow(RightSide, 0); //Αλλαγή Γραμμής (Grid.Row) WebScrlV.IsHitTestVisible = true; //Ενεργοποίηση αντικειμένου (make it clickable) WebPageButton.Margin = new Thickness(20, 0, 20, 0); //Αλλαγή Margin else /* PORTRAIT mode */ { //Κώδικας για Portait mode Κώδικας C# 8-1: Παράδειγμα εντολών μορφοποίησης σύμφωνα με Orientation Μέσα σε μία δομή ελέγχου if ελέγχεται η θέση του Προσανατολισμού της συσκευής. Στο παραπάνω κομμάτι κώδικα, ελέγχεται εάν η θέση είναι οριζόντια (PageOrientation.Landscape), διαφορετικά (else) η θέση της συσκευής θα είναι κάθετη (PageOrientation.Portrait). Μέσα σε κάθε βρόγχο της if καθορίζεται η θέση των αντικειμένων (ή/και containers) της σελίδας. 8.2 Συνάρτηση UImodificator Ως κύρια σελίδα ελέγχου της ρομποτικής πλατφόρμας, η MoveTestPage περιλαμβάνει το πλήθος των λειτουργιών της εφαρμογής. Για αυτό τον λόγο κρίθηκε απαραίτητη η δημιουργία μίας συνάρτησης που θα περιλαμβάνει όλες τις δυνατές αλλαγές του UI, και θα καλείται σε όσες περιπτώσεις κρίνεται απαραίτητο. Η συνάρτηση αυτή είναι η «UImodificator» και παίζει καθοριστικό ρόλο στην εμπειρία χρήσης που παρέχει η εφαρμογή. Η συνάρτηση είναι void και παίρνει δύο boolean ορίσματα. Το «mode», που αναφέρεται στην ομάδα των λειτουργιών που την καλούν, και το «automation» που προσδιορίζει τα συγκεκριμένα χαρακτηριστικά τα οποία και θα καθορίσουν τις αλλαγές του UI.

113 Κ Ε Φ Α Λ Α Ι Ο 8 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η U S E R I N T E R F A C E 99 Στον παρακάτω πίνακα 8-1, φαίνονται τα ορίσματα της συνάρτησης, οι ομάδες λειτουργιών που καθορίζουν και τα συγκεκριμένα χαρακτηριστικά στα οποία αναφέρονται. Πίνακας 8-1: UImodificator - Ορίσματα κλίσης της συνάρτησης mode automation Περιγραφή Ενεργειών true false Ρυθμίσεις για Λειτουργίες Αυτοματισμού true Τροποποιήσεις για Καταγραφή Εντολών (Capture) false Τροποποιήσεις για Αναπαραγωγή Εντολών (Automove) Ρυθμίσεις για Συνδεσιμότητα Windows Phone Συσκευής true Τροποποιήσεις για κατάσταση Συνδεδεμένο false Τροποποιήσεις για κατάσταση Απόσυνδεδεμένο Η κωδικοποίησή του παρουσιάζεται στη δομή της συνάρτησης UImodificator που α- κολουθεί. (κώδικας C# 8-2) private void UImodificator(bool mode, bool automation) { if (mode) //Περίπτωση Λειτουργιών Αυτοματισμού { if (automation) { //Περίπτωση: AutoMove else { //Περίπτωση: Capture else //Περίπτωση επιλογών Συνδεσιμότητας { if (automation) { //Περίπτωση: connected: true=isarduino else { //Περίπτωση NOT connected: false=no Network Κώδικας C# 8-2: Δομή της μεθόδου UImodificatior Η χρήση λειτουργία της UImodificator θα παρουσιαστεί αναλυτικότερα στις ενότητες που ακολουθούν. Για την ακρίβεια, στην παράγραφο Σελίδα Ελέγχου αναπτύσσεται η λειτουργία της για τον έλεγχο της συνδεσιμότητας, ενώ στην ενότητα Λειτουργίες Αυτοματισμού, εφαρμόζεται στις διαδικασίες καταγραφής και αναπαραγωγής εντολών.

114 100 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 8.3 Διαχείριση Καταστάσεων Συνδεσιμότητας Οι πιθανές καταστάσεις σύνδεσης με το Internet μίας συσκευής Windows Phone είναι δύο. Κατάσταση αποσυνδεδεμένο και κατάσταση συνδεδεμένο, η οποία αναλύεται με βάση τον τρόπο σύνδεσης σε «WiFi» και «Data Connection». Πρωταρχικής σημασία, για την καλή λειτουργία της εφαρμογής είναι, σε πρώτο επίπεδο, η ύπαρξη σύνδεσης με το Internet, και σε δεύτερο επίπεδο, με την Ρομποτική Πλατφόρμα. Βαδίζοντας προς αυτή την κατεύθυνση, εκτός από τους ελέγχους συνδεσιμότητας που υλοποιούνται (ενότητα 4.2), εκτελείται παράλληλα και ένα σύνολο εντολών για την μεταβολή του UI βάση της τρέχουσας κατάστασης σύνδεσης. Έτσι, υπάρχει ένας συνεχής διάλογος με τον χρήστη ώστε πάντα να είναι ενήμερος, και ταυτόχρονα να είναι ενεργοποιημένες οι επιτρεπτές επιλογές. Διάφορες τεχνικές τροποποίησης της εμφάνισης της εφαρμογής, ανάλογα με την συνδεσιμότητα, εφαρμόζονται σε ολόκληρη την εφαρμογής. Αρχίζοντας από την κεντρική σελίδα της εφαρμογής (MainPage) και μεταβαίνοντας τόσο στις δύο σελίδες ελέγχου (ControlWebBrowser/Default και MoveTestPage), όσο και στην σελίδα προβολής αρχείων (FileViewPage) Κεντρική Σελίδα της Εφαρμογής (MainPage) Σε αυτήν τη σελίδα οι μεταβολές γίνονται με βάση την ύπαρξη σύνδεσης στο Internet, και όχι για τις περιπτώσεις σύνδεσης με την ρομποτική πλατφόρμα (καθώς τέτοιες ενέργειες σύνδεσης εκτελούνται μόνο στις σχετικές σελίδες ελέγχου). Όπως έχει αναφερθεί, η μεταβλητή Integer «nettype», περιέχει την πληροφορία για την κατάσταση σύνδεσης της συσκευής. Η τιμή της είναι ίση με μηδέν (nettype = 0) όταν δεν υπάρχει ενεργή σύνδεση -κατάσταση αποσυνδεδεμένο. Ο κώδικας που ακολουθεί περιλαμβάνει τις εντολές μεταβολής του UI και αποτελεί το τελικό τμήμα της συνάρτησης GoConnectionSettings. (κώδικας C# 8-3) Τα αντικείμενα που τροποποιούνται στην παρακάτω συνάρτηση, βρίσκονται στην Application Bar της σελίδας. Συγκεκριμένα, πρωτίστως, επηρεάζεται το Κουμπί «View Thesis» που είναι υπεύθυνο για την σύνδεση με τον server που περιέχει την παρούσα εργασία. Τέλος,

115 Κ Ε Φ Α Λ Α Ι Ο 8 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η U S E R I N T E R F A C E 101 απενεργοποιείται / ενεργοποιείται ολόκληρο το Menu επιλογών, το οποίο περιέχει τις επιλογές για τα Social Media αλλά και για τις δικτυακές γνωσιακές πηγές του μικροελεγκτή Arduino. var appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[0]; //Επιλογή Κουμπιού if (nettype == 0) { //Κατάσταση: Αποσυνδεδεμένο Απενεργοποίηση επιλογών appbtn.isenabled = false; //Απενεργοποίηση Κουμπιού «Προβολή Thesis» ApplicationBar.IsMenuEnabled = false; //Απενεργοποίηση του Menu else {//Ενεργοποίηση Επιλογών appbtn.isenabled = true; ApplicationBar.IsMenuEnabled = true; Κώδικας C# 8-3: Τμήμα της μεθόδου GoConnectionSettings Σελίδα Web Browser Control Οι αλλαγές που γίνονται σε αυτή την σελίδα επηρεάζουν την πληθώρα των διαθέσιμων επιλογών. Λεπτομερέστερα, στην περίπτωση «μη συνδεδεμένο», απενεργοποιείται ο- λόκληρο το βασικό grid περιεχομένων της σελίδας (Content Panel). Έπειτα, εμφανίζεται ένα textblock που ενημερώνει τον χρήστη για την κατάσταση «Αποσυνδεδεμένο», όπου βρίσκεται η συσκευή του, καθοδηγώντας τον, παράλληλα, στις απαραίτητες ενέργειες για να συνδεθεί στο δίκτυο. (κώδικας C# 8-4) if (NavigationContext.QueryString.TryGetValue("net", out isnetwork) && isnetwork == "0") {//Case NO network connection (isnetwork == "0") ContentPanel.IsHitTestVisible = false; //Απενεργοποίηση επιλογών σύνδεσης NetStatusBLK.Visibility = System.Windows.Visibility.Visible; //Εμφάνιση μηνύματος else {//Κατάσταση ΣΥΝΔΕΔΕΜΕΝΟ. Ενεργοποίηση Όλων των επιλογών και Απόκρυψη του μηνύματος ContentPanel.IsHitTestVisible = true; NetStatusBLK.Visibility = System.Windows.Visibility.Collapsed; Κώδικας C# 8-4: Κώδικας τροποποιήσεων UI με βάση την συνδεσιμότητα. Αντίστοιχες ενέργειες γίνονται και για την περίπτωση που η κατάσταση σύνδεσης της εφαρμογής αλλάξει από «Αποσυνδεδεμένο» σε «Συνδεδεμένο». Όλες οι παραπάνω ενέργειες εκτελούνται μέσα στον event handler «Default_Loaded», κατά την έναρξη της σελίδας (loading).

116 102 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Σελίδα Ελέγχου (MoveTestPage) Σε αυτήν την σελίδα, η συνάρτηση UImodificator, είναι υπεύθυνη για όλες τις αλλαγές που γίνονται στο User Interface. Παρακάτω θα εξεταστούν τις εντολές τροποποίησης που περιέχει η συνάρτηση, με βάση την κατάσταση σύνδεσης της εφαρμογής. Για την είσοδο στις εντολές αυτές, πρέπει να γίνει η κλίση της συνάρτησης με mode = false. (πίνακας 8-1) Οι τροποποιήσεις που γίνονται στην σελίδα, περιλαμβάνουν αλλαγές στο κουμπί σύνδεσης, στην application bar και στην δυνατότητα επιλογής των κουμπιών ελέγχου της πλατφόρμας. Πιο συγκεκριμένα, στην περίπτωση που η εφαρμογή είναι συνδεδεμένη, τότε γίνεται κλίση της UImodificator με ορίσματα mode=false, automation=true. Όπως φαίνεται και στον κώδικας C# 8-5 που ακολουθεί, το κουμπί σύνδεσης (ConnectionButton) γίνεται πράσινο και το content property του, παίρνει την τιμή «Connected». Κατόπιν γίνεται έλεγχος για την περίπτωση που δε εκτελείται κάποια λειτουργία αυτοματισμού (καταγραφή ή αναπαραγωγή εντολών) και ενεργοποιούνται όλες οι επιλογές της application bar. if (automation) /* case Connected */ { //Αλλαγή Connection Button: Χρώμα = Πράσινο ConnectButton.Content = "Connected"; ConnectButton.Background = new SolidColorBrush(Color.FromArgb(150, 51, 204, 153)); //Αλλαγές Λειτουργιών Αυτοματισμού if (iscapture==false && isautomove==false) //Περίπτωση Απενεργοποιημένου Αυτοματισμού {//Αλλαγές στην Application Bar var appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[1]; appbtn.isenabled = true; appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[0]; appbtn.isenabled = cnvoption1.isenabled = true; if (isautomove==false) //Περίπτωση Απενεργοποίησης της Αναπαραγωγής { //Activate Buttons - UI modification MoveGrid.IsHitTestVisible = true; ApplicationBar.IsVisible = false; // ΤΕΛΟΣ της case Connected else /* case NOT connected */ { //Αλλαγή Connection Button: Χρώμα = Κόκκινο ConnectButton.Content = "Disconnected"; ConnectButton.Background = new SolidColorBrush(Color.FromArgb(247, 170, 46, 88)); //Απενεργοποίηση κουμπιών της Application Bar var appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[1]; appbtn.isenabled = false; appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[0]; appbtn.isenabled = cnvoption1.isenabled = MoveGrid.IsHitTestVisible = false; //Απενεργοποίηση επιλογών ελέγχου (κίνησης) ApplicationBar.IsVisible = true; //προβολή της AppBar Κώδικας C# 8-5: UImodificator: Ρυθμίσεις για την Συνδεσιμότητα

117 Κ Ε Φ Α Λ Α Ι Ο 8 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η U S E R I N T E R F A C E 103 Επιπρόσθετα, ελέγχεται εάν έχει απενεργοποιηθεί η λειτουργία αυτόματης αναπαραγωγής εντολών. Σε αυτή την περίπτωση γίνεται απόκρυψη της AppBar και ενεργοποίηση των επιλογών ελέγχου της σελίδας (κουμπιά κίνησης). Συνεχίζοντας, στην περίπτωση που δεν υπάρχει ενεργή σύνδεση, τότε η συνάρτηση καλείται με ορίσματα mode=false, και automation= false. Το κουμπί σύνδεσης αλλάζει σε Disconnected με κόκκινο χρώμα, απενεργοποιούνται τα κουμπιά ελέγχου κίνησης και τα κουμπιά της application bar. Τέλος, εμφανίζεται η application bar με ενεργοποιημένες μόνο τις επιτρεπτές επιλογές Σελίδα Προβολής Αρχείων (FileViewPage) Σε αυτή την σελίδα εφαρμόζονται αλλαγές στο UI με δύο τρόπους. Ο πρώτος αναφέρεται στην σελίδα αυτή καθ αυτή και ο δεύτερος, στα μηνύματα που εμφανίζονται μέσα στην σελίδα. Ξεκινώντας, η τροποποίηση του UI γίνεται κατά την εκκίνηση της σελίδας (loading), όπως και στην περίπτωση της σελίδας του Web Browser. Οι εντολές εκτελούνται κατά την ερμηνεία του Navigation string, μέσα στον event handler «PhoneApplicationPage_Loaded». (κώδικας C# 8-6) if (NavigationContext.QueryString.TryGetValue("connected", out current)) if (current == "False") {//Case NOT connected isarduinoconnected = 0; //pointer για την κατάσταση σύνδεσης CreateNewbtn.IsEnabled = Option3.IsEnabled = false; //Απενεργοποίηση Επιλογών else {//Case connected isarduinoconnected = 1; CreateNewbtn.IsEnabled = Option3.IsEnabled = true; //Ενεργοποίηση Επιλογών Κώδικας C# 8-6: Κώδικας τροποποίησης UI της FileViewPage Όπως φαίνεται και στο παραπάνω τμήμα κώδικα που περιγράφει τις εντολές τροποποίησης, επιλέγεται η ενεργοποίηση ή όχι του κουμπιού «Create New» για δημιουργία νέου αρχείου καταγραφής. Ταυτόχρονα, ενεργοποιείται ή απενεργοποιείται και η εντολή για προσθήκη εντολών σε υπάρχον αρχείο (Option3). Τέλος, γίνεται εκχώρηση τιμής στην μεταβλητή «isarduinoconnected», η οποία χρησιμοποιείται στην εκκίνηση των διαδικασιών νέας καταγραφής και αναπαραγωγής εντολών. (κώδικας C# 8-6)

118 104 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ 8.4 Έλεγχος της Ρομποτικής Πλατφόρμας Κύριο μέλημα της Arduino Vehicle εφαρμογής είναι μέσα από κάθε πτυχή των διαδικασιών της, να διασφαλίζεται η ισορροπία μεταξύ της βέλτιστης εμπειρίας χρήσης που δύναται να πάρει ο χρήστης, και της λειτουργικότητας της εφαρμογής. Βασικότατο ρόλο έχει η επικοινωνία της Windows Phone συσκευής, με την ρομποτική πλατφόρμα, ώστε να είναι δυνατή η εκτέλεση των εντολών ελέγχου, και όλων των υπολοίπων διαδικασιών. Σε ένα περιβάλλον, όμως, ασύγχρονης επικοινωνίας, όπως είναι τα Windows Phone, είναι πολύ πιθανή η ύπαρξη χρονικών κενών στην «άμεση» επικοινωνία συσκευής μικροελεγκτή. Με γνώμονα αυτά τα χαρακτηριστικά, καταλήγουμε στην ανάγκη στεγανοποίησης των λειτουργιών που πραγματοποιούνται, ώστε να αποτραπούν οποιεσδήποτε αθέμιτες καταστάσεις ή αποτελέσματα που θα προκαλέσουν δυσχέρεια στον χρήστη. Για τον λόγο αυτό, χρησιμοποιείται ένα σύνολο εντολών με στόχο την διαχείριση των δυνατών επιλογών του χρήστη. Με άλλα λόγια, ενεργοποιείται ένα υποτυπώδες «κλείδωμα» του UI, με την απενεργοποίηση των κουμπιών-επιλογών ελέγχου από την στιγμή που θα αποσταλεί μία εντολή, μέχρι και την ολοκλήρωση της απάντησης από την πλατφόρμα. Ταυτόχρονα, εμφανίζεται σχετικό κείμενο, ώστε να είναι ενήμερος ο χρήστης για το κάθε στάδιο της διαδικασίας. (κώδικας C# 8-7) //Απενεργοποίηση των Κουμπιών Κίνησης Send Command MoveGrid.IsHitTestVisible = false; //Απόκρυψη αποτελέσματος προηγούμενης εντολής FeedBackScrlV.Opacity = ImageView_Tester.Opacity = 0; ResponceTxtblk.Text = "Waiting Response \n\n " + NowCmd; //Ενημέρωση του Χρήστη /* */ //Εμφάνιση αποτελεσμάτων - FeedBack FeedBackScrlV.Opacity = 1; //Προβολή Debugger ImageView_Tester.Opacity = 1; //Προβολή Εικόνας Κώδικας C# 8-7: «Κλείδωμα» του UI της σελίδας Ελέγχου Κίνησης Η απενεργοποίηση «κλείδωμα» του UI, γίνεται στην συνάρτηση Communicate, κατά την αποστολή, δηλαδή, της εντολής. Αντίθετα, η ενεργοποίηση «ξεκλείδωμα» γίνεται μέσα στην ManageFeedback, που διαχειρίζεται την απάντηση της πλατφόρμας. Με αυτόν τον τρόπο, διασφαλίζεται η επικοινωνία και η σωστή εκτέλεση των εντολών, μακριά από οποιοδήποτε πρόβλημα μπορεί να προκληθεί από μη ορθή χρήση.

119 Κ Ε Φ Α Λ Α Ι Ο 8 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η U S E R I N T E R F A C E Λειτουργίες Αυτοματισμού Σε αυτή την ενότητα ολοκληρώνεται η περιγραφή της χρήσης της συνάρτησης UImodificator, με την ανάλυση των εντολών που εκτελούνται κατά τις διαδικασίες καταγραφής και αναπαραγωγής. (ενότητα 8.2) Σε γενικό πλαίσιο, οι αλλαγές αφορούν την εμφάνιση ενός κειμένου που προσδιορίζει την λειτουργία της κάθε διαδικασίας, και την απενεργοποίηση κάποιων επιλογών της σελίδας ή/και της application bar. Με αυτόν τον τρόπο, δεν αποσπάται ο χρήστης από την λειτουργία των διαδικασιών αυτοματισμού, και παράλληλα διασφαλίζεται και η καλή λειτουργία της εφαρμογής Διαδικασία Καταγραφής Η διαδικασία αυτή, όπως περιγράφτηκε λεπτομερώς στην παράγραφο 6.2.2, ενεργοποιείται μέσα από επιλογές της σελίδας προβολής αρχείων (FileViewPage). Οι δυνατές επιλογές είναι δύο, η δημιουργία νέου αρχείου, και η προσθήκη-επέκταση υπάρχοντος αρχείου. Και οι δύο αυτές επιλογές, μεταφέρουν τον χρήστη στην σελίδα ελέγχου (MoveTestPage), όπου ενεργοποιείται η ίδια διαδικασία «αποθήκευση εντολών μέσα σε αρχείο», οπότε και η τροποποίηση του UI είναι κοινή. Εικόνα 8-1: Διαδικασία Καταγραφής στο UI της σελίδας MoveTestPage Κατά την έναρξη της διαδικασίας, καλείται η UImodificator με ορίσματα mode=true, automation=false όπως φαίνεται και στον σχετικό πίνακας 8-1. Σκοπός της συνάρτησης είναι η ενημέρωση του χρήστη για την λειτουργία της διαδικασίας καταγραφής, μέσω της

120 106 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ εμφάνισης σχετικού κειμένου. Παράλληλα, απενεργοποιούνται και οι επιλογές «Refresh», «Power», και «Settings» της application bar. (κώδικας C# 8-8) //Ρύθμιση Κειμένου Περιγραφής διαδικασίας «Capturing» CaptureStatus.Text = "CAPTURING..."; // Χρώμα του κειμένου: Πράσινο CaptureStatus.Foreground = new SolidColorBrush(Color.FromArgb(222, 51, 204, 133)); CaptureStatus.Opacity = (CaptureStatus.IsHitTestVisible = //Προβολή και Ενεργοποίηση!CaptureStatus.IsHitTestVisible)? 1 : 0; //Application Bar Modification var appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[0]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Refresh appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[1]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Power appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[3]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Settings Κώδικας C# 8-8: Τροποποιήσεις UI για την Διαδικασία Καταγραφής Με την λήξη της διαδικασίας καταγραφής, οι παραπάνω ρυθμίσεις επανέρχονται στην αρχική τους μορφή, με επανεκτέλεση του ίδιου κώδικα. Αυτό φαίνεται από τον τρόπο εκχώρησης τιμής σε όλες τις μεταβλητές (μορφή: (bool) a =!a ) Διαδικασία Αναπαραγωγής Η έναρξη της αναπαραγωγής, προσδιορίζεται από την κλίση της UImodificator με ο- ρίσματα mode=true, automation= true. Και σε αυτή την περίπτωση, σκοπός είναι η ενημέρωση του χρήστη για την λειτουργία της διαδικασίας, και η απενεργοποίηση των επιλογών «Save Trip» και «Settings». Επιπλέον, γίνεται και απενεργοποίηση των κουμπιών ελέγχου της κίνησης («κλείδωμα» UI). Εικόνα 8-2: UI της MoveTestPage στην διαδικασία Αναπαραγωγής Κατόπιν, γίνεται έλεγχος συνδεσιμότητας της εφαρμογής με την ρομποτική πλατφόρμας. Εάν υπάρχει ενεργή σύνδεση, τότε απενεργοποιείται και το κουμπί, «Refresh», ενώ, εάν είναι αποσυνδεδεμένο, τότε ενεργοποιείται (ξανά) το κουμπί «Power», της AppBar.

121 Κ Ε Φ Α Λ Α Ι Ο 8 Δ Ι Α Χ Ε Ι Ρ Ι Σ Η U S E R I N T E R F A C E 107 Η διαδικασία στην περίπτωση «Αποσυνδεδεμένο» συμβαίνει διότι η απουσία σύνδεσης συνεπάγεται την εκτέλεση, πρώτα, της UImodificator με σκοπό την μορφοποίηση λόγω συνδεσιμότητας, και έπειτα την επανεκτέλεση της ίδιας μεθόδου (UImodificator), για την μορφοποίηση λόγω διαδικασίας αναπαραγωγής. Έτσι, στην πρώτη κλίση της, απενεργοποιείται το κουμπί «Power», ενώ, θα ενεργοποιηθεί κατά την δεύτερη εκτέλεση της UImodificator. (κώδικας C# 8-9) //Ρύθμιση Κειμένου Περιγραφής διαδικασίας «Αναπαραγωγής» CaptureStatus.Text = "R E P L A Y"; // Χρώμα του κειμένου: Κίτρινο CaptureStatus.Foreground = new SolidColorBrush(Color.FromArgb(222, 204, 169, 51)); CaptureStatus.Opacity = (CaptureStatus.IsHitTestVisible = //Προβολή και Ενεργοποίηση!CaptureStatus.IsHitTestVisible)? 1 : 0; var appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[2]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Save Trip appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[3]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Settings MoveGrid.IsHitTestVisible =!MoveGrid.IsHitTestVisible;//Απενεργοποίηση Κουμπιών Κίνησης if (IsNetwork)//Περίπτωση σύνδεσης { appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[0]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Refresh else //Περίπτωση Προσομοίωσης (Demo) { appbtn = (IApplicationBarIconButton)ApplicationBar.Buttons[1]; appbtn.isenabled =!appbtn.isenabled; //Επιλογή Power Κώδικας C# 8-9: Τροποποιήσεις UI για την Διαδικασία Αναπαραγωγής Το τελικό αποτέλεσμα είναι η ενεργοποίηση του κουμπιού «Power», ανεξάρτητα από την ύπαρξη, ή όχι, σύνδεσης με την πλατφόρμα. Και ο λόγος είναι ότι, όπως έχει προαναφερθεί, το κουμπί αυτό είναι υπεύθυνο για την διακοπή της λειτουργίας της αναπαραγωγής. Η διαδικασία αναπαραγωγής είναι ενεργή και στην λειτουργία «demo» της εφαρμογής. Αυτό σημαίνει πώς το UI, αλλά και οι επιτρεπτές επιλογές θα πρέπει να είναι κατάλληλα διαμορφωμένα, ανεξάρτητα από τις καταστάσεις σύνδεσης. 8.6 Εικονίδια - Οπτικοποίηση Πληροφοριών Για τις ανάγκες της εφαρμογής, ώστε να μπορέσουν να οπτικοποιηθούν άμεσα οι πολλαπλές πληροφορίες που διαχειρίζονται οι επιμέρους διεργασίες, έχουν δημιουργηθεί τρείς ομάδες εικονιδίων. Τα εικονίδια συνδεσιμότητας, τα εικονίδια κίνησης, και τα εικονίδια εφαρμογής logo (συμπεριλαμβανομένης και της Splash Screen).

122 108 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Οι εικόνες που παρουσιάζονται παρακάτω, και αποτελούν τις τρείς ομάδες εικονιδίων, δημιουργήθηκαν εξ ολοκλήρου στο πρόγραμμα Adobe Photoshop CS5, και αποτελούν αναπόσπαστο κομμάτι της εφαρμογής, και της παρούσας εργασίας Εικονίδια Συνδεσιμότητας Η πρώτη παρουσίαση αυτών των εικονιδίων έγινε στην παράγραφο 4.2.1, οπότε εδώ θα γίνει μία απλή περιγραφή τους. Η κεντρική ιδέα που οδήγησε στην υλοποίησή τους βασίστηκε στον τύπο σύνδεσης. Το WiFi, επειδή υποστηρίζει τις μέγιστες ταχύτητες και η χρήση του από τις smartphone συσκευές είναι δωρεάν, χρωματίστηκε με Πράσινο χρώμα. Η σύνδεση Δεδομένων (3G/4G), επειδή παρέχει εν μέρει συνδεσιμότητα, όμως οι ταχύτητες εξαρτώνται από τον κάθε πάροχο, είναι μικρότερες από το WiFi και, συνήθως, η χρήση της συνοδεύεται και από ανάλογη χρέωση, χρωματίστηκε με Πράσινο και Κόκκινο χρώμα. Τέλος, για την περίπτωση Απουσίας σύνδεσης, το χρώμα που επιλέχθηκε είναι το Κόκκινο. (πίνακας 8-2) Πίνακας 8-2: Εικονίδια Συνδεσιμότητας Τύπος Σύνδεσης Εικονίδιο WiFi Δεδομένων (3G/4G) Αποσυνδεδεμένο Εκτός από τον χρωματικό διαχωρισμό, καί το σχήμα που επιλέχθηκε επιτρέπει τον ευδιάκριτο διαχωρισμό κάθε εικονιδίου κατάσταση σύνδεσης, ώστε να μην είναι απαραίτητη και η εμφάνιση του σχετικού κειμένου.

123 8.6.2 Εικονίδια Κίνησης Κ Ε Φ Α Λ Α Ι Ο 8 Ο Π Τ Ι Κ Ο Π Ο Ι Η Σ Η Π Λ Η Ρ Ο Φ Ο Ρ Ι Ω Ν 109 Η ομάδα αυτή αποτελείται από εικονίδια που απεικονίζουν την κάθε εντολή κίνησης που στέλνει ο χρήστης, και εμφανίζονται σύμφωνα με το feedback της ρομποτικής πλατφόρμας. Εμφανίζονται στο κέντρο της σελίδας ελέγχου λίνησης (MoveTestPage), ως απεικόνιση του feedback της ρομποτικής πλατφόρμας. Η ενεργοποίηση της προβολής τους γίνεται με την επιλογή «Image Viewer» στην σελίδα των ρυθμίσεων. Τα εικονίδια, μαζί με την κίνηση που υποδεικνύουν παρουσιάζονται στον παρακάτω πίνακα 8-3. Ο σκοπός τους είναι να προσδιορίζουν την κίνηση της πλατφόρμας, οπτικοποιώντας το σχετικό feedback του μικροελεγκτή, οπότε είναι απαραίτητο, να είναι ευδιάκριτα και με εμφανή διαχωρισμό. Για τον λόγο αυτό χρησιμοποιούνται συγκεκριμένες οι τεχνικές. Αρχικά, το σχήμα που επιλέχθηκε είναι το τετράγωνο, με στρογγυλεμένες γωνίες. Έ- τσι, ορίζεται ακριβώς η περιοχή της εικόνας, και ταυτόχρονα να ταιριάζει με την γεωμετρία των υπολοίπων αντικειμένων της σελίδας. Εσωτερικά, τοποθετείται ένα βέλος που να υποδεικνύει την κατεύθυνση προς την οποία κινείται η πλατφόρμα. Η θέση του βέλους αυτού μέσα στο τετράγωνο, δεν είναι ακριβώς στο κέντρο, ώστε η διαφορά στην συμμετρία που δημιουργείται, να δίνει την οπτική ψευδαίσθηση της κίνησης. Πίνακας 8-3: Εικονίδια Κίνησης Αρχική εικόνα / Στάση Μπροστά Πίσω Αριστερά Δεξιά Σημαντικότατο ρόλο διατελεί και το χρώμα στο πλαίσιο του εικονιδίου. Τα χρώματα επιλέχθηκαν έχοντας ως οδηγό τον σχετικό χρωματικό κώδικα που εφαρμόζεται στον ΚΟΚ για την κυκλοφορία των οχημάτων. Στο εικονίδιο της στάσης, το περίγραμμα είναι κόκκινο, πράσινο για κίνηση εμπρός και κίτρινο για την αλλαγή διεύθυνσης (κινήσεις αριστερά δεξιά). Ενώ, για την κίνηση πίσω επιλέχθηκε το γαλάζιο.

124 110 Ε Φ Α Ρ Μ Ο Γ Η Ε Ξ Ε Λ ΙΓ Μ Ε Ν Ο Υ Δ Ι Α Δ Ι Κ Τ Υ Α Κ Ο Υ Ε Λ Ε Γ Χ Ο Υ Ρ Ο Μ Π Ο Τ Ι Κ Η Σ Π Λ Α Τ Φ Ο Ρ Μ Α Σ Ολοκληρώνοντας, σε κάθε εικονίδιο τοποθετήθηκε και το σχετικό κείμενο που περιγράφει την κατεύθυνση της κίνησης. Έτσι υλοποιείται η εμφανής διάκριση των εικονιδίων και ταυτοποιείται άμεσα το περιεχόμενό τους Εικονίδια Εφαρμογής Logo Στα Windows Phone, το σχήμα και το μέγεθος των εικονιδίων είναι αυστηρώς καθορισμένα από το λειτουργικό σύστημα. Συνεπώς, η μελέτη για την παραγωγή του logo της εφαρμογής Arduino Vehicle, προσανατολίστηκε στο περιεχόμενο και τους χρωματικούς συνδυασμούς. Ο ρόλος του είναι να διασφαλίζει και να αναδεικνύει την μοναδικότητα, και την λειτουργικότητα της εφαρμογής. Δηλαδή, η εικόνα πρέπει να περιγράφει την εφαρμογή, τις λειτουργίες και το περιεχόμενό της, και ταυτόχρονα να είναι μοναδική και καλαίσθητη. Ακολουθώντας αυτές τις κατευθύνσεις, τα εικονίδια της εφαρμογής σχεδιάστηκαν υπό το πρίσμα της καλλιτεχνικής καλαισθησίας και του δημιουργικού marketing, αφού είναι αυτά που ελκύουν το ενδιαφέρον των χρηστών, αλλά, και την ίδια στιγμή, κάνουν την ε- φαρμογή να ξεχωρίζει από τις υπόλοιπες εφαρμογές της συσκευής. Εικόνα 8-3: Logo Arduino Vehicle για χρήση στο Marketplace Δημιουργήθηκαν δύο μορφές του logo της Arduino Vehicle, αναλόγως του σκοπού χρήσης τους. Η πρώτη δημιουργήθηκε για χρήση στην παρούσα εργασία, αλλά και στο marketplace των Windows Phone. Έτσι, εκτός από το βασικό θέμα, περιλαμβάνει το όνομα της εφαρμογής αλλά και την έκδοση του λειτουργικού για την οποία προορίζεται. (εικόνα 8-3) Το δεύτερο είδος, είναι μία πιο λιτή προσέγγιση, καθώς, ο σκοπός χρήσης του είναι ως εικονίδιο της εφαρμογής που θα εμφανίζεται στην συσκευή του χρήστη. Ο λόγος δημιουργίας αυτού του είδους είναι, αφ ενός το μικρό μέγεθός του (62x62 pixels), τουτ έστιν, θα πρέπει να είναι ευδιάκριτο και χωρίς να περιλαμβάνει περιττές πληροφορίες που μπορεί

125 Κ Ε Φ Α Λ Α Ι Ο 8 Ο Π Τ Ι Κ Ο Π Ο Ι Η Σ Η Π Λ Η Ρ Ο Φ Ο Ρ Ι Ω Ν 111 να κουράζουν. Αφετέρου να δοθεί βάση στα βασικά σχήματα από τα οποία αποτελείται και να συγγενεύει με την γενικότερη σχεδίαση των Windows Phone. (εικόνα 8-4) Εικόνα 8-4: Logo Arduino Vehicle για χρήση στις συσκευές Splash Screen Μία ειδοποιός διαφορά μεταξύ των εκδόσεων του λειτουργικού συστήματος Windows Phone, είναι η ταχύτητα έναρξης και λειτουργίας των εφαρμογών. Δηλαδή, από την WP version 7.1, στην ver 8.0 ή ver 8.1, μία εφαρμογή έχει αισθητές διαφορές στον χρόνο εκκίνησης (loading) και, μερικές φορές, στον τρόπο λειτουργίας της. Για να καλυφθεί, λοιπόν, το χρονικό αυτό κενό που παρατηρείται κατά το loading στην έκδοση 7.1, η εφαρμογή διαθέτει μία εικόνα που εμφανίζεται μέχρι να ολοκληρωθεί το loading της εφαρμογής. Η εικόνα αυτή (εικόνα 8-5) ονομάζεται Splash Screen και ο χρόνος προβολής της είναι 1,5 3 δευτερόλεπτα. Εικόνα 8-5: Splash Screen της Εφαρμογής Εφόσον ο σκοπός της εικόνας είναι η ενημέρωση του χρήστη για την έναρξη της ε- φαρμογής, έχει προστεθεί και το κείμενο Loading, ενώ το φόντο (background) είναι το ίδιο χρώμα με το Logo.

Internet Business Hellas

Internet Business Hellas Internet Business Hellas Περιεχόμενα Εισαγωγή email marketing IBNEWSLETTER Χαρακτηριστικά Πλεονεκτήματα Επικοινωνία Εισαγωγή email marketing «Το μάρκετινγκ μέσω ηλεκτρονικού ταχυδρομείου συνίσταται στην

Διαβάστε περισσότερα

Περιεχόμενα. Τεχνικό εγχειρίδιο χρήσης IBNEWSLETTER

Περιεχόμενα. Τεχνικό εγχειρίδιο χρήσης IBNEWSLETTER Περιεχόμενα ΣΤΟΙΧΕΙΑ ΕΠΙΚΟΙΝΩΝΙΑΣ... 2 Τμήμα Υποστήριξης (Help Desk and Client Support)... 2 ΕΙΣΑΓΩΓΗ... 3 Εισαγωγή Email marketing... 3 Σχετικά με το IBNEWSLETTER... 3 Μεθοδολογία... 4 Χαρακτηριστικά...

Διαβάστε περισσότερα

Πτυχιακή Εργασία Οδηγώντας ένα Ρομποτικό Αυτοκίνητο με το WiFi. Η Ασύρματη Επικοινωνία, χρησιμοποιώντας

Πτυχιακή Εργασία Οδηγώντας ένα Ρομποτικό Αυτοκίνητο με το WiFi. Η Ασύρματη Επικοινωνία, χρησιμοποιώντας Βασικές Έννοιες Πτυχιακή Εργασία 2015 Οδηγώντας ένα Ρομποτικό Αυτοκίνητο με το WiFi. Σχεδίαση Συστήματος Πραγματικής Εφαρμογής (Prototyping). Η Ασύρματη Επικοινωνία, χρησιμοποιώντας το πρωτόκολλο WiFi.

Διαβάστε περισσότερα

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Περιεχόμενα Εισαγωγή στην εφαρμογή... 2 Βασική Σελίδα (Activity)... 3 Ρυθμίσεις... 3 Πελάτες... 6 Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Αποθήκη... 11 Αναζήτηση προϊόντος...

Διαβάστε περισσότερα

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι Λειτουργικά Συστήματα 1 Λογισμικό του Υπολογιστή Για να λειτουργήσει ένας Η/Υ εκτός από το υλικό του, είναι απαραίτητο και το λογισμικό Το σύνολο των προγραμμάτων που συντονίζουν τις λειτουργίες του υλικού

Διαβάστε περισσότερα

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης

Bread Online. Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης Bread Online Σχεδιασμός και μετατροπή μιας απλής οικιακής συσκευής σε επαναπρογραμματιζόμενη συσκευή IP Παναγιώτης Ιωαννίδης Επιβλέπων καθηγητής: Μηνάς Δασυγένης Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών

Διαβάστε περισσότερα

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ.

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. Οδηγός Διαχειριστή Το m-learning Toolkit είναι μια ολοκληρωμένη πλατφόρμα εξ αποστάσεως εκπαίδευσης που έχει σχεδιαστεί για να υπάρχει η δυνατότητα της πρόσβασης

Διαβάστε περισσότερα

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5 A. EVANS, K. MARTIN, M. A. POATSY Εισαγωγή στην πληροφορική Θεωρία και πράξη 2 η έκδοση Κεφάλαιο 5 Λογισμικό συστημάτων: Το λειτουργικό σύστημα, τα βοηθητικά προγράμματα και η διαχείριση αρχείων Τα βασικά

Διαβάστε περισσότερα

Σύστημα Διαχείρισης, Ελέγχου και Παρακολούθησης Ασθενοφόρων και Περιστατικών

Σύστημα Διαχείρισης, Ελέγχου και Παρακολούθησης Ασθενοφόρων και Περιστατικών Σύστημα Διαχείρισης, Ελέγχου και Παρακολούθησης Ασθενοφόρων και Περιστατικών Η LINK Technologies Α.Ε. ιδρύθηκε το 2002 με στόχο να καταστεί πυρήνας καινοτομικών λύσεων Τηλεματικής αναβαθμίζοντας καθημερινά

Διαβάστε περισσότερα

WIRELESS SENSOR NETWORKS (WSN)

WIRELESS SENSOR NETWORKS (WSN) WIRELESS SENSOR NETWORKS (WSN) Δρ. Ιωάννης Παναγόπουλος Εργαστήριο Υπολογιστικών Συστημάτων Καθ. Γεώργιος Παπακωνσταντίνου Αθήνα 2008 ΕΙΣΑΓΩΓΗ ΣΤΑ WSN Σε συγκεκριμένες εφαρμογές, επιθυμείται η μέτρηση

Διαβάστε περισσότερα

Εφαρμογές Υπολογιστών. Κεφάλαιο 4 Λογισμικό Συστήματος

Εφαρμογές Υπολογιστών. Κεφάλαιο 4 Λογισμικό Συστήματος Λογισμικό Συστήματος Λογισμικό 2 Λογισμικό Συστήματος Τα ειδικά εργαλεία χρησιμοποιούνται για την ανάπτυξη λογισμικού εφαρμογών και την εκτέλεση βοηθητικών εργασιών. Το λειτουργικό σύστημα (operating system)

Διαβάστε περισσότερα

Εξοικείωση με τις εντολές ipconfig και ping

Εξοικείωση με τις εντολές ipconfig και ping Διαχείριση Δικτύων Τμήμα Μηχανικών Πληροφορικής ΤΕ ΤΕΙ Ηπείρου Εργαστηριακή Άσκηση Εξοικείωση με τις εντολές ipconfig και ping Σημείωση : Η άσκηση αναφέρεται σε εντολές των Windows. Υπάρχουν παρόμοιες

Διαβάστε περισσότερα

GOOGLE DRIVE & WEB 2.0

GOOGLE DRIVE & WEB 2.0 GOOGLE DRIVE & WEB 2.0 ΚΕ.ΠΛΗ.ΝΕ.Τ ΑΡΤΑΣ ΑΠΟΣΤΟΛΟΣ ΤΕΡΖΟΓΛΟΥ ΤΙ ΕΊΝΑΙ ΤΟ GOOGLE DRIVE Διαδικτυακός χώρος αποθήκευσης, διαμοίρασης και συγχρονισμού αρχείων Χώρος συνεργατικής επεξεργασίας εγγράφων, υπολογιστικών

Διαβάστε περισσότερα

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Εργαλεία ανάπτυξης εφαρμογών internet Ι IEK ΟΑΕΔ ΚΑΛΑΜΑΤΑΣ ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΟΦΟΡΙΚΗΣ Εργαλεία ανάπτυξης εφαρμογών internet Ι Διδάσκουσα: Κανελλοπούλου Χριστίνα ΠΕ19 Πληροφορικής 4 φάσεις διαδικτυακών εφαρμογών 1.Εφαρμογές στατικής πληροφόρησης

Διαβάστε περισσότερα

SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ Κεφάλαιο 4 SNMP ΔΙΑΧΕΙΡΙΣΗ ΔΙΚΤΥΟΥ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ 1 4.1 ΕΙΣΑΓΩΓΗ...3 4.2 ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ...3 4.2.1 Η ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΗΣ ΔΙΑΧΕΙΡΙΣΗΣ ΔΙΚΤΥΟΥ...3 4.2.1.1 ΣΤΑΘΜΟΣ ΔΙΑΧΕΙΡΙΣΗΣ ΔΙΚΤΥΟΥ...4 4.2.1.2 ΔΙΑΧΕΙΡΙΖΟΜΕΝΟΙ

Διαβάστε περισσότερα

Μεγάφωνο HP UC. Οδηγός χρήσης

Μεγάφωνο HP UC. Οδηγός χρήσης Μεγάφωνο HP UC Οδηγός χρήσης Copyright 2014, 2015 Hewlett-Packard Development Company, L.P. Η ονομασία Bluetooth είναι εμπορικό σήμα που ανήκει στον κάτοχό του και χρησιμοποιείται από τη Hewlett-Packard

Διαβάστε περισσότερα

Οδηγός γρήγορης εκκίνησης του PowerSuite

Οδηγός γρήγορης εκκίνησης του PowerSuite Το PowerSuite είναι η ολοκληρωμένη λύση απόδοσης για τον υπολογιστή σας. Ενσωματώνοντας το RegistryBooster, το DriverScanner και το SpeedUpMyPC σε ένα ενιαίο περιβάλλον εργασίας σάρωσης, το PowerSuite

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές Σκοπός του εργαστηρίου αυτού είναι η εξοικείωση με κάποιες εφαρμογές που θα μας φανούν πολύ χρήσιμες κατά τη διάρκεια του μαθήματος της Εισαγωγής στον Προγραμματισμό.

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης. Σημαντικό!

Εγχειρίδιο Χρήσης. Σημαντικό! Εγχειρίδιο Χρήσης Σημαντικό! Η διαδικτυακή πύλη της υπηρεσίας www.vidatrack.com είναι συμβατή με τους πιο κάτω περιηγητές: Internet Explorer 12 ή πιο πρόσφατο Google Chrome 38 ή πιο πρόσφατο Mozilla Firefox

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (Java) Ενότητα 3 ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Ι. Ελεγκτές συνθηκών ή περιπτώσεων:

Διαβάστε περισσότερα

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication ΡΟΜΠΟΤΙΚΗ ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication ΜΠΑΝΤΗΣ ΑΝΤΩΝΙΟΣ 533 ΤΣΙΚΤΣΙΡΗΣ ΔΗΜΗΤΡΙΟΣ 551 ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΤΟΥ ΡΟΜΠΟΤ LEGO NXT Το ρομπότ

Διαβάστε περισσότερα

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές Εισαγωγή στο Arduino Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών Τι είναι Μικροελεγκτής; Ηλεκτρονική συσκευή που διαχειρίζεται ηλεκτρονικά

Διαβάστε περισσότερα

Speed-0 WMP: Web and Mobile Platform Software Requirements Specification

Speed-0 WMP: Web and Mobile Platform Software Requirements Specification Speed-0 Web and Mobile Platform Speed-0 WMP: Web and Mobile Platform Software Requirements Specification Version Revision History Date Version Description People 5/4/2012 Αρχικές Προδιαγραφές

Διαβάστε περισσότερα

Atlantis Orders on android

Atlantis Orders on android Atlantis Orders on android 1 Πίνακας περιεχομένων Σύντομη περιγραφή... 3 Αναλυτικότερα για τις παραγγελίες... 3 Περί συγχρονισμού... 4 Η πρώτη χρήση της συσκευής... 5 Για κανονική χρήση... 5 Διαχείριση

Διαβάστε περισσότερα

Ενότητα 1η. Εισαγωγή στην Πληροφορική

Ενότητα 1η. Εισαγωγή στην Πληροφορική Ενότητα 1η Εισαγωγή στην Πληροφορική 1.1 Τι είναι Πληροφορική Ένας σύντομος ορισμός για το τι είναι πληροφορική είναι ο παρακάτω: όλα εκείνα που χρειάζεται κανείς για να παράγει, να οργανώνει και να διαχειρίζεται

Διαβάστε περισσότερα

ΑΥΤΟΜΑΤΟ ΣΥΣΤΗΜΑ ΕΝΑΛΛΑΓΗΣ ΤΑΧΥΤΗΤΩΝ ΣΕ ΠΟΔΗΛΑΤΟ

ΑΥΤΟΜΑΤΟ ΣΥΣΤΗΜΑ ΕΝΑΛΛΑΓΗΣ ΤΑΧΥΤΗΤΩΝ ΣΕ ΠΟΔΗΛΑΤΟ Τ.Ε.Ι. ΠΕΙΡΑΙΑ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ ΑΥΤΟΜΑΤΟ ΣΥΣΤΗΜΑ ΕΝΑΛΛΑΓΗΣ ΤΑΧΥΤΗΤΩΝ ΣΕ ΠΟΔΗΛΑΤΟ ΟΝΟΜΑΤΑ ΦΟΙΤΗΤΩΝ: ΒΟΥΡΔΕΡΗΣ ΑΝΤΩΝΙΟΣ Α.Μ: 30086 ΙΩΑΝΝΟΥ ΙΩΑΝΝΗΣ Α.Μ: 33359 ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ: ΝΙΚΟΛΑΟΥ ΓΡΗΓΟΡΗΣ Ιστορική

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές

ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές ΕΡΓΑΣΤΗΡΙΟ 1: Εισαγωγή, Χρήσιμες Εφαρμογές Σκοπός του εργαστηρίου αυτού είναι η χρησιμοποίηση κάποιων εφαρμογών που θα μας φανούν πολύ χρήσιμες κατά τη διάρκεια του μαθήματος της Εισαγωγής στον Προγραμματισμό.

Διαβάστε περισσότερα

ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ

ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ KA-DM0 ΟΔΗΓΌΣ ΓΡΉΓΟΡΗΣ ΕΚΚΊΝΗΣΗΣ ΣΑΣ ΕΥΧΑΡΙΣΤΟΎΜΕ ΠΟΥ ΕΠΙΛΈΞΑΤΕ ΑΥΤΌ ΤΟ ΠΡΟΪΌΝ, ΔΙΑΒΆΣΤΕ ΜΕ ΠΡΟΣΟΧΉ ΤΟ ΠΑΡΌΝ ΕΓΧΕΙΡΊΔΙΟ ΠΡΟΤΟΎ ΧΡΗΣΙΜΟΠΟΙΉΣΕΤΕ ΤΟ ΠΡΟΪΌΝ ΚΑΙ ΦΥΛΆΞΤΕ ΤΟ ΓΙΑ ΜΕΛΛΟΝΤΙΚΉ

Διαβάστε περισσότερα

Κατασκευή Πληροφοριακού Συστήματος Διαχείρισης Στόλου Οχημάτων

Κατασκευή Πληροφοριακού Συστήματος Διαχείρισης Στόλου Οχημάτων Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Κατασκευή Πληροφοριακού Συστήματος Διαχείρισης Στόλου Οχημάτων ΚΕΧΑΓΙΑΣ ΑΠΟΣΤΟΛΟΣ ΕΠΙΒΛΕΠΩΝ: ΔΑΣΥΓΕΝΗΣ ΜΗΝΑΣ Περίγραμμα 1.

Διαβάστε περισσότερα

POWERPOINT 2003. Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων.

POWERPOINT 2003. Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων. POWERPOINT 2003 1. Τι είναι το PowerPoint (ppt)? Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων. 2. Τι δυνατότητες έχει? Δημιουργία παρουσίασης. Μορφοποίηση παρουσίασης. Δημιουργία γραφικών. Δημιουργία

Διαβάστε περισσότερα

Κατάσταση: Έτοιμο. Ψάχνει για σύνδεση στο internet.

Κατάσταση: Έτοιμο. Ψάχνει για σύνδεση στο internet. ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ ΧΡΗΣΗΣ 1. Εγκατάσταση κεντρικής μονάδας Σύνδεση της κεντρικής μονάδας a) Συνδέστε το τροφοδοτικό στην κεντρική μονάδα, b) Συνδέστε το καλώδιο LAN στην κεντρική μονάδα και το router

Διαβάστε περισσότερα

Atlantis Orders on android

Atlantis Orders on android Atlantis Orders on android 1 Πίνακας περιεχομένων Σύντομη περιγραφή... 3 Αναλυτικότερα για τις παραγγελίες... 3 Περί συγχρονισμού... 4 Η πρώτη χρήση της συσκευής... 5 Διαχείριση παραγγελιών... 6 Η πρώτη

Διαβάστε περισσότερα

Πολυμέσα. παρέχουν ένα περιβάλλον πρόσβασης στα τμήματα, μέσω συνδέσεων με οποιονδήποτε τρόπο

Πολυμέσα. παρέχουν ένα περιβάλλον πρόσβασης στα τμήματα, μέσω συνδέσεων με οποιονδήποτε τρόπο Περιεχόμενα Ορισμοί Smartphone-Πολυμέσα Η εξέλιξη Τελευταίας τεχνολογίας Smartphones Χαρακτηριστικά των smartphones Λειτουργικά Συστήματα στα Smartphones Στάδια παραγωγής πολυμεσικής εφαρμογής Κατηγορίες

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης V3.0

Εγχειρίδιο Χρήσης V3.0 ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΠΕΡΙΕΧΟΜΕΝΟΥ Εγχειρίδιο Χρήσης V3.0 Πίνακας Περιεχομένων: 1. Σύνδεση με την συσκευή 3 1.1 Σύνδεση μέσω Wi-Fi Direct.... 3 1.2 Ενσύρματη σύνδεση (LAN) 3 1.3 Ασύρματη σύνδεση (WiFi).

Διαβάστε περισσότερα

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος

Κεφάλαιο 3.1: Λειτουργικά Συστήματα. Επιστήμη ΗΥ Κεφ. 3.1 Καραμαούνας Πολύκαρπος Κεφάλαιο 3.1: Λειτουργικά Συστήματα 1 3.1.1 Λογισμικό και Υπολογιστικό Σύστημα Ένα σύγχρονο υπολογιστικό σύστημα αποτελείται από: το υλικό: τα ηλεκτρονικά μέρη του υπολογιστή και το λογισμικό: το σύνολο

Διαβάστε περισσότερα

Smartphones και πολυμέσα

Smartphones και πολυμέσα Smartphones και πολυμέσα Λογοθέτης Σωτήρης ΚΑΘΗΓΗΤΗΣ/ΣΥΜΒΟΥΛΟΣ: ΓΕΩΡΓΙΟΣ ΣΤΥΛΙΑΡΑΣ Θεσσαλονίκη, 1 Νοεμβρίου 2009 Περιεχόμενα Ορισμοί Smartphones - Πολυμέσα Ιστορική Αναδρομή Τελευταίας τεχνολογίας Smartphones

Διαβάστε περισσότερα

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25 Περιεχόμενα Κεφάλαιο 1 Εισαγωγή στην Access...9 Γνωριμία με την Access... 12 Δημιουργία βάσης δεδομένων... 18 Άνοιγμα και κλείσιμο βάσης δεδομένων... 21 Ερωτήσεις ανακεφαλαίωσης... 22 Πρακτική εξάσκηση...

Διαβάστε περισσότερα

Θεματογράφος (ή ο βοηθός του Καθηγητή)

Θεματογράφος (ή ο βοηθός του Καθηγητή) Θεματογράφος (ή ο βοηθός του Καθηγητή) Τι είναι ο Θεματογράφος; Σύντομη Περιγραφή Ο Θεματογράφος είναι μία εφαρμογή με την οποία ο χρήστης μπορεί εύκολα να δημιουργήσει, να ταξινομήσει και να αποθηκεύσει

Διαβάστε περισσότερα

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14

Οδηγός γρήγορης εγκατάστασης. (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14 Οδηγός γρήγορης εγκατάστασης (Για Windows και MAC) Ασύρματη κάμερα IP HD περιστροφής / κλισης για εσωτερικούς χώρους v3.14 Περιεχόμενα συσκευασίας 1 Εισαγωγή στο υλικό Εξωτερική περιγραφή ΔΙΑΦΟΡΕΣ Μοντέλο

Διαβάστε περισσότερα

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R209-Z

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R209-Z Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R209-Z Καλώς ήρθατε στον κόσμο των κινητών επικοινωνιών 1 Καλώς ήρθατε 2 Επισκόπηση συσκευής 3 Γρήγορο ξεκίνημα 5 Εφαρμογή Mobile Wi-Fi Web 6 Επισκόπηση εφαρμογής

Διαβάστε περισσότερα

Περιεχόµενα 1. Εγκατάσταση 2. Εισαγωγή 3. Σύνδεση 4. Ρυθµίσεις 2.1 Περιοχή εργασιών και πλοήγησης 2.2 Περιοχή απεικόνισης "Λεπτοµέρειες" 2.3 Περιοχή απεικόνισης "Στατιστικά" 4.1 Προφίλ 4.2 ίκτυο 4.2.1

Διαβάστε περισσότερα

Epsilon Net PYLON Platform

Epsilon Net PYLON Platform Epsilon Net PYLON Platform Οδηγίες Εγκατάστασης Top 1 / 31 Περιεχόμενα 1 ΠΡΟΑΠΑΙΤΟΥΜΕΝΑ... 3 2 ΕΓΚΑΤΑΣΤΑΣΗ ΕΦΑΡΜΟΓΗΣ... 5 3 ΕΓΚΑΤΑΣΤΑΣΗ DEMO... 7 4 ΕΓΚΑΤΑΣΤΑΣΗ ΠΡΟΤΥΠΗΣ ΒΑΣΗΣ... 8 4.1 Φόρτωση πρότυπης

Διαβάστε περισσότερα

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο FrontPage 2003 Πρακτικός Οδηγός Χρήσης Το FrontPage είναι ένα πρόγραμμα δημιουργίας ιστοσελίδων και δικτυακών τόπων που επιτρέπει το σχεδιασμό ιστοσελίδων μέσα από γραφικό περιβάλλον αλλά και την ταυτόχρονη

Διαβάστε περισσότερα

Επικοινωνήστε με την Τράπεζα Πειραιώς

Επικοινωνήστε με την Τράπεζα Πειραιώς Χρήσης 1 Επικοινωνήστε με την Τράπεζα Πειραιώς Kαταγράψτε εδώ τους κωδικούς που βρίσκονται στο email ενεργοποίησης της υπηρεσίας που έχετε παραλάβει από την Τράπεζα Πειραιώς. Θα τους χρειαστείτε σε κάθε

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΗ ΕΦΑΡΜΟΓΗ 4 TΟ ΡΟΜΠΟΤΙΚΟ ΟΧΗΜΑ ROGUE BLUE

ΕΡΓΑΣΤΗΡΙΑΚΗ ΕΦΑΡΜΟΓΗ 4 TΟ ΡΟΜΠΟΤΙΚΟ ΟΧΗΜΑ ROGUE BLUE Εργαστήριο Ευφυών Συστημάτων και Ρομποτικής Τμήμα Μηχανικών Παραγωγής και Διοίκησης Πολυτεχνείο Κρήτης www.robolab.tuc.gr, τηλ: 28210 37292 / 37314 e-mail: savas@dpem.tuc.gr, kyralakis@dpem.tuc.gr ΕΡΓΑΣΤΗΡΙΑΚΗ

Διαβάστε περισσότερα

No1 ADSL ΣΤΗΝ ΕΛΛΑΔΑ. ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Ασύρµατο Router ADSL2+ T&W matr-x 4Ew

No1 ADSL ΣΤΗΝ ΕΛΛΑΔΑ. ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Ασύρµατο Router ADSL2+ T&W matr-x 4Ew No1 ADSL ΣΤΗΝ ΕΛΛΑΔΑ ΟΔΗΓΟΣ ΓΡΗΓΟΡΗΣ ΕΓΚΑΤΑΣΤΑΣΗΣ Ασύρµατο Router ADSL2+ T&W matr-x 4Ew T&W matr-x 4Ew ΠΕΡΙΕΧΟΜΕΝΑ ΣΥΣΚΕΥΑΣΙΑΣ 1 Ασύρµατο ADSL2+ Router 1 Καλώδιο Ethernet RJ45 2 Τηλεφωνικά Καλώδια RJ11

Διαβάστε περισσότερα

Blog στο Wordpress. Επιμέλεια: Δέγγλερη Σοφία

Blog στο Wordpress. Επιμέλεια: Δέγγλερη Σοφία Blog στο Wordpress Επιμέλεια: Δέγγλερη Σοφία Περιεχόμενα Μετάβαση στο blog Σύνδεση ως διαχειριστής Πίνακας ελέγχου Εμφάνιση Ρυθμίσεις Άρθρα Σελίδες Πολυμέσα Σύνδεσμοι Widgets Μετάβαση στο blog Πληκτρολογούμε

Διαβάστε περισσότερα

Ανάπτυξη ηλεκτρονικών μαθημάτων στην πλατφόρμα Open eclass. Γνωριμία με την Open eclass

Ανάπτυξη ηλεκτρονικών μαθημάτων στην πλατφόρμα Open eclass. Γνωριμία με την Open eclass Ανάπτυξη ηλεκτρονικών μαθημάτων στην πλατφόρμα Open eclass Εισαγωγή στην Open eclass Ταυτότητα της πλατφόρμας Η πλατφόρμα Open eclass είναι ένα ολοκληρωμένο Σύστημα Διαχείρισης Ηλεκτρονικών Μαθημάτων και

Διαβάστε περισσότερα

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ

ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ ΤΕΙ ΙΟΝΙΩΝ ΝΗΣΩΝ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ - ΕΙΣ. ΚΑΤΕΥΘΥΝΣΗ ΔΙΟΙΚΗΣΗΣ ΤΟΥΡΙΣΤΙΚΩΝ ΕΠΙΧΕΙΡΗΣΕΩΝ ΚΑΙ ΕΠΙΧΕΙΡΗΣΕΩΝ ΦΙΛΟΞΕΝΙΑΣ Πληροφορική I "Προγραμματισμός" B. Φερεντίνος

Διαβάστε περισσότερα

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy Σ ε λ ί δ α 1 Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy Περιεχόμενα 1. Download Arebas Easy... 2 2. Εγκατάσταση Arebas Easy... 3 3. Εγγραφή στον Arebas Server... 7 4. Παραμετροποίηση Arebas Easy...

Διαβάστε περισσότερα

Ηχείο HP Roar Plus. Άλλα χαρακτηριστικά

Ηχείο HP Roar Plus. Άλλα χαρακτηριστικά Ηχείο HP Roar Plus Άλλα χαρακτηριστικά Copyright 2014 Hewlett-Packard Development Company, L.P. Οι ονομασίες Microsoft, Windows και Windows Vista είναι σήματα κατατεθέντα στις Η.Π.Α. του ομίλου εταιρειών

Διαβάστε περισσότερα

Εγχειρίδιο χρήσης εφαρμογής τηλεπικοινωνιακών παρόχων για δημιουργία προσφορών

Εγχειρίδιο χρήσης εφαρμογής τηλεπικοινωνιακών παρόχων για δημιουργία προσφορών Εγχειρίδιο χρήσης εφαρμογής τηλεπικοινωνιακών παρόχων για δημιουργία προσφορών για τη δράση «Επιχορηγούμενες ευρυζωνικές συνδέσεις στους προπτυχιακούς πρωτοετείς φοιτητές των Πανεπιστημίων, ΤΕΙ και ΑΕΑ

Διαβάστε περισσότερα

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R216-Z

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R216-Z Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R216-Z Καλώς ήρθατε στον κόσμο των κινητών επικοινωνιών 1 Καλώς ήρθατε 2 Επισκόπηση συσκευής 3 Γρήγορο ξεκίνημα 5 Εφαρμογή Mobile Wi-Fi Web 6 Επισκόπηση εφαρμογής

Διαβάστε περισσότερα

TRAVIS TRAFFIC VIOLATION INFORMATION SYSTEM ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΗΣΗΣ ΠΑΡΑΒΑΣΕΩΝ ΦΩΤΟΕΠΙΣΗΜΑΝΣΗΣ

TRAVIS TRAFFIC VIOLATION INFORMATION SYSTEM ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΗΣΗΣ ΠΑΡΑΒΑΣΕΩΝ ΦΩΤΟΕΠΙΣΗΜΑΝΣΗΣ TRAFFIC VIOLATION INFORMATION SYSTEM ΣΥΣΤΗΜΑ ΔΙΑΧΕΙΡΗΣΗΣ ΠΑΡΑΒΑΣΕΩΝ ΦΩΤΟΕΠΙΣΗΜΑΝΣΗΣ TRAVIS-V1-2012 TRAVIS Λογισμικό Διαχείρισης Παραβάσεων Φωτοεπισήμανσης Το σύστημα διαχείρισης παραβάσεων φωτοεπισήμανσης

Διαβάστε περισσότερα

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1 Κεφάλαιο 4 Λογισμικό συστήματος Καραμαούνας Πολύκαρπος 1 4.1 Λογισμικό συστήματος (application software) Καραμαούνας Πολύκαρπος 2 Λογισμικό εφαρμογών (application software): προγράμματα για την αντιμετώπιση

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Εισαγωγή στην Πληροφορική Λογισμικό Συστήματος & Εφαρμογών ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Συντήρησης Πολιτισμικής Κληρονομιάς Γενική Δομή Υπολογιστών Λειτουργικό σύστημα Υπολογιστής

Διαβάστε περισσότερα

Διεθνής έρευνα για την εξάπλωση των Smartphones και Tablets

Διεθνής έρευνα για την εξάπλωση των Smartphones και Tablets Διαγραφή από τη λίστα Σε αυτό το τεύχος: Φεβρουάριος 2014 Mobile e-commerce από την Altec Software Mobile e-commerce από την Altec Software Διεθνής έρευνα για την εξάπλωση των Smartphones και Tablets Ετήσια

Διαβάστε περισσότερα

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης Σελίδα 1από ΤΕΙ ΚΑΒΑΛΑΣ Πτυχιακή εργασία Δικτυακή Εφαρμογή διαχείρισης ηλεκτρονικών εγγράφων υπηρεσίας. ΕΙΣΑΓΩΓΗ Μιλτιάδης Κακλαμάνης Σελίδα 2από Κατάλογος περιεχομένων ΕΙΣΑΓΩΓΗ...1 Σχετιζόμενα πρόσωπα...3

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ GPRS 1. ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ GOOGLE EARTH

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ GPRS 1. ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ GOOGLE EARTH Αχαρναί 20.7.09 ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ GPRS 1. ΟΔΗΓΙΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ GOOGLE EARTH Για τη σωστή λειτουργία του προγράμματος πρέπει να έχετε εγκαταστήσει στον υπολογιστή σας το λογισμικό χαρτογράφησης

Διαβάστε περισσότερα

Εφαρμογή Παρακολούθησης Τιμών Καυσίμων για Windows Phone 8

Εφαρμογή Παρακολούθησης Τιμών Καυσίμων για Windows Phone 8 ΑΤΕΙ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ Τμήμα Μηχανικών Πληροφορικής ΤΕ Εφαρμογή Παρακολούθησης Τιμών Καυσίμων για Windows Phone 8 ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Αναστάσιος Θεοδοσίου ( ΑΜ: Τ03358 ) Επιβλέπων: Φώτης

Διαβάστε περισσότερα

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Λειτουργικά Συστήματα Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα Στέργιος Παλαμάς, Υλικό Μαθήματος «Λειτουργικά Συστήματα», 2015-2016 Κεφάλαιο 2: Σύστημα Αρχείων Τα προγράμματα που εκτελούνται

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C Στο εργαστήριο αυτό, θα ασχοληθούμε με δύο προγραμματιστικά περιβάλλοντα για τη γλώσσα C: τον gcc μεταγλωττιστή της C σε περιβάλλον

Διαβάστε περισσότερα

Ο ΗΓΙΕΣ ΣΥΜΠΛΗΡΩΣΗΣ ΤΗΣ ΦΟΡΜΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΥΠΟΒΟΛΗΣ

Ο ΗΓΙΕΣ ΣΥΜΠΛΗΡΩΣΗΣ ΤΗΣ ΦΟΡΜΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΥΠΟΒΟΛΗΣ Ο ΗΓΙΕΣ ΣΥΜΠΛΗΡΩΣΗΣ ΤΗΣ ΦΟΡΜΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΥΠΟΒΟΛΗΣ 1 Περιεχόµενα 1. ΓΕΝΙΚΑ... 3 2. ΒΑΣΙΚΕΣ ΕΝΕΡΓΕΙΕΣ ΓΙΑ ΤΗ ΣΥΜΠΛΗΡΩΣΗ ΤΗΣ ΦΟΡΜΑΣ... 3 α. Ανάκτηση (downloading) της ηλεκτρονικής φόρµας και αποθήκευση

Διαβάστε περισσότερα

ANDROID Προγραμματισμός Εφαρμογών

ANDROID Προγραμματισμός Εφαρμογών ANDROID Προγραμματισμός Εφαρμογών Παναγιώτης Κρητιώτης ΑΜ 1607 Περιεχόμενα Εισαγωγή Βασικά Στοιχεία Χαρακτηριστικά Αρχιτεκτονική Εργαλεία Προγραμματισμού Eclipse IDE Android SDK - ADT Plugin Προσομοιωτής

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP)

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP) ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP) Για την πρόσβαση στην υπηρεσία COSMOTE TV GO για υπολογιστή, αρχικά ανοίξτε την ιστοσελίδα της υπηρεσίας www.cosmotetvgo.gr. Για τη χρήση

Διαβάστε περισσότερα

ΑΡΧΕΙΟ ΕΚΘΕΣΕΩΝ ΠΡΑΓΜΑΤΟΓΝΩΜΟΣΥΝΗΣ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ 8 ΝΟΕΜΒΡΙΟΥ 2014

ΑΡΧΕΙΟ ΕΚΘΕΣΕΩΝ ΠΡΑΓΜΑΤΟΓΝΩΜΟΣΥΝΗΣ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ 8 ΝΟΕΜΒΡΙΟΥ 2014 8 ΝΟΕΜΒΡΙΟΥ 2014 ΑΡΧΕΙΟ ΕΚΘΕΣΕΩΝ ΠΡΑΓΜΑΤΟΓΝΩΜΟΣΥΝΗΣ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΝΙΚΟΛΑΟΣ ΜΙΧΑΛΟΔΗΜΗΤΡΑΚΗΣ ΝΙΚΟΛΑΟΣ ΜΙΧΑΛΟΔΗΜΗΤΡΑΚΗΣ - ΠΡΟΓΡΑΜΜΑΤΙΣΤΗΣ ΥΠΗΡΕΣΙΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Σολωμού 41, 71306, Ηράκλειο Κρήτης τηλ/φαξ:

Διαβάστε περισσότερα

Εγχειρίδιο χρήσης εφαρμογής τηλεπικοινωνιακών παρόχων για δημιουργία προσφορών

Εγχειρίδιο χρήσης εφαρμογής τηλεπικοινωνιακών παρόχων για δημιουργία προσφορών Εγχειρίδιο χρήσης εφαρμογής τηλεπικοινωνιακών παρόχων για δημιουργία προσφορών για τη δράση «Επιχορηγούμενες ευρυζωνικές συνδέσεις στους προπτυχιακούς πρωτοετείς φοιτητές των Πανεπιστημίων, ΤΕΙ και ΑΕΑ

Διαβάστε περισσότερα

Κεφάλαιο 1.6: Συσκευές αποθήκευσης

Κεφάλαιο 1.6: Συσκευές αποθήκευσης Κεφάλαιο 1.6: Συσκευές αποθήκευσης 1.6.1 Συσκευές αποθήκευσης Μνήμη τυχαίας προσπέλασης - RAM Η μνήμη RAM (Random Access Memory Μνήμη Τυχαίας Προσπέλασης), κρατεί όλη την πληροφορία (δεδομένα και εντολές)

Διαβάστε περισσότερα

Οδηγίες εγκατάστασης Ασύρματο ADSL2+ Router ZTE ZXV10 W300 v5.2 / ZXV10 W300B v5.2.

Οδηγίες εγκατάστασης Ασύρματο ADSL2+ Router ZTE ZXV10 W300 v5.2 / ZXV10 W300B v5.2. Οδηγίες εγκατάστασης Ασύρματο ADSL2+ Router ZTE ZXV10 W300 v5.2 / ZXV10 W300B v5.2 www.otebusiness.gr Περιεχόμενα Ελάχιστες Απαιτήσεις Συστήματος... 3 Περιεχόμενα Συσκευασίας... 4 Ενδείξεις Λυχνιών...

Διαβάστε περισσότερα

GK6915 FAQ (Συχνές ερωτήσεις) για το Eee Pad TF201

GK6915 FAQ (Συχνές ερωτήσεις) για το Eee Pad TF201 GK6915 FAQ (Συχνές ερωτήσεις) για το Eee Pad TF201 Διαχείριση αρχείων... 2 Πώς να μπω στα δεδομένα μου που είναι αποθηκευμένα στο microsd, στην κάρτα SD και τη συσκευή USB;... 2 Πώς να μετακινήσω το επιλεγμένο

Διαβάστε περισσότερα

Οδηγίες Χρήσης EAP Controller Software

Οδηγίες Χρήσης EAP Controller Software Οδηγίες Χρήσης EAP Controller Software Designed by TP-Link Hellas Ltd. Professional Business Unit Επιμέλεια: Βαλάντης Οικονομόπουλος 1 Περιεχόμενα 1.1 Προσδιορισμός της Τοπολογίας του Δικτύου...2 1.2 Αρχική

Διαβάστε περισσότερα

Οδηγίες Χρήσης Ασύρματης Φορητής WiFi Κάμερας

Οδηγίες Χρήσης Ασύρματης Φορητής WiFi Κάμερας Οδηγίες Χρήσης Ασύρματης Φορητής WiFi Κάμερας Κομβίο Επαναφοράς RESET Θύρα κάρτας SD Πίσω κάλυμμα Διακόπτης λειτουργίας Θυρα Φόρτισης Οπή Βάσης στήριξης Ένδειξη λειτουργίας Μικρόφωνο Αισθητήρας στάθμης

Διαβάστε περισσότερα

Βιντεοπροβολέας δικτύου - Οδηγός χρήσης

Βιντεοπροβολέας δικτύου - Οδηγός χρήσης Βιντεοπροβολέας δικτύου - Οδηγός χρήσης Πίνακας περιεχομένων Προετοιμασία...3 Σύνδεση του βιντεοπροβολέα με τον υπολογιστή σας...3 Ενσύρματη σύνδεση... 3 Εξ αποστάσεως έλεγχος του βιντεοπροβολέα μέσω προγράμματος

Διαβάστε περισσότερα

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R207

Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R207 Σύντομος οδηγός χρήσης Vodafone Mobile Wi-Fi R207 Καλώς ήρθατε στον κόσμο των κινητών επικοινωνιών 1 Καλώς ήρθατε 2 Επισκόπηση συσκευής 3 Γρήγορο ξεκίνημα 5 Εφαρμογή Mobile Wi-Fi Web 6 Επισκόπηση εφαρμογής

Διαβάστε περισσότερα

RobotArmy Περίληψη έργου

RobotArmy Περίληψη έργου RobotArmy Περίληψη έργου Στην σημερινή εποχή η ανάγκη για αυτοματοποίηση πολλών διαδικασιών γίνεται όλο και πιο έντονη. Συνέχεια ακούγονται λέξεις όπως : βελτιστοποίηση ποιότητας ζωής, αυτοματοποίηση στον

Διαβάστε περισσότερα

MΠΑΤΑΡΙΑ ΚΑΛΩΔΙΟ USB

MΠΑΤΑΡΙΑ ΚΑΛΩΔΙΟ USB ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ Περιεχόμενα πακέτου Ξεκινώντας Περιγραφή συσκευής Εισαγωγή κάρτας SIM & MicroSD Συνδέσεις 3G και Wi-Fi Το περιβάλλον Android Εργασία με το Android Επίλυση προβλημάτων για περισσότερες

Διαβάστε περισσότερα

ΤΡΑΠΕΖΑ ΤΗΣ ΕΛΛΑΔΟΣ ΔΙΕΥΘΥΝΣΗ ΕΠΟΠΤΕΙΑΣ ΠΙΣΤΩΤΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ

ΤΡΑΠΕΖΑ ΤΗΣ ΕΛΛΑΔΟΣ ΔΙΕΥΘΥΝΣΗ ΕΠΟΠΤΕΙΑΣ ΠΙΣΤΩΤΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ ΔΙΕΥΘΥΝΣΗ ΕΠΟΠΤΕΙΑΣ ΠΙΣΤΩΤΙΚΟΥ ΣΥΣΤΗΜΑΤΟΣ ΟΔΗΓΙΕΣ ΣΥΜΠΛΗΡΩΣΗΣ ΥΠΟΔΕΙΓΜΑΤΟΣ ΓΙΑ ΤΗΝ ΗΛΕΚΤΡΟΝΙΚΗ ΥΠΟΒΟΛΗ ΣΤΟΙΧΕΙΩΝ ΡΕΥΣΤΟΤΗΤΑΣ (BSD07) (ΠΔ.Τ.Ε. 2563/19.7.2005 Ε50) Ιανουάριος 2005 ΓΕΝΙΚΑ... 4 1. Προϋποθέσεις

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΑΚΗ ΕΦΑΡΜΟΓΗ 1 ΤO ΡΟΜΠΟΤ INTELLITEK ER-2u

ΕΡΓΑΣΤΗΡΙΑΚΗ ΕΦΑΡΜΟΓΗ 1 ΤO ΡΟΜΠΟΤ INTELLITEK ER-2u Εφαρμογή 1: Το ρομπότ INTELITEK ER-2u Εργαστήριο Ευφυών Συστημάτων και Ρομποτικής Τμήμα Μηχανικών Παραγωγής και Διοίκησης Πολυτεχνείο Κρήτης www.robolab.tuc.gr, τηλ: 28210 37292 / 37314 e-mail: savas@dpem.tuc.gr,

Διαβάστε περισσότερα

Η εφαρμογή είναι βελτιστοποιημένη για όλες τις συσκευές ios και Android, με ios 9.x ή νεότερη έκδοση και Android 4.4 ή νεότερη έκδοση.

Η εφαρμογή είναι βελτιστοποιημένη για όλες τις συσκευές ios και Android, με ios 9.x ή νεότερη έκδοση και Android 4.4 ή νεότερη έκδοση. Οδηγίες βήμα προς βήμα για την εφαρμογή Με την εφαρμογή αυτή μπορείτε να χρησιμοποιήσετε ψηφιακά βιβλία (e-books) σε μορφή «Adobe Digital Editions epub» και «Adobe Digital Editions PDF», αρχεία ήχου (e-audios),

Διαβάστε περισσότερα

Φύλλο εργασίας 1 Εισαγωγή στη Ρομποτική

Φύλλο εργασίας 1 Εισαγωγή στη Ρομποτική Φύλλο εργασίας 1 Εισαγωγή στη Ρομποτική Χωριστείτε σε ομάδες 2-3 ατόμων και απαντήστε στις ερωτήσεις του φύλλου εργασίας. Δραστηριότητα 1 Συζητήστε με τα μέλη της ομάδας σας και γράψτε μια λίστα με ρομποτικές

Διαβάστε περισσότερα

Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α

Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α 1 Windows 8.1 1.1 Βασικές Έννοιες Πληροφορικής και Επικοινωνιών Εισαγωγή 19 Τι είναι ο Ηλεκτρονικός Υπολογιστής 20 Κατηγορίες Υπολογιστών 21 Κύρια μέρη ενός Προσωπικού Υπολογιστή

Διαβάστε περισσότερα

ιαχείριση Τηλεφωνικών Κλήσεων

ιαχείριση Τηλεφωνικών Κλήσεων ιαχείριση Τηλεφωνικών Κλήσεων 1 Διαχει ριση Τηλεφωνικω ν Κλη σεων ΓΕΝΙΚΗ ΠΕΡΙΓΡΑΦΗ... 3 ΔΟΜΗ ΧΡΗΣΤΩΝ ΚΑΙ ΔΙΚΑΙΩΜΑΤΑ ΕΠΙ ΤΩΝ ΤΗΛΕΦΩΝΙΚΩΝ ΚΛΗΣΕΩΝ... 3 ΣΧΗΜΑΤΙΚΗ ΑΠΕΙΚΟΝΙΣΗ... 4 ΕΙΣΕΡΧΟΜΕΝΕΣ ΚΛΗΣΕΙΣ... 5

Διαβάστε περισσότερα

Εισαγωγή στην Πληροφορική

Εισαγωγή στην Πληροφορική Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων Εισαγωγή στην Πληροφορική Ενότητα 8: Λειτουργικά Συστήματα Το περιεχόμενο του μαθήματος διατίθεται με άδεια Creative Commons εκτός και αν αναφέρεται διαφορετικά

Διαβάστε περισσότερα

Ημερομηνία Παράδοσης: 4/4/2013

Ημερομηνία Παράδοσης: 4/4/2013 Δράση 9.14 / Υπηρεσία εντοπισμού λογοκλοπής Κυρίως Παραδοτέο / Σχεδιασμός και ανάπτυξη λογισμικού (λογοκλοπής) και βάσης δεδομένων (αποθετηρίου) Επιμέρους Παραδοτέο 9.14.1.4 / Πληροφοριακό σύστημα υπηρεσίας

Διαβάστε περισσότερα

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες

Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες Μέρος 3 ο : Βασικές Έννοιες για δυναμικές ιστοσελίδες Εισαγωγή-Σκοπός. Τρόποι δημιουργίας δυναμικών ιστοσελίδων. Dynamic Web Pages. Dynamic Web Page Development Using Dreamweaver. Τρόποι δημιουργίας δυναμικών

Διαβάστε περισσότερα

Π ΑΝΕΠΙΣΤΗΜΙΟ Π ΑΤΡΩΝ Π ΟΛΥΤΕΧΝΙΚΗ Σ ΧΟΛΗ Τ ΜΗΜΑ Μ ΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ Π ΛΗΡΟΦΟΡΙΚΗΣ Κ ΑΤΑΝΕΜΗΜΕΝΑ Σ ΥΣΤΗΜΑΤΑ ΙΙ

Π ΑΝΕΠΙΣΤΗΜΙΟ Π ΑΤΡΩΝ Π ΟΛΥΤΕΧΝΙΚΗ Σ ΧΟΛΗ Τ ΜΗΜΑ Μ ΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ Π ΛΗΡΟΦΟΡΙΚΗΣ Κ ΑΤΑΝΕΜΗΜΕΝΑ Σ ΥΣΤΗΜΑΤΑ ΙΙ Π ΑΝΕΠΙΣΤΗΜΙΟ Π ΑΤΡΩΝ Π ΟΛΥΤΕΧΝΙΚΗ Σ ΧΟΛΗ Τ ΜΗΜΑ Μ ΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ Π ΛΗΡΟΦΟΡΙΚΗΣ Κ ΑΤΑΝΕΜΗΜΕΝΑ Σ ΥΣΤΗΜΑΤΑ ΙΙ Αδάμ Γιώργος Γκορτσίλας Δημήτρης Οικονομίδης Γιάννης 2009 TARIFA Project 1. Περιγραφή προβλήματος-αρχιτεκτονική

Διαβάστε περισσότερα

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων

A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων A3.3 Γραφικά Περιβάλλοντα Επικοινωνίας και Διαχείριση Παραθύρων Τι θα μάθουμε σήμερα: Να αναφέρουμε τα κύρια χαρακτηριστικά ενός Γραφικού Περιβάλλοντος Επικοινωνίας Να εξηγούμε τη χρήση των κουμπιών του

Διαβάστε περισσότερα

για τις ρυθμίσεις LabView μέσα από το κανάλι και του καλωδίου USB.

για τις ρυθμίσεις LabView μέσα από το κανάλι   και του καλωδίου USB. 1o ΕΠΑΛ- Ε.Κ. Συκεών -Τομέας: Ηλεκτρονικής, Ηλεκτρολογίας και Αυτοματισμού Εκπαιδευτικοί: Μπουλταδάκης Στέλιος Μαυρίδης Κώστας Δραστηριότητα: 11 Μάθημα: Εργαστήριο Δικτύων Υπολογιστών Αντικείμενο : Μέτρηση

Διαβάστε περισσότερα

ΟΔΗΓΟΣ ΧΡΗΣΗΣ WEBMAIL ΤΕΙ ΚΑΛΑΜΑΤΑΣ

ΟΔΗΓΟΣ ΧΡΗΣΗΣ WEBMAIL ΤΕΙ ΚΑΛΑΜΑΤΑΣ ΟΔΗΓΟΣ ΧΡΗΣΗΣ WEBMAIL ΤΕΙ ΚΑΛΑΜΑΤΑΣ ΠΕΡΙΕΧΟΜΕΝΑ 1. URL Διεύθυνση WebMail... 3 2. Εγκατάσταση Πιστοποιητικού Ασφάλειας... 3 2.1 Εγκατάσταση Πιστοποιητικού στον Internet Explorer... 3 2.2 Εγκατάσταση Πιστοποιητικού

Διαβάστε περισσότερα

Λογισμικό - Προγράμματα

Λογισμικό - Προγράμματα Λογισμικό - Προγράμματα Πρόγραμμα είναι ένα σύνολο εντολών, βάση των οποίων ο υπολογιστής εκτελεί μια συγκεκριμένη εργασία Λογισμικό (Software) Το σύνολο των προγραμμάτων Προγράμματα Προγράμματα συστήματος

Διαβάστε περισσότερα

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων

Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι ερωτοαπαντήσεων Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Κατασκευή δικτυακής εφαρμογής στην αρχιτεκτονική ios iphone που υλοποιεί ένα παιχνίδι Παρτώνας Αλέξανδρος Επιβλέπων: Δρ.

Διαβάστε περισσότερα

DVR-422. DVR 422 ver 1.1 www.tele.gr

DVR-422. DVR 422 ver 1.1 www.tele.gr Συσκευή καταγραφής εικόνας DVR-422 Οδηγίες χρήσης 1 Χειριστήρια και µέρη της συσκευής Ενδεικτικό φόρτισης Ενδεικτικό λειτουργίας Οθόνη Έναρξη λειτουργίας Ακροδέκτης τροφοδοσίας Κουµπί ΟΚ Κουµπί Μενού Μικρόφωνο

Διαβάστε περισσότερα

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ. ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ Ηλεκτρονική Υποβολή Α.Π.Δ. ΠΕΡΙΕΧΟΜΕΝΑ 1) Είσοδος στην εφαρμογή 2) Δημιουργία Περιόδου Υποβολής 2.α) Ακύρωση Περιόδου Υποβολής 3) Μέθοδος Υποβολής: Συμπλήρωση Φόρμας 3.α) Συμπλήρωση

Διαβάστε περισσότερα

Academia Financials Γενική Λογιστική ΠΕΡΙΕΧΟΜΕΝΑ

Academia Financials Γενική Λογιστική ΠΕΡΙΕΧΟΜΕΝΑ 05010103/03/12 ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ Α. ΕΓΚΑΤΑΣΤΑΣΗ... 1 1. ΤΕΧΝΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΕΓΚΑΤΑΣΤΑΣΗΣ... 1 1.1. ΠΕΡΙΓΡΑΦΗ ΕΦΑΡΜΟΓΩΝ ΤΗΣ DATA COMMUNICATION... 1 1.2. ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΕΦΑΡΜΟΓΗΣ... 1 1.3. ΤΟΠΟΛΟΓΙΕΣ

Διαβάστε περισσότερα

Γκέγκα Ευρώπη Κωστοπούλου Ειρήνη

Γκέγκα Ευρώπη Κωστοπούλου Ειρήνη Γκέγκα Ευρώπη egkegka@it.teithe.gr Κωστοπούλου Ειρήνη eirkost@it.teithe.gr 2 ο σε επισκεψιμότητα των χρηστών στο web καθημερινά Κοινωνικό δίκτυο με τους περισσότερους χρήστες 1 ο σε προτίμηση των φοιτητών

Διαβάστε περισσότερα

Τα ηλεκτρονικά μέρη του ρομπότ Επιλογή των μονάδων εισόδου εξόδου ανάλογα το μοντέλο που θέλουμε να κατασκευάσουμε

Τα ηλεκτρονικά μέρη του ρομπότ Επιλογή των μονάδων εισόδου εξόδου ανάλογα το μοντέλο που θέλουμε να κατασκευάσουμε 1 Τα ηλεκτρονικά μέρη του ρομπότ Επιλογή των μονάδων εισόδου εξόδου ανάλογα το μοντέλο που θέλουμε να κατασκευάσουμε 2 Η υπολογιστική μονάδα Είσοδοι για τους κινητήρες Είσοδος για USB stick USB πόρτα για

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP)

ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP) ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΥΠΗΡΕΣΙΑ COSMOTE TV GO ΣΕ ΥΠΟΛΟΓΙΣΤΗ (PC/LAPTOP) Για την πρόσβαση στην υπηρεσία COSMOTE TV GO για υπολογιστή, αρχικά ανοίξτε την ιστοσελίδα της υπηρεσίας www.cosmotetvgo.gr. Για τη χρήση

Διαβάστε περισσότερα

Ενσωματωμένα Συστήματα

Ενσωματωμένα Συστήματα Ενσωματωμένα Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ ARDUINO Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 8 & 9 18/10/07 Αλγόριθμος: Βήμα προς βήμα διαδικασία για την επίλυση κάποιου προβλήματος. Το πλήθος των βημάτων πρέπει να είναι πεπερασμένο. Αλλιώς: Πεπερασμένη

Διαβάστε περισσότερα

Θέματα Ατομικής Διπλωματικής Εργασίας Ακαδημαϊκό Έτος 2017/2018. Γεωργία Καπιτσάκη (Επίκουρη Καθηγήτρια)

Θέματα Ατομικής Διπλωματικής Εργασίας Ακαδημαϊκό Έτος 2017/2018. Γεωργία Καπιτσάκη (Επίκουρη Καθηγήτρια) Θέματα Ατομικής Διπλωματικής Εργασίας Ακαδημαϊκό Έτος 2017/2018 Γεωργία Καπιτσάκη (Επίκουρη Καθηγήτρια) ΠΕΡΙΟΧΗ Α: ΕΦΑΡΜΟΓΕΣ ΜΕ ΑΙΣΘΗΤΗΡΕΣ ΓΙΑ ΕΠΙΓΝΩΣΗ ΣΥΓΚΕΙΜΕΝΟΥ Οι αισθητήρες μας δίνουν τη δυνατότητα

Διαβάστε περισσότερα