ROBOARM II. β I f,/)! ο (^ U U- Πτυχιακή TEI ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Λογισμικό Εφαρμογής. Γαβαλάς Φώτιος Χαραλαμττίδης Νικόλαος



Σχετικά έγγραφα
: Aύξηση φόρου εισοδήµατος, και µείωση µισθών

ΕΦΗΜΕΡΙΣΤΗΣ ΚΥΒΕΡΝΗΣΕΩΣ

TEI ΚΑΛΑΜΑΤΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ

ΙΣΟΚΡΑΤΗΣ ΤΡΑΠΕΖΑ ΝΟΜΙΚΩΝ ΠΛΗΡΟΦΟΡΙΩΝ ΣΑ

ΥΠΟΔΕΙΓΜΑ ΣΥΜΠΛΗΡΩΣΗΣ

ΜΑΘΗΜΑΤΙΚΑ ΣΤ ΔΗΜΟΤΙΚΟΥ ΑΣΚΗΣΕΙΣ ΓΝΩΣΕΩΝ ΔΕΞΙΟΤΗΤΩΝ. λίτρα νερό. Πόσο νερό χρειάζεται ακόμα για να γεμίσει το δοχείο;

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

ΤΕΙ ΚΑΛΑΜΑΤΑΣ. ΑΡΓΥΡΗ ΔΗΜΗΤΡΑ Σχολής Διοίκησης και Οικονομίας Τμήμα Χρηματοοικονομικής και Ελεγκτικής Επιστήμης Εισηγητής :Λυγγίτσος Αλέξανδρος

I.Επί της Αρχής του σχεδίου Νόµου: ΙΙ. Επί των άρθρων του σχεδίου Νόµου: ΕΙΣΗΓΗΤΙΚΗ ΕΚΘΕΣΗ

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

ΠΕΡΙΕΧΟΜΕΝΑ ΕΙΣΑΓΩΓΙΚΟ ΣΗΜΕΙΩΜΑ 13 Α' ΜΕΡΟΣ ΑΠΟ ΤΟΝ ΠΟΛΕΜΟ ΤΟΥ 1897 ΣΤΟ ΓΟΥΔΙ

Ο ΠΡΟΕΔΡΟΣ ΤΗΣ ΒΟΥΛΗΣ ΤΩΝ ΕΛΛΗΝΩΝ. Άρθρο πρώτο.

Παραδοσιακή ρώσικη χριστουγεννιάτικη ιστορία Διασκευή από την Μπιλιούρη Αργυρή

Οι στρατηγικές πολιτικές (διπλωµατικές) αρετές του Αγησιλάου (3 διδακτικές ώρες)

Εφαρμογές Υπολογιστών

Περιεχόμενα. Εισαγωγή... 7 ΜΕΡΟΣ Α Κεφάλαιο 1. Κεφάλαιο 2. Κεφάλαιο 3. Κεφάλαιο 4. Κεφάλαιο 5. Κεφάλαιο 6. Κεφάλαιο 7. Κεφάλαιο 8.

A1. Να γράψετε στο τετράδιό σας την περίληψη του κειμένου που σας δόθηκε ( λέξεις). Μονάδες 25

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΣΥΝΕΔΡΙΑΣΗ Ε. Παρασκευή 10 Οκτωβρίου 2014

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΤΡΙΤΗ 29 ΜΑΪΟΥ 2001 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ: ΑΡΧΑΙΑ ΕΛΛΗΝΙΚΑ

Α1. (α). ώστε τον ορισμό του προβλήματος (Μονάδες 3)

Α π ο φ α σ ί ζ ο υ µ ε

Επίσηµη Εφηµερίδα της Ευρωπαϊκής Ένωσης. (Μη νομοθετικές πράξεις) ΚΑΝΟΝΙΣΜΟΙ

Τμήμα Ζωικής Παραγωγής ΤΕΙ Δ. Μακεδονίας, Παράρτημα Φλώρινας

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

ΠΕΡΙΛΗΨΗ Λήψη απόφασης σχετικά με το υπ' αριθμ. 5016/ αίτημα της Ευαγγελίας Σκουντζούρη κλπ που αφορά στο ΟΤ 823.

ΑΝΩΤΑΤΟ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΗΠΕΙΡΟΥ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΧΑΪΔΑΡΗΣ ΧΡ. ΝΙΚΟΛΑΟΣ ΑΜ:6805. Εισηγητής: Σωτηρόπουλος Ιωάννης

Ιστορία της Πανεπιστημιακής Εκπαίδευσης στην Ελλάδα: Το παράδειγμα των Φιλοσοφικών Σχολών

ΕΡΓΟ: «ΕΦΑΡΜΟΓΕΣ ΕΙΚΟΝΙΚΗΣ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑΣ ΣΤΗ ΒΟΙΩΤΙΑ: ΜΑΝΤΕΙΟ ΤΡΟΦΩΝΙΟΥ ΚΑΙ ΜΥΚΗΝΑΪΚΗ ΘΗΒΑ»

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΣΥΝΕΔΡΙΑΣΗ ΡΜ. Πέµπτη 7 Μαρτίου 2013

Υ π ά ρ χ ο υ ν α ν τ ι κ ε ι μ ε ν ι κ έ ς η θ ι κ έ ς α ξ ί ε ς ;

ΕΚΘΕΣΗ ΓΙΑ ΤΟ ΕΒΕΑ. Το Ασφαλιστικό του 21ο αιώνα; Ανάγκη αναστοχασμού για μια νέα αρχή

ΚΑΤΑΣΤΑΤΙΚΟ ΚΕΝΤΡΟΥ ΝΕΟΤΗΤΑΣ. ΙΔΡΥΣΗ Ιδρύεται Κέντρο Νεότητας µε την επωνυµία «Κέντρο Νεότητας... µε έδρα...

Δομή Επανάληψης Άσκηση 1 - μικρότερο/μεγαλύτερο ως φίλτρο Να γραφεί αλγόριθμος σε ψευδογλώσσα που να διαβάζει συνεχώς αριθμούς μέχρι να διαβάσει τον

Η διδακτική ενότητα του σχολικού εγχειριδίου «Η ελληνική κοινωνία στα χρόνια της δουλείας- Η οικονομία» Στόχοι διδασκαλίας της συγκεκριμένης ενότητας

Κωδ : Οι κωδικοί αυτοί συμπληρώνονται από την φορολογική διοίκηση. Κωδ. 003: Γράψτε τη Δ.Ο.Υ. της έδρας ή του κεντρικού της επιχείρησής σας.

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΝΟΜΟΣ ΕΥΒΟΙΑΣ ΣΧΟΛΙΚΗ ΕΠΙΤΡΟΠΗ ΜΟΝΑΔΩΝ Α ΒΑΘΜΙΑΣ ΕΚΠ/ΣΗΣ ΕΡΓΑΣΙΑ:

Η ευσέβεια, η αξιοπιστία και η ακεραιότητα του Αγησιλάου (1 διδακτική ώρα)

ΣΥΝΕΝΤΕΥΞΗ ΤΥΠΟΥ. Η ολοκληρωμένη προσέγγιση θα εφαρμοστεί με τα παρακάτω Εργαλεία

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

Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ Λυκείου

ÖÑÏÍÔÉÓÔÇÑÉÏ ÈÅÙÑÇÔÉÊÏ ÊÅÍÔÑÏ ÁÈÇÍÁÓ - ÐÁÔÇÓÉÁ

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΣΥΝΕΔΡΙΑΣΗ Ο. Τετάρτη 8 Ιουλίου 2015

Ερωτήσεις πολλαπλής επιλογής

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

στο σχέδιο νόµου «Ρύθµιση συνταξιοδοτικών θεµάτων του Δηµοσίου και άλλες διατάξεις» Επί του άρθρου 1 ΑΙΤΙΟΛΟΓΙΚΗ ΕΚΘΕΣΗ

«ΑΝΩ ΛΙΟΣΙΑ: ΤΟΠΙΚΗ ΙΣΤΟΡΙΑ, ΠΕΡΙΒΑΛΛΟΝ, ΠΡΟΚΛΗΣΕΙΣ, ΠΡΟΟΠΤΙΚΕΣ»

Ε.Ε. Π α ρ.ι(i), Α ρ.3646, 25/10/2002. ΤΗΣ ΕΠΙΣΗΜΗΣ ΕΦΗΜΕΡΙΔΑΣ ΤΗΣ ΔΗΜΟΚΡΑΤΙΑΣ Αρ της 25ης ΟΚΤΩΒΡΙΟΥ 2002

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΣΥΝΕΔΡΙΑΣΗ Ρ. Τετάρτη 7 Μαρτίου 2012

Ε.Π. ΕΚΠΑΙΔΕΥΣΗ ΚΑΙ ΑΡΧΙΚΗ ΕΠΑΓΓΕΛΜΑΤΙΚΗ ΚΑΤΑΡΤΙΣΗ, (ΕΠΕΑΕΚ ΙΙ) ΜΕΤΡΟ 2.5, ΕΝΕΡΓΕΙΑ 2.5.1, ΚΑΤΗΓΟΡΙΑ ΠΡΑΞΕΩΝ α

ΒΡΕΘΗΚΑΜΕ στην Ελεύθερη Ελλάδα και πηγαίναμε πια από χωριό

ΑΠΟΣΠΑΣΜΑ. Από το υπ' αριθμ. 17/ Πρακτικό της Οικονομικής Επιτροπής Ιονίων Νήσων

Η ΕΠΑΓΓΕΛΜΑΤΙΚΗ & ΕΠΙΧΕΙΡΗΜΑΤΙΚΗ ΔΡΑΣΤΗΡΙΟΠΟΙΗΣΗ ΤΩΝ ΕΛΛΗΝΩΝ ΤΗΣ ΔΙΑΣΠΟΡΑΣ ΜΕΤΑ ΤΟΝ Β ΠΑΓΚΟΣΜΙΟ ΠΟΛΕΜΟ ΚΑΙ Η ΕΠΙΔΡΑΣΗ ΤΗΣ ΣΤΟ ΕΘΝΙΚΟ ΚΕΝΤΡΟ

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΣΥΝΕΔΡΙΑΣΗ ΞΖ. Τρίτη 30 Ιουνίου 2015

6 η Ενότητα Στρατηγική σε επιχειρηματικό επίπεδο

ΙΙ. ΤΟ ΒΑΡΟΣ ΤΗΣ ΑΠΟΔΕΙΞΗΣ

Η Φυσική με Πειράματα

Ο κόσμος των επιχειρήσεων, τησ οικονομιασ και των αγορών: επιχειρηματικές δραστηριότητες, επιχειρηματικοί κίνδυνοι και επιχειρηματικές πρακτικές

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

Πάνω Λεύκαρα. Αγαπίου Αθανασία-Αλέξη Τιμόθεος-Χαραλάμπους Γιώργος-Χατζηγιάγκου Δήμητρα

Μια Ιστορία Πολλοί Συγγραφείς

Αξιολόγηση Προγράμματος Αλφαβητισμού στο Γυμνάσιο Τρίτο Έτος Αξιολόγησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

4 ο ΛΥΚΕΙΟ ΛΑΜΙΑΣ ΟΙΚΟΝΟΜΙΚΕΣ ΚΑΙ ΚΟΙΝΩΝΙΚΕΣ ΣΥΝΕΠΕΙΕΣ ΤΗΣ ΟΙΚΟΝΟΜΙΚΗΣ ΚΡΙΣΗΣ ΕΚΘΕΣΗ ΕΡΕΥΝΗΤΙΚΗΣ ΕΡΓΑΣΙΑΣ ΜΕ ΘΕΜΑ. Ε ιµέλεια Εργασίας :Τµήµα Α4

Ο ΠΡΟΕ ΡΟΣ ΤΗΣ ΕΛΛΗΝΙΚΗΣ ΗΜΟΚΡΑΤΙΑΣ Εκδίδοµε τον ακόλουθο νόµο που ψήφισε η Βουλή:

ΘΕΜΑ: "ΕΦ Α ΡΜ ΟΓΕΣ Τ Η Σ Σ Τ Α Τ ΙΣ Τ ΙΚ Η Σ ΣΤΟ ΕΜ ΠΟΡΙΟ"

Εμβαθύνοντας στα Ελληνικά

Η κυπαρική θεωρία στη σύγχρονη εκδοχή της υποστηρίζει

(ΦΕΚ Α ) Ο ΠΡΟΕΔΡΟΣ ΤΗΣ ΕΛΛΗΝΙΚΗΣ ΔΗΜΟΚΡΑΤΙΑΣ. Εκδίδομε τον ακόλουθο νόμο που ψήφισε η Βουλή: Αρθρο πρώτο

^, ΝΟΙΚΙΑ. ,υ, ^ήματι,^ I iCS0,1,s.' σή μας ή

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΝΟΜΟΣ ΒΟΙΩΤΙΑΣ ΔΗΜΟΣ ΟΡΧΟΜΕΝΟΥ Αρ.Πρωτ.: 10829/ Α Π Ο Σ Π Α Σ Μ Α

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

ΟΝΟΜΑ ΣΧΟΛΕΙΟΥ: ΙΑ ημοτικό Σχολείο Πάφου (Αγίου Σπυρίδωνα)

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

ΚΟΙΝΟΠΟΙΗΣΗ : Ως συν/νος πίνακας ΘΕΜΑ : «Καταβολή Δωροσήμου Χριστουγέννων 2015 σε εργατοτεχνίτες οικοδόμους»

Αυτός είναι σήμερα ο Σύλλογός μας

Τ.Ε.Ι. ΚΑΛΑΜΑΤΑΣ ΣΧΟΛΗ: ΤΕΧΝΟΛΟΓΙΑΣ ΓΕΩΠΟΝΙΑΣ ΤΜΗΜΑ: ΤΕΧΝΟΛΟΓΙΑΣ ΓΕΩΡΓΙΚΩΝ ΠΡΟΪΟΝΤΩΝ ΓΙΩΡΓΟΣ ΜΑΧΑΙΡΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

Δ Ι Η Μ Ε Ρ Ι Δ Α Μ Ε Α Φ Ο Ρ Μ Η Τ Η Ν Ε Ο Ρ Τ Η Τ Ω Ν Τ Ρ Ι Ω Ν Ι Ε Ρ Α Ρ Χ Ω Ν

Πορεία του Φ.Ο.Σ. στα χιόνια της Κυρά-Βγένας

ΑΙΤΙΟΛΟΓΙΚΗ ΕΚΘΕΣΗ. Άρθρο 4 Κοινοί διαδικαστικοί κανόνες

ΠΡΟΣ: ΚΟΙΝ: ΘΕΜΑ: Ενηµερωτικό σηµείωµα για το πρόβληµα της παράνοµης υλοτοµίας και ειδικά αυτό της καυσοξύλευσης

Σε ποιες κατηγορίες μειώνεται η σύνταξη από 1/1/2009 (σε εφαρμογή του Ν.3655/2008)

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

Όλα όσα πρέπει να γνωρίζουν οι απόφοιτοι των ΕΠΑΛ για τις πανελλαδικές εξετάσεις

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

ΑΠΟΦΑΣΗ 34750/2006 (Αριθμός καταθέσεως πράξεως 43170/2006) ΤΟ ΠΟΛΥΜΕΛΕΣ ΠΡΩΤΟΔΙΚΕΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΙΑΔΙΚΑΣΙΑ ΕΚΟΥΣΙΑΣ ΔΙΚΑΙΟΔΟΣΙΑΣ ΣΥΓΚΡΟΤΗΘΗΚΕ από

Υπό Παναγιώτη Δαλκαφούκη, μέλους Ένωσης Ελλήνων Ποινικολόγων

ΤΕΧΝΙΚΗ ΠΕΡΙΓΡΑΦΗ ΠΡΟΜΗΘΕΙΑΣ ΚΑΙ ΕΓΚΑΤΑΣΤΑΣΗΣ ΣΥΣΤΗΜΑΤΟΣ ΕΝΔΟΕΠΙΚΟΙΝΩΝΙΑΣ ΚΛΗΣΗΣ ΑΔΕΛΦΗΣ ΣΤΟ ΚΤΙΡΙΟ ΠΑΤΕΡΑ ΤΟΥ Γ.Ν.Α.

ΑΝΑΚΟΙΝΩΣΗ ΥΠ ΑΡΙΘΜ. ΣΟΧ 3/2015. Για την πρόσληψη Πτυχιούχων Φυσικής Αγωγής. με σύμβαση εργασίας Ιδιωτικού Δικαίου Ορισμένου Χρόνου (Ι.Δ.Ο.Χ.

Ο συγγραφέας χρησιμοποιεί συνδυασμό μεθόδων για την ανάπτυξη της έβδομης παραγράφου.

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ

ΒΙΟΛΟΓΙΑ ΓΕΝΙΚΗΣ ΠΑΙ ΕΙΑΣ 2010 ΕΚΦΩΝΗΣΕΙΣ

ΕΛΕΓΧΟΣ ΑΝΑΠΤΥΞΗΣ Ι ΙΩΤΙΚΗΣ ΕΚΠΑΙ ΕΥΣΗΣ Ο ΗΓΟΣ

Τοποθέτηση Δημάρχου Γ. Πατούλη. για τεχνικό πρόγραμμα 2010

Τα πέντε κριτήρια που πρέπει να ικανοποιεί ένας αλγόριθμος είναι:

Πρότυπο Σχέδιο Δράσης για τα Συμβούλια Ένταξης Μεταναστών

ΣΧΟΛΗ ΕΘΝΙΚΗΣ ΑΜΥΝΑΣ ΠΡΟΚΗΡΥΞΗ

ΑΠΑΝΤΗΣΕΙΣ. Επιμέλεια: Ομάδα Φιλολόγων της Ώθησης

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

Υποψήφιοι Σχολικοί Σύμβουλοι

Transcript:

β I f,/)! ο (^ U U- TEI ΚΑΒΑΛΑΣ Πτυχιακή ROBOARM II Λογισμικό Εφαρμογής Γαβαλάς Φώτιος Χαραλαμττίδης Νικόλαος Επιβλέττίΐ'ν Καθηγητής Δρ. Καμπουρλάζος

RoboArm II Ευχαριστούμε Θερμά Τον Δρ. Καμπουρλάζο και όλους τους καθηγητές της Βιομηχανικής Πληροφορικής για την βοήθεια και τις γνώσεις που μας προσέφεραν για την υλοποίηση της πτυχιακής άσκησης. ΤΕΙ ΚΑΒΑΛΑΣ

Περιεχόμενα Περιεχόμενα... Αρχή λειτουργίας βηματικών κινητήρων... Τελικός Κώδικας - Microcontroller Master... Τελικός Κώδικας - Microcontroller Slave... Λογικά διαγράμματα - Microcontroller Master... Λογικά διαγράμματα - Microcontroller Slave... ΕΛΕΓΧΟΣ ΛΟΓΙΣΜΙΚΟΥ Εγχειρίδιο χρήσής... Χρηστικοτητα Εττίλογος 83 107 113.. 116 ΤΕΙ ΚΑΒΑΛΑΣ

Βηματικοί Κινητήρες Αρχή λειτουργίας βηματικών κινητήρων Υττάρχουν αρκετοί τύποι βηματικών κινητήρων (motor), όπως μονοπολικοί, διπολικοί, μονοφασικοί, πολυφασικοί, κ.λ.π Μονοφασικοί βηματικοί κινητήρες χρησιμοποιούνται αρκετά σε ρολόγια quartz. Στους βηματικούς κινητήρες τύπου ΡΜ υπάρχει ένας μόνιμος μαγνήτης που λέγεται ρότορ, και πηνία στο σώμα του κινητήρα που λέγεται στάτορ. Στο σχήμα αριστερά, βλέπετε ένα τετραπολικό βηματικό κινητήρα του οποίου το βήμα είναι 90 μοίρες. Στους τετραπολικούς κινητήρες, κάθε δύο απέναντι πηνία λειτουργούν σαν ζευγάρια. Δηλαδή το πηνίο χκαι το πηνίο χ όπως και το υ με το ϋ λειτουργούν ταυτόχρονα με ανάποδη όμως μαγνητική ροή. Για παράδειγμα τα πηνία νκαι ^βρίσκονται στον κάτω και επάνω πόλο, και είναι τοποθετημένα έτσι ώστε όταν περάσει ρεύμα από μέσα τους να παράγουν αντίθετη μαγνητική ροή. Το ίδιο ισχύει και για τα άλλα δύο πηνία χκαι χ. ΤΕΙ ΚΑΒΑΛΑΣ

Βηματικοί Κινητήρες Η περιστροφή του κινητήρα, γίνεται με την ροή ρεύματος μέσα από τα πηνία X, 5<, Υκαι Ϋ. Η ταχύτητα περιστροφής όπως και η φορά, ελέγχονται με συνδυασμό παλμικών ρευμάτων που ρέουν μέσα από τα δύο αυτά ζευγάρια πηνίων. Λεξιόστροφη περιστροφή ΧΙΧΙΥΙΫ Τα πηνία X, X, Υκαι Υ οδηγούνται με τις ακόλουθες παλμοσειρές για κάθε βήμα. Μοίρες ανά X X Υ Υ ^μα 0 1 0 1 0 1 0 0 1 90 1 0 1 0 180 0 1 1 0 270 "0" = Λογικό 0 - "1" = Λογικό 1 Αριστερόστροφη περιστροφή χιχίγΐϋ Ταπηνία X, X, Υκαι Ϋ οδηγούνται με τις ακόλουθες παλμοσειρές για κάθε βήμα. Μοίρες ανά X X Υ? ^ μα 0 Γ [ Γ 0 ι -90 0 1 1 ο. ι 1 θ 1 0-180 0 1-270 "0" = Λογικό 0 - "1" = Λογικό 1 ΤΕΙ ΚΑΒΑΛΑΣ

Βηματικοί Κινητήρες Όπως φαίνεται από τις παραπάνω εικόνες, ο ρότορ μένει σταθερός ανάμεσα σε δύο πόλους του στάτορ. Όταν ένα ζευγάρι πηνίων του στάτορ, πάρει ρεύμα τότε δημιουργείται ηλεκτρομαγνητικό πεδίο που επιδρά στον μόνιμο μαγνήτη του ρότορ, και παράγεται κίνηση του ρότορ κατά ένα βήμα. Ένα χαρακτηριστικό των βηματικών κινητήρων είναι πως τα βήματα της κίνησης τους μπορούν να ελεγχθούν με μεγάλη ακρίβεια. Επίσης η ροπή που παρουσιάζουν είναι αρκετά μεγάλη έτσι ώστε να υπάρχει η δυνατότητα σταματήματος της περιστροφής σε οποιοδήποτε βήμα (γωνία). Ό βηματικός κινητήρας του RoboArm είναι 48 βημάτων (Steps) και κάθε βήμα του ισούται με 7.5 μοίρες. Ό τρόπος οδήγησης (περιστροφής), είναι ίδιος όπως προαναφέρθηκε, δηλαδή με εφαρμογή παλμορευμάτων στα πηνία χ, χ, γκαι Ϋ. ΤΕΙ ΚΑΒΑΛΑΣ

Βηματικοί Κινητήρες Στον ττίνακα που ακολουθεί μπορείτε να δείτε το συνδυασμό που πρέπει να εφαρμοστεί ατά πηνία για κάθε βήμα δεξιόστροφης περιστροφής. Μοίρες ανά βήμα X X Υ Υ Μοίρες ανά Ρήμα X X Υ Υ 0 1 0 1 0.0 0 1 0 1 180.0 1 0 0 1 7.5 1 0 0 1 187.5 1 0 1 0 15.0 1 0 1 0 195.0 0 1 1 0 22.5 0 1 1 0 202.5 0 1 0 1 30.0 0 1 0 1 210.0 1 0 0 1 37.5 1 0 0 1 217.5 1 0 1 0 45.0 1 0 1 0 225.0 0 1 1 0 52.5 0 1 1 0 232.5 0 1 0 1 60.0 0 1 0 1 240.0 1 0 0 1 67.5 1 0 0 1 247.5 1 0 1 0 75.0 1 0 1 0 255.0 0 1 1 0 82.5 0 1 1 0 262.5 0 1 0 1 90.0 0 1 0 1 270.0 1 0 0 1 97.5 1 0 0 1 277.5 1 0 1 0 105.0 1 0 1 0 285.0 0 i 1 0 112.5 0 1 1 0 292.5 0 1 0 1 120.0 0 1 0 1 300.0 1 0 0 1 127.5 1 0 0 1 307.5 1 0 1 0 135.0 1 0 1 0 315.0 0 1 1 0 142.5 0 1 1 0 322.5 0 1 0 1 150.0 0 1 0 1 330.0 1 0 0 1 157.5 1 0 0 1 337.5 1 0 1 0 165.0 1 0 1 0 345.0 0 1 1 0 172.5 0 1 1 0 352.5 ΤΕΙ ΚΑΒΑΛΑΣ

Βηματικοί Κινητήρες Single-Coil Excitation - κάθε διαδοχική σπείρα ενεργοποιείται σε κάθε βήμα. Step Coil 4 Coil 3 Γ Coil 2 ir t 'o iir a i a.l on off off ' m a.2 off on off a.3 off off on a.4 off off off 0^ 0^ Ι ΐ - ^ Ι Ι Ε m m 1 i E m 1 u m ΤΕΙ ΚΑΒΑΛΑΣ

Βηματικοί Κινητήρες Two-Coil Excitation - To διαδοχικό ζευγάρι των παρακείμενων σπειρών ενεργοποιείται σε κάθε βήμα. b.l on on off b.2 off on on m mxm ' fff m m\m m»" mxk. m m b.3 off off on 1 b.4 on off off ΤΕΙ ΚΑΒΑΛΑΣ

Η παρεμβολή των δύο ακολουθιών θα προκαλέσει τον κινητήρα να κινητέ με μισό-βήμα (half-step) [ Step Coil 4 ItCoil 3 Ig Coil 2 1 1 0 0 1 1 ; ' ' m a.l on off off 1 f E b.l on on off off a.2 off on off off b.2 off 0 on off a.3 off off on off b.3 off off on on a.4 off off off on miii I X IE "W m l-^ie I'M m\m m 1 i E m III 3IX E m m ΤΕΙ ΚΑΒΑΛΑΣ

b.4 on off off l i m Επεξήγηση Τελικού Κώδικα Τελικός Κώδικας - Microcontroller Master ο Master microcontroller, είναι ένας microcontroller που αναλαμβάνει να πάρει όλες τις αποφάσεις για την κίνηση και λειτουργία του Ρομποτικού Βραχίονα Roboarm II. Διαβάζει τις πληροφορίες από τα αισθητήρια (Τερματικοί Διακόπτες) και από το Numpad. Και στέλνει δεδομένα στην οθόνη (για εμφάνιση δεδομένων στον χρήστη) και στον Microcontroller Slave (για επεξεργασία και κίνηση των βηματικών κινητήρων). Οι Microcontrollers είναι της εταιρίας Atmel (www.atmel.com) και μοντέλα AT90s8515. Τα βασικά χαρακτηριστικά του είναι όπως φαίνονται παρακάτω. (ΤΟ) ΡΒΟ C 1 (Τ1)ΡΒ1 C 2 (ΑΙΝΟ) ΡΒ2 C 3 (ΑΙΝ1) ΡΒ3 C 4 (SS) ΡΒ4 q 5 (MOSI) PI (MISO) PI------ (8CK) PB7 C 8 RESET (RXD) POO (TXD) PD1 (INTO) PD2 (INTI) PD3 PD4 (OC1A) PD5 _ iwk) PD6 C (RD)PD7 II XTAL2 XTAL1 OND VCC D PAD (ADO) PA1 (ADI) 3 PA2 (A02) 3 PA3 (AD3) PA4 (AD4) 3 PAS (ADS) 3 PAB (ADB) 3 PAT (AD7) 3 ICP 3 ALE 0C1B PC7 (A15) PC8 (A14) 3 PCS (A13) PC4 (A12) PCS (All) PC2 (A10) PC1 (A9) PC0(A8) Ταχύτητα 4MHz, Μνήμη Flash 8K, Μνήμη SRAM 512bytes και μνήμη EEPROM 512bytes. Έχει 4 Πόρτες και κάθε πόρτα αποτελείται από 8 pins. Παρακάτω εξηγείτε η λειτουργία των συναρτήσεων στον Microcontroller Master. ΤΕΙ ΚΑΒΑΛΑΣ

Στην αρχή εξηγούνται οι βιβλιοθήκες που χρησιμοποιούνται και στην συνεχεία επεξηγείτε ο πηγαίος κώδικας. Βιβλιοθήκες -Microcontroller Master: #include <90s8515.h> βιβλιοθήκη που περιέχει όσες πληροφορίες χρειάζεται ο Microcontroller για να λειτουργήσει. #include <lcd.h> βιβλιοθήκη που περιέχει όλες τις συναρτήσεις για την διαχείριση της Οθόνης LCD όπως η lcd_erase() που καθαρίζει την οθόνη και άλλες. #include <delay.h> βιβλιοθήκη που περιέχει την χρόνοκαθυστέρηση του Microcontroller. #include < stdio.h > [βιβλιοθήκες που περιέχουν τις συναρτήσεις #include < ctype.h > διαχείρισης των χαρακτήρων και τον τρόπο εμφάνισης τους στην οθόνη. #include <math.h> βιβλιοθήκη που περιέχει τις συναρτήσεις υλοποίησης μαθηματικών πράξεων. ΤΕΙ ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : interrupt [TIMO_OVF] void timero_ovf_isr(void)~ Microcontroller: Είσοδος: Clock Tou Microcontroller Έξοδος: Μεταβλητές: time : Μεταβλητή η οποία αποθηκεύει τον χρόνο σε ms Λειτουργία Συνάρτησης: Η συνάρτηση αυτή είναι ένα interrupt του συστήματος δηλαδή λειτουργεί παράλληλα με το υπόλοιπο κώδικα. Δουλεία αυτής της συνάρτησης είναι σε κάθε 15535 κύκλους λειτουργίας του επεξεργαστή να προσθετή και ένα ms στην μεταβλητή time. Η μεταβλητή αυτή είναι καθολική (global) με αποτέλεσμα να μπορούμε να την χρησιμοποιήσουμε οπουδήποτε την χρειαζόμαστε μέσα στο πρόγραμμα. Κώδικας: ΤΕΙ ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης I void Programm_mode()~ Microcontroller: Master Είσοδος: Συνάρτηση keynumq Οθόνη LCD και συναρτήσεις: Erase_prog() και Έξοδος: CalculateMove(who,up,down) Μεταβλητές: start : Μεταβλητή η όποια αποθηκεύει την επιλογή του χρήστη για το αν θέλει να διαγράψει ή όχι το υπάρχον αποθηκευμένο πρόγραμμα που είναι αποθηκευμένο στη μνήμη του μικρόελεγκτή. who : Βοηθητική μεταβλητή η οποία αποθηκεύει την πρώτη κίνηση που επιτρέπετε να κάνει ο κινητήρας έτσι ώστε να βρίσκεται σε θετική περιοχή στον χώρο, οι κινήσεις αποθηκεύονται με την μορφή που πατιούνται από τον numpad. Αυτή η μεταβλητή χρησιμοποιείτε και σαν αναγνωριστικό για το ποιόν κινητήρα επέλεξε ο χρήστης να κινήσει. up : Μεταβλητή στην οποία καταχωρείτε η τιμή πλήκτρου στο Numpad που πρέπει να πατηθεί έτσι ώστε να κινηθεί θετικά στον χώρο ο κινητήρας που έχει επιλέξει ο χρήστης. ΤΕΙ ΚΑΒΑΛΑΣ

down : Μεταβλητή στην οττοία καταχωρείτε η τιμή ττλήκτρου στο Numpad που πρέπει να πατηθεί έτσι ώστε να κινηθεί αρνητικά στον χώρο ο κινητήρας που έχει επιλέξει ο χρήστης. thesi ; Βοηθητική μεταβλητή που αποθηκεύεται η τρέχον θέση της άρθρωσης που επιλέχθηκε να κινηθεί. key : μεταβλητή αποθήκευσης του πλήκτρου που πατήθηκε στον Numpad η τιμή προέρχεται από τη συνάρτηση keynum(). Λειτουργία Συνάρτησης: Η συνάρτηση αυτή, την στιγμή που καλείται εμφανίζει στην οθόνη το μήνυμα για το αν θέλουμε να σβήσουμε από την μνήμη του microcontroller οποιοδήποτε πρόγραμμα είναι αποθηκευμένο. Περιμένει την επιλογή του χρήστη που είναι A ή D. Αν πατήσει D ο χρήστης από το Numpad τότε το σύστημα βγαίνει από αυτή την συνάρτηση και εμφανίζει το αρχικό Menu του συστήματος. Αν πατηθεί όμως το πλήκτρο A από το Numpad, τότε η συνάρτηση καλεί την συνάρτηση Erase_prog() για να σβήσει την μνήμη και εμφανίζει στην οθόνη το μήνυμα Please Wait μέχρι να τελειώσει η διαδικασία διαγραφής. Στην συνέχεια η συνάρτηση εμφανίζει στην οθόνη το menu επιλογής άρθρωσης. Μόλις επιλεγεί η άρθρωση τότε δίνονται η τιμές που πρέπει να έχουν οι μεταβλητές who,up και down και καλείται η συνάρτηση CalculateMove(who,up,down) για να διαβάσει την κίνηση και να την αποθήκευση. Η συνάρτηση θα εκτελείτε ξανά από την αρχή έως ότου ο χρήστης πατήσει το πλήκτρο * ή έως ότου δεν υπάρχει άλλη μνήμη για καταχώρηση κινήσεων. Κώδικας: ΤΕΙ ΚΑΒΑΛΑΣ

void Programm modeo { char start=' int who; char up; char down; lcd_clear(); // erotish lcd_gotoxy(0,0); // gia lcd_putsf("delete prog?"); // epibebaiosh lcd_gotoxy(0,1); // lcd_putsf("yes;a No;D"); // while (start!='a' && start!='d' && thesi<19) // { II start=keynum(); II } II if (start=='a') // { home(); lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("please Wait"); delay_ms(700); Erase_prog(); thesi=0; key=''; while (key!='*') { IcdclearO; key=''; while(key!='a' && key!='b' && key!='c && key!='d' && key!=' { lcd_gotoxy(0,0); lcd_putsf("a;base B;mid"); lcd_gotoxy(0,1); lcd_putsf("c;top D;catch"); key=keynum(); } lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("please Wait"); delay_ms(700); if (key=='b ) {who=4; up='4'; down='6';} if (key=='c) {who=3; up='3'; down='1';} if (key=='a') {who=9; up='9'; down='7';} if (key=='d') {who=2; up='2'; down='8';} if (key!='*') TEI ΚΑΒΑΛΑΣ

CalculateMove(who,up,down): }//if (start=='a' delay_ms(500); }//Programm_mode() Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void Free_mode() Microcontroller: Master Είσοδος: Συνάρτηση keynum() Έξοδος: Οθόνη LCD και συνάρτηση ConnectMicro(toint(key2)) Μ εταβλητές: TEI ΚΑΒΑΛΑΣ

RoboArm I! key2 : μεταβλητή αποθήκευσης του πλήκτρου που πατήθηκε στον Nuoipad η τιμή προέρχεται από τη συνάρτηση keynum(). Λειτουργία Συνάρτησης: ~ Η συνάρτηση αυτή με το που καλείται εμφανίζει στην οθόνη το εξής μήνυμα Free Mode και "(*) Το Exit". Στην συνέχεια εισέρχεται σε έναν βρόχο και για όσο δεν έχει πατηθεί το κουμπί από το Numpad, κάνει το έξης διαβάζει με την βοήθεια της συνάρτησης keynum() το πλήκτρο που έχει πατηθεί από το Numpad, το αποθηκεύει στην μεταβλητή key2 και στην αργότερα στέλνεται στην συνάρτηση ConnectMicro(toint(key2)) που είναι αρμόδια να κινήσει τον Ρομποτικό βραχίονα. Οι κινήσεις που είναι αρμόδιες να κινήσουν την άνω και κάτω άρθρωση, αν πάνε να βγουν έκτος ορίων δηλαδή έχουν πατηθεί η τερματικοί διακόπτες δεν πραγματοποιούνται. X Κώδικας: void Free_mode() { char key2="; lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("free Mode"); lcd_gotoxy(0,1); lcd_putsf("(*) To Exit"); while(key2!='*') { key2=keynum(); if (key2=='1'&&pina.6==1) key2=-1; if (key2=='6' && PINA.5==1) key2=-1; ConnectMicro(toint(key2)); } delay_ms(500); Εττεξήγηση Τελικού Κώδικα Microcontroller; Είσοδος: Έξοδος: Μεταβλητές: Master Συνάρτηση keynum() και ττίνακας prog Οθόνη LCD και συνάρτηση ConnectMicro(toint(key2)) TEI ΚΑΒΑΛΑΣ

j : Μεταβλητή που αποθηκεύετε η τρέχον θέση που βρίσκεται το πρόγραμμα στον πίνακα που είναι αποθηκευμένες οι προγραμματισμένες κινήσεις που έχει κάνει ο χρήστης. key : μεταβλητή αποθήκευσης του πλήκτρου που πατήθηκε στον Numpad η τιμή προέρχεται από τη συνάρτηση keynum(). Λειτουργία Συνάρτησης: Η συνάρτηση αυτή με το που καλείτε κάνει το έξής : δηλώνει και μηδενίζει την μεταβλητή j, εμφανίζει στην οθόνη το μήνυμα Push Β Το Start και εισάγει την τιμή κενό στην μεταβλητή key για να φαίνετε ότι δεν έχει πατηθεί κανένα κουμπί από το Numpad. Μετά περιμένει να πατηθεί το κουμπί Β ή από το Numpad. Αν πατηθεί το τότε το πρόγραμμά βγαίνει από την συνάρτηση Auto_mode(), αν πατηθεί όμως το κουμπί Β το τότε η συνάρτηση διαβάζει την πρώτη τιμή του πίνακα που είναι αποθηκευμένες η κινήσεις που εισήγαγε ο χρήστης αν δεν υπάρχει κίνηση αποθηκευμένη τότε η συνάρτηση εμφανίζει στην οθόνη το εξής μήνυμα : No prog to run Press Αν υπάρχει όμως έστω και μία κίνηση αποθηκευμένη τότε η συνάρτηση διαβάζει τον πίνακα κινήσεων και για όσο υπάρχουν κινήσεις κάνει το έξης: Διαβάζει την κίνηση μηδενίζει τον timer που είναι μεταβλητή time που είχαμε αναφέρει παραπάνω, έτσι ώστε να μετρά από την αρχή, και για όσο ο timer είναι μικρότερος από τον χρόνο που είναι αποθηκευμένος στο πίνακα στέλνει στην ConnectMicro(prog(j][1]) την κίνηση που πρέπει να εκτελεσθεί, παράλληλα εμφανίζει στην οθόνη ποια κίνηση εκτελείτε. Κώδικας: ί : ΤΕΙ ΚΑΒΑΛΑΣ

void Auto_mode() { int j=0; lcd_clear{); lcd_gotoxy(0,0); lcd_putsf("push B"); lcd_gotoxy(0,1); lcd_putsf("to start"); key=' while (key!='b' && key!= { key=keynum(); } if (key=='b') { if(progu][1]==0) // { // lcd_clear(); // lcd_gotoxy(0,0); //an den lcd_putsf("no prog to run"); //yparxei lcd_gotoxy(0,1); //programma lcd_putsf("press *"); //sthn mnhmh while(key!='*') //exit { // key=keynum(); // } II lcd_clear(); }//if (prog else { while(keyl='*') //exit { j=0; home(); while(progd][1]>0 && j<=19 && key!='*') { key=keynum(); lcd_clear(); lcd_gotoxy(0,0); sprintf(display_buffer,"stop (*)"); lcd_puts(display_buffer); delay_ms(1000); time=0; TEI ΚΑΒΑΛΑΣ

while (time<=prog[j][0] && key!='*') { key=keynum(); ConnectMicro(prog[j][1]); } ConnectMicro(-l); j++; delay_ms(2000); } }//else delay_ms(500); }//Auto_mode() TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void main(void) Microcontroller: Master Είσοδος: Συνάρτηση keynumq Συναρτήσεις Auto_mode(), Programm_mode() και Έξοδος: Free_mode(). Μεταβλητές: Input/Output Ports initialization Port A initialization FuncO=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=ln Func6=ln Func7=ln State0=0 State 1=0 State2=0 State3=0 State4=0 State5=T State6=T State7=T PORTA=OxOO; DDRA=0x1F; Port B initialization FuncO=Out Func1=Out Func2=Out Func3=Out Func4=ln Func5=ln Func6=ln Func7=ln State0=0 State1=0 State2=0 State3=0 State4=T State5=T State6=T State7=T PORTB=OxOO; DDRB=0x0F; Port C initialization Func0=ln Func1=ln Func2=ln Func3=ln Func4=ln Func5=ln Func6=ln Func7=ln StateO=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTC=OxOO; DDRC=0x00; Port D initialization Func0=ln Func1=ln Func2=ln Func3=ln Func4=ln Func5=ln Func6=ln Func7=ln StateO=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T TEI ΚΑΒΑΛΑΣ

PORTD=OxOO; DDRD=0x00; Δήλωση των Timer Timer/Counter 0 initialization Clock source: System Clock Clock value:,000 khz TCCR0=0x02; TCNT0=0x00; Timer/Counter 1 initialization Clock source: System Clock Clock value: Timer 1 Stopped Mode: Normal top=ffffh OC1A output: Discon. OC1B output: Discon. Noise Canceler: Off Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=OxOO; OCR1AL=OxOO; OCR1BH=OxOO; OCR1BL=OxOO; Δήλωση του μεγέθους της οθόνης ως 2x16 LCD module initialization lcd_init(16); key : μεταβλητή αποθήκευσης του πλήκτρου που πατήθηκε στον Numpad η τιμή προέρχεται από τη συνάρτηση keynum(). ΤΕΙ ΚΑΒΑΛΑΣ

Λειτουργία Συνάρτησης: ~ Η συνάρτηση αυτή είναι η ποίο βασική μέσα στον Microcontroller δουλεία της είναι να λειτουργεί για πάντα (όσο υπάρχει ρεύμα στο σύστημα). Με το που ξεκινήσει το σύστημα καλείται αυτόματα η συνάρτηση main(), αυτή με την σειρά της αρχίζει να δηλώνει στον Microcontroller ποιες πόρτες χρησιμοποιούνται και ως τι. Αρχίζει με την δήλωση της πόρτα A δηλώνοντας τα pin από 0 έως και 4 σαν OUT και το 5 έως και 7 σαν IN, την πόρτα Β δηλώνοντας τα pin από 0 έως και 3 σαν OUT και το 4 έως και 7 σαν IN και τις πόρτες C και D σαν IN Στην συνέχεια δηλώνονται το Interrupt που θα μετρά το χρόνο σε ms. Αφού γίνουν οι δηλώσεις μηδενίζετε η μεταβλητή key και το σύστημα εισέρχεται σε ατέρμονο βρόχο (σε έναν βρόχο επανάληψης που δεν τελειώνει ποτέ) όπου εμφανίζει το βασικό menu με την βοήθεια της συνάρτησης show_menu_basic(), διαβάζει από το Numpad το πλήκτρο που έχει πατηθεί, και στην συνέχεια ανάλογος τι έχει πατήσει ο χρήστης A,B,C καλούνται αντίστοιχα οι συναρτήσεις Auto_mode(), Programm_mode() και Free_mode(); Κώδικας: void main(void) { // Input/Output Ports initialization // Port A initialization // FuncO=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=ln Func6=ln Func7=ln // State0=0 State1=0 State2=0 State3=0 State4=0 State5=T State6=T State7=T PORTA=OxOO; DDRA=0x1F; // Port B initialization // FuncO=Out Func1=Out Func2=Out Func3=Out Func4=ln Func5=ln Func6=ln Func7=ln // State0=0 State1=0 State2=0 State3=0 State4=T State5=T State6=T State7=T PORTB=OxOO; DDRB=0x0F; TEI ΚΑΒΑΛΑΣ

// Port C initialization // FuncO=ln Func1=ln Func2=ln Func3=ln Func4=ln Func5=ln Func6=ln Func7=ln // StateO=T State! =T State2=T State3=T State4=T State5=T State6=T State7=T PORTC^OxOO; DDRC=0x00; // Port D initialization // FuncO=ln Func1=ln Func2=ln Func3=ln Func4=ln Func5=ln Func6=ln Func7=ln // StateO=T State 1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=OxOO; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value:,000 khz TCCR0=0x02; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=ffffh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR16=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // External Interrupt(s) initialization // INTO: Off // INTI: Off GIMSK=0x00; MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x02; TEI ΚΑΒΑΛΑΣ

// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei") key=' while (1) { show_menu_basic(); key=keynum(); if (key=='a') Auto_mode(); else if (key=='b') Programm_mode(); else if (key=='c) Free_mode(); TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης I char keynum () Microcontroller: Master - "synarthseis.h" Είσοδος: Numpad από την Πόρτα Β Έξοδος: Τιμή της μεταβλητής keypad Μεταβλητές: keypad : Μεταβλητή στην οποία αποθηκεύετε το πλήκτρο που πατήθηκε από το Numpad Timh : Μεταβλητή στην οποία αποθηκεύεται η στήλη του Numpad στο οποίο ανήκει το κουμπί που πατήθηκε σε δεκαεξαδικό νούμερο που διαβάζετε από την Πόρτα Β Prokey : Μεταβλητή στην οποία αποθηκεύετε η Γραμμή και η στήλη στην οποία ανήκει το κουμπί που πατήθηκε στο Numpad. Λειτουργία Συνάρτησης: Σκοπός αυτής της συνάρτησης είναι να διαβάζει μέσο της Πόρτας Β το κουμπί που πατήθηκε από το Numpad και να την μετατρέπει σε χαρακτήρα. Κατά την εκκίνηση της συνάρτησης, η συνάρτηση δηλώνει την μεταβλητή keypad δίνει ρεύμα σε πρώτα 4 pin της Πόρτας Β. Διαβάζει την Πόρτα Β αποθηκεύει την τιμή στην μεταβλητή timh, δίνει μετά στην Πόρτα Β μόνο στο πρώτο Pin ρεύμα. Διαβάζει ξανά την πόρτα και την συγκρίνει με την μεταβλητή timh αν είναι ίσα αποθηκεύει την τιμή της Πόρτας Β στην μεταβλητή Prokey. Μετά ανάλογος τι τιμή έχει η Prokey στην keypad θα αποθηκευτεί το αντίστοιχο κουμπί που έχει πατηθεί. ΤΕΙ ΚΑΒΑΛΑΣ

Κώδικας: char keynum () { char keypad; PORTB=OxOF; Tinnh=PINB; Timh=Timh&0xF0; if (counter>8) counter=0x01; PORTB=counter; counter=counter+counter; if (PINB==(Timh+0x01)) Prokey=PINB; else if(pinb ==(Timh+0x02)) Prokey=PINB; else if (PINB==(Timh+0x04)) Prokey=PINB; else if (PINB==(Timh+0x08)) Prokey^PINB; if (Timh==0x00) Prokey=0x00; switch (Prokey) \ case 0x11: keypad=t; break case 0x12: case 0x14: case 0x18: case 0x21: case 0x22: case 0x24: case 0x28: case 0x41: case 0x42: case 0x44: case 0x48: case 0x81: case 0x82: case 0x84: case 0x88: default: } return keypad; } keypad='2'; break keypad='3'; break keypad='a'; break keypad='4'; break keypad='5'; break keypad='6'; break keypad='b'; break keypad=7'; break keypad='8'; break keypad='9'; break keypad='c; break keypad='*'; break; keypad='0'; break keypad='#'; break keypad='d'; break keypad=''; TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void show menu basic() Microcontroller: Master - "synarthseis.h" Είσοδος: Έξοδος: Οθόνη LCD Μεταβλητές: Λειτουργία Συνάρτησης: Εμφανίζει στην οθόνη LCD το μήνυμα ("MODE:: A:Auto" B:Prog C:Free") Κώδικας: void show_menu_basic() // // { delay_ms(20); // lcd_clear(); // lcd_gotoxy(0,0); //emfanish toy basikou menu lcd_putsf("mode:: A:Auto"); // lcd_gotoxy(0,1); // lcd_putsf("b:prog C:Free"); // } TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void Erase_prog() Microcontroller: Master - "synarthseis.h" Είσοδος: Έξοδος: Πίνακας prog Μεταβλητές: j : Μεταβλητή που κρατάει την τρέχον θέσει της γραμμής προς διαγραφή του πίνακα καταχωρημένων κινήσεων. Λειτουργία Συνάρτησης: [~ Σκοπός αυτής της συνάρτησης είναι να σαρώσει και να διαγράψει όλα τα στοιχεία του πίνακα (δηλαδή όλες τις αποθηκευμένες κινήσεις). Κώδικας: void Erase progo { int j; for (j=0; j<20; j++) {progu][0]=0; prog[j][1]=0; } } TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void ConnectMicro(int connection) Microcontroller: Master - "synarthseis.h" Είσοδος: Μεταβλητή connection Έξοδος: Πόρτα A Tou Microcontroller Master Μεταβλητές: connection : Μεταβλητή η οποία περιέχει την κίνηση που πρέπει να σταλθεί στον Microcontroller Slave για εκτέλεση. Λειτουργία Συνάρτησης: Όταν κληθεί αυτή η συνάρτηση παίρνει και ένα όρισμα, αυτό το όρισμα περιέχει μια τιμή με το πλήκτρο που έχει πατηθεί από το Numpad η έχει διαβαστεί από τον πίνακα αποθηκευμένων κινήσεων. Αυτή η τιμή είναι ένας ακέραιος αριθμός, η συνάρτηση αυτή μετατρέπει και στέλνει αυτόν τον αριθμό ως δεκαεξαδικό νούμερο στον Microcontroller Slave μέσο της πόρτας Α. Κώδικας: void ConnectMicro(int connection) { s\witch (connection) } { case case 3 case case 6 case 7 case 9 case 2 case 8 default } PORTA=0x01 PORTA=0x02 PORTA=0x03 PORTA=0x04 PORTA=0x05 PORTA=0x06 PORTA=0x07 PORTA=0x08 PORTA=OxOO break break break break break break break break TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void CalculateMove(int who, char up, char down) Microcontroller: Master - "synarthseis.h" Είσοδος: Μεταβλητή who, up και down Έξοδος: Πόρτα A Tou Microcontroller Master Μεταβλητές: who : Βοηθητική μεταβλητή η οποία αποθηκεύει την πρώτη κίνηση που επιτρέπετε να κάνει ο κινητήρας έτσι ώστε να βρίσκεται σε θετική περιοχή στον χώρο, οι κινήσεις αποθηκεύονται με την μορφή που πατιούνται από τον numpad. Αυτή η μεταβλητή χρησιμοποιείτε και σαν αναγνωριστικό για το ποιόν κινητήρα επέλεξε ο χρήστης να κινήσει. up : Μεταβλητή στην οποία καταχωρείτε η τιμή πλήκτρου στο Numpad που πρέπει να πατηθεί έτσι ώστε να κινηθεί θετικά στον χώρο ο κινητήρας που έχει επιλέξει ο χρήστης. down : Μεταβλητή στην οποία καταχωρείτε η τιμή πλήκτρου στο Numpad που πρέπει να πατηθεί έτσι ώστε να κινηθεί αρνητικά στον χώρο ο κινητήρας που έχει επιλέξει ο χρήστης. ί : Βοηθητική μεταβλητή που δείχνει την θέση των πινάκων pinold[i] και pin[i] κατά την αντιγραφή τους. help : Μεταβλητή η οποία χρησιμεύει σαν flag για να γνωρίζουμε αν δεν πατιέται πλήκτρο στο Numpad. key2 : μεταβλητή αποθήκευσης του πλήκτρου που πατήθηκε στον Numpad η τιμή προέρχεται από τη συνάρτηση keynum(). identity : Μεταβλητή που αποθηκεύουμε την κατάσταση της κίνησης που είναι να πραγματοποιηθεί, οι τιμές που παίρνει είναι η up αν η κίνηση της άρθρωσης είναι θετική στον χώρο ή η down αν η κίνηση της άρθρωσης είναι αρνητική στον χώρο. ΤΕΙ ΚΑΒΑΛΑΣ 31

thesi : Βοηθητική μεταβλητή που αποθηκεύεται η τρέχον θέση της άρθρωσης που επιλέχθηκε να κινηθεί. SumCount : Σε αυτήν την μεταβλητή αποθηκεύεται η τελική κίνηση που θα κάνει στον χώρο η άρθρωση που έχει επιλεχθεί να κινηθεί. Λειτουργία Συνάρτησης: Η δουλεία αυτής της συνάρτησης είναι να υπολογίσει την τρέχον θέση που θα έχει η άρθρωση που κινείτε μετά το πέρας της κίνησης. Έπειτα αποθηκεύει την κίνηση αυτή στον πίνακα prog έτσι ώστε να χρησιμοποιηθεί από την συνάρτηση AutoMode{) που είναι αρμόδια να πραγματοποιήσει τις κινήσεις που έχει αποθηκεύσει ο χρήστης. Η συνάρτηση αυτή έχει τρία ορίσματα τα int who, char up, char down που όπως αναφέραμε παραπάνω μας δείχνουν ποια πλήκτρα πρέπει να πατηθούν έτσι ώστε να κινηθεί η άρθρωση θετικά ή αρνητικά στον χώρο. Έτσι κατά την εκκίνηση της συνάρτησης εμφανίζεται στην οθόνη το μήνυμα για το ποια πλήκτρα μπορούν να πατηθούν για να κινηθεί θετικά η αρνητικά στον χώρο η συγκεκριμένη άρθρωση που έχει επιλεχθεί. Στην συνέχεια αφού μηδενιστεί ο μετρητής SumCount, η συνάρτηση εισέρχεται σε ένα βρόχο οπού θα κάνει επαναλήψεις έως ότου αποφασίσει ο χρήστης να πατήσει το κουμπί που σημαίνει και την έξοδο από την κίνηση ή το κουμπί # που σημαίνει την αποθήκευση της κίνησης που πραγματοποιήθηκε, είτε όταν γεμίσει ο πίνακας κινήσεων prog. Σε αυτό το σημείο διαβάζεται το πλήκτρο που έχει πατηθεί, αν είναι μέσα στα επιτρεπτά πλήκτρα για αυτή την άρθρωση πραγματοποιείτε η κίνηση με την βοήθεία της συνάρτησης ConnectMicro(toint(key2)). Στην συνέχεια ελέγχεται αν πατιέται πλήκτρο, αν πατιέται τότε μηδενίζεται ο μετρητής time, στην συνέχεια αναγνωρίζετε η κίνηση της άρθρωση αν είναι θετική ή αρνητική και αναλόγως αυξάνουμε τον ΤΕΙ ΚΑΒΑΛΑΣ

μετρητή SumCount Όταν ττατηθεί το πλήκτρο τότε εμφανίζεται στην οθόνη πόσες κινήσεις ακόμα μπορούν να αποθηκευτούν στην μνήμη, και στην συνέχεια αποθηκεύεται η κίνηση στον πίνακα prog εμφανίζοντας στην οθόνη μήνυμα που πιστοποιεί ότι πραγματοποιήθηκε η κίνηση. X Κώδικας: void CalculateMove(int who, char up, char down) { int i; int help=0; char key2=' char identity=' lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("(#) to confirm"); lcd_gotoxy(0,1); if (who==3) lcd_putsf("3=up 1=Down"); else if (who==4) lcd_putsf("4=up 6=Down"); else if (who==9) lcd_putsf("9=cw 7=ccw"); else if (who==2) lcd_putsff2=close 8=Open"); SumCount=0; while (key2!='*' && key2!='#' && thesi<=19) { key2=keynum(); if (key2=='1'&&pina.6==1) key2=' if (key2=='6' && PINA.5==1) key2=' if (key2==up key2==down key2=='') ConnectMicro(toint(key2)); if (key2=='') help=0; if (key2!='' && help==0) {time=0; help=1;} /////// if (key2==up) identity=up; if (identity==up && help==0){ SumCount=SumCount+time; id en tity= 'if (up==2) SumCount=100;} //////// if (key2==down) identity=down; if (identity==down && help==0){sumcount=sumcount-time; identity=' if (up==8) SumCount=-100;} TEI ΚΑΒΑΛΑΣ

/////// if (key2=='#') { IcdclearO; lcd_gotoxy(0,1): sprintf(display_buffer,"%i Moves Left",(19-thesi)); lcd_puts(display_buffer); delay_ms(1000); lcd_clear(); if (up=='3') { pin[0]=sumcount; prog[thesi][0]=abs(pin[0]); if (pin[0]>0) prog[thesi][1]=who; else prog[thesi][1]=who-2; } if (up=='4') { pin[1]=sumcount; prog[thesi][0]=abs(pin[1]); if (pin[1]>0) prog[thesi][1]=who; else prog[thesi][1 ]=who+2; } if (up=='9') { pin[2]=sumcount; prog[thesi][0]=abs(pin[2]); if (pin[2]>0) prog[thesi][1]=who; else prog[thesi][1]=who-2; } if(up=='2 ) { prog[thesi][0]=100; if (SumCount>0) prog[thesi][1]=2; else prog[thesi][1]=8; } thesi++; lcd_gotoxy(0,1); lcd_putsf("action Saved") delay_ms(500); for (i=0; i<=2; i++) { pinold[i]=pin[i]; }//while if (thesi==20) TEI ΚΑΒΑΛΑΣ

{ lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("memory Full!!"); delay_ms(1000);} TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : void home()~ Microcontroller: Master - ''synarthseis.h" Αισθητήριο πάνω άρθρωσης Πόρτα A pin 6, Κάτω Είσοδος: άρθρωσης Πόρτα A pin 5, Pin επικoιvωviας των Microcontroller Πόρτα A pin 4. Έξοδος: Οθόνη LCD και συνάρτηση ConnectMicro Μεταβλητές: Λειτουργία Συνάρτησης: Γ Σκοπός αυτής της συνάρτησης είναι να μετακινεί τον Ρομποτικό Βραχίονα στην Αρχική του θέση (Home). Με το που ξεκινάει η συνάρτηση εμφανίζει ένα μήνυμα αναμονής στην οθόνη LCD, έως ότου ο Ρομποτικός Βραχίονας μετακινηθεί στην Αρχική του θέση. Παράλληλα ξεκινά και η διαδικασία μετακίνησης με την έξης σειρά. Πρώτα ανοίγει η δαγκάνα, μετά κατεβαίνει η κάτω άρθρωση έως ότου πατηθεί ο Τερματικός διακόπτης, η επόμενη κινήσει είναι να κατέβει η πάνω άρθρωση έως ότου πατηθεί ο τερματικός διακόπτης, τέλος δίνει σήμα στον Microcontroller Slave να εκτελέσει την συνάρτηση HomeBase που είναι αρμόδια να αρχικοποιήσει την βάση. Ο Microcontroller Master περιμένει μέχρι να στείλει σήμα ο Slave ότι τελείωσε η διαδικασία αρχικοποιήσεις. Μετά το πέρας της διαδικασίας καθαρίζεται η οθόνη και το πρόγραμμα επανέρχεται στο Βασικό Menu. ΤΕΙ ΚΑΒΑΛΑΣ

Κώδικας: void home() { lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("home Position"); lcd_gotoxy(0,1); lcd_putsf("please Wait"); ConnectMicro(8); delay_ms(10); while (PINA.5!=1) { ConnectMicro(6); } ConnectMicro(-l); while(pina.6!=1) { ConnectMicro(l); } ConnectMicro(IO); delay_ms(500); while (PINA.4==1) { } ConnectMicro(-l); TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Τελικός Κώδικας - Microcontroller Slave Σκοπός του Microcontroller Slave είναι να παίρνει τις πληροφορίες που του δίνει ο Microcontroller Master να τις επεξεργάζεται και να τις υλοποιεί. Η σύνδεση των δύο Microcontroller γίνεται με την χρήση 5 pin από την Πόρτα A του Master και της Πόρτας Β του Slave. Όπως φαίνεται παρακάτω. Τα pin από 0 έως 4 είναι για να στέλνει πληροφορίες ο Microcontroller Master, το πέμπτο pin χρησιμοποιείται για να στέλνει ο Microcσntroller Slave την πληροφορία για το πότε βρίσκεται σε κατάσταση εκτέλεσης της συνάρτησης HomeBase που είναι αρμόδια να αρχικοποιεί την θέση της βάσης. Παρακάτω εξηγείτε η λειτουργία των συναρτήσεων στον Microcontroller Slave. Στην αρχή εξηγούνται οι βιβλιοθήκες που χρησιμοποιούνται και στην συνέχεία επεξηγείτε ο πηγαίος κώδικας. ΤΕ1 ΚΑΒΑΛΑΣ

Βιβλιοθήκες -Microcontroller Slave: #include <90s8515.h> βιβλιοθήκη που περιέχει όσες πληροφορίες χρειάζεται ο Microcontroller για να λειτουργήσει. #include <delay.h> βιβλιοθήκη που περιέχει την χρόνοκαθυστέρηση του Microcontroller. #include <math.h> βιβλιοθήκη που περιέχει τις συναρτήσεις υλοποίησης μαθηματικών πράξεων. Ορισμοί - Microcontroller Slave: Με τους ορισμούς πετυχαίνουμε τις εντολές που χρησιμοποιούμε στον πηγαίο κώδικα συχνά να τις αντικαθιστούμε με λέξεις που είναι ποιο χρήσιμες (κατανοητές) ή ποιο μικρές. #define Wait delay_ms(50) όπου υπάρχει η εντολή wait θα εκτελείται η εντολή delay_ms(50) δηλαδή θα γίνεται χρόνοκαθυστέρηση 50ms. #define Wait_Up delay_ms(25) όπου υπάρχει η εντολή wait Up θα εκτελείται η εντολή delay_ms(25) δηλαδή θα γίνεται χρόνοκαθυστέρηση 25ms. ΤΕΙ ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης I void closebase()~ Microcontroller: Είσοδος: Έξοδος: Pins από 4 έως και 7 της Πόρτας D Μεταβλητές: Λειτουργία Συνάρτησης: Γ Η λειτουργία αυτής της συνάρτησης είναι να σταματάει την συνεχή λειτουργία του κινητήρα της βάσης για λόγους αυξημένης κατανάλωσης ρεύματος. Κατά την εκκίνηση της μηδενίζει τα pin 4 έως και 7 της Πόρτας D έτσι ώστε να πάψουν να άγουν τα τρανζίστορ BD901 που είναι συνδεδεμένα με τον κινητήρα της βάσης. Κώδικας: X void closebaseo { PORTD.4=0; PORTD.5=0; PORTD.6=0; PORTD.7=0; } TEI ΚΑΒΑΛΑΣ

Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης: 1void Go Half Step RightBO Microcontroller: Slave Είσοδος; Έξοδος: Pins από 4 έως και 7 της Πόρτας D Μεταβλητές; Half_Step : Πίνακας όπου περιέχει όλα τα βήματα των κινητήρων έτσι ώστε να κινηθού Half_Step[8,8]={{1,0,0,0,1,0,0,1},{1,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,1},{0,1,1,0,0,0,1,0},{0.0,1,0,0 Sum Count: Σε αυτήν την μεταβλητή αποθηκεύεται η τελική κίνηση που έχει κάνει στον χώρ Λειτουργία Συνάρτησης: I Η λειτουργία αυτής της συνάρτησης είναι να διαβάζει τα βήματα από τον πίνακα Half_Step (. και 7 της Πόρτας D έτσι ώστε να κινηθεί ο κινητήρας ccw. Τα βήματα αυτά στέλνονται με κινητήρας μειώνεται η μεταβλητή SumCount κατά ένα. Κώδικας: I void Go_Half_Step_RightB() PORTD.4=Half Step[row r,0]; PORTD.5=Half Step[row r,1]; PORTD.6=Half Step[row r,2]; PORTD.7=Half_Step[row_r,3]; SumCount=SumCount-1; Wait; row_r=rov\/_r+1; if (row r==8) row r=0; } Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : 1 Microcontroller: 1 Slave 1void Go_Half_Step_LeftB() ΤΕΙ ΚΑΒΑΑΑΣ 41 ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΑΗΡΟΦΟΡΙΚΗΣ

Είσοδος: Έξοδος: Pins αττό 4 έως και 7 της Πόρτας D Μεταβλητές: Half_Step : Πίνακας όπου περιέχει όλα τα βήματα των κινητήρων έτσι ώστε να κινηθού Half_Step[8,8]={{1,0,0,0,1,0,0,1},{1,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,1},{0,1,1,0,0,0,1,0},{0,0,1,0,0 Sum Count: Σε αυτήν την μεταβλητή αποθηκεύεται η τελική κίνηση που έχει κάνει στον χώρ' Λειτουργία Συνάρτησης: Η λειτουργία αυτής της συνάρτησης είναι να διαβάζει τα βήματα από τον πίνακα Half Step j. και 7 της Πόρτας D έτσι ώστε να κινηθεί ο κινητήρας cw. Τα βήματα αυτά στέλνονται με κινητήρας αυξάνεται η μεταβλητή SumCount κατά ένα. Κώδικας: void Go Half Step LeftB() { PORTD.4=Half Step[row Hl,0]; PORTD.5=Half Step[row Hl,1]; PORTD.6=Half Step[row Hl,2]; PORTD.7=Half_Step[row_HI,3]; SumCount=SumCount+1; Wait; row_hi=row_hi-1; if (row HI==-1)row Hi=7; } Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : Microcontroller: Είσοδος: Έξοδος: Μεταβλητές: Slave 1void Go Half Step RightO Πόρτα C και συνάρτηση closebaseo ΤΕΙ ΚΑΒΑΛΑΣ

Half_Step : Πίνακας όπου περιέχει όλα τα βήματα των κινητήρων έτσι ώστε να κινηθού Half_Step[8,8]={{1,0,0,0,1,0,0,1},{1,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,1},{0,1,1,0,0,0,1,0},{0,0,1,0,0 Λειτουργία Συνάρτησης: Η λειτουργία αυτής της συνάρτησης είναι να διαβάζει τα βήματα από τον πίνακα Half Step μ έτσι ώστε να κινηθεί ο κινητήρας down. Τα βήματα αυτά στέλνονται με μία χρόνοκαθυστέρηι Κώδικας: νοίά Οο_ΗαΙί_31θρ_Ρί9ίιΙ() { closebaseo; PORTC.0=Half_Step[row_r,0] PORTC. 1=Half_Step[row_r, 1 ] PORTC.2=Half_Step[row_r,2] PORTC.3=Half_Step[row_r,3] PORTC.4=Half_Step[row_r,4] PORTC.5=Half_Step[row_r,5] PORTC.6=Half_Step[row_r,6] PORTC.7=Half_Step[row_r,7] \Λ/αί1_υρ; row_r=row_r+t, ίί (row_r==8) row_r=0; 1 Εττεξήγηση Τελικού Κώδικα Ό νομα Σ υ νάρ τη σ η ς: ΜίοΓοοοηίΓοΙΙθΓ: Είσοδος: Έξοδος: Μεταβλητές: Slave 1void Go Half Step Left() Πόρτα C και συνάρτηση closebase() TEI ΚΑΒΑΛΑΣ

Half_Step : Πίνακας όπου περιέχει όλα τα βήματα των κινητήρων έτσι ώστε να κινηθού Half_Step[8,8]={{1,0,0,0,1,0,0,1},{1,1,0,0,0,0,0,1},{0,1,0,0,0,0,1.1},{0,1,1,0,0.0,1,0},{0,0,1,0,0 Λειτουργία Συνάρτησης: Η λειτουργία αυτής της συνάρτησης είναι να διαβάζει τα βήματα από τον πίνακα Half_Step μ έτσι ώστε να κινηθεί ο κινητήρας up. Τα βήματα αυτά στέλνονται με μία χρόνοκαθυστέρηση : Κώδικας: void Go_Half_Step_Left() { closebaseo; PORTC.0=Half_Step[row_HI,0] PORTC.1=Half_Step[row_HI,1] PORTC.2=Half_Step[row_HI,2] PORTC.3=Half_Step[row_HI,3] PORTC.4=Half_Step[row_HI,4] PORTC.5=Half_Step[row_HI,5] PORTC.6=Half_Step[row_HI,6] PORTC.7=Half_Step[row_HI,7] Wait_Up; row_hi=ro\a/_hi-1; if (row_hi==-1) row_hi=7; } Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : Microcontroller: Είσοδος: Έξοδος: Μεταβλητές: Slave 1void Go Half Step Right2() Πόρτα A και συνάρτηση closebase() TEI ΚΑΒΑΛΑΣ

Half_Step : Πίνακας όπου περιέχει όλα τα βήματα των κινητήρων έτσι ώστε να κινηθού Half_Step[8,8]={{1,0,0,0,1,0,0,1},{1,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,1},{0,1,1,0,0,0.1,0},{0,0,1,0,0 Λειτουργία Συνάρτησης: Η λειτουργία αυτής της συνάρτησης είναι να διαβάζει τα βήματα από τον πίνακα Half Step. έτσι ώστε να κινηθεί ο κινητήρας down. Τα βήματα αυτά στέλνονται με μία χρόνοκαθυστέρηι Κώδικας: void Go_Half_Step_Right2() { closebaseo; PORTA.0=Half_Step[row_r,0] PORTA. 1=Half_Step[row_r, 1] PORTA.2=Half_Step[row_r,2] PORTA.3=Half_Step[row_r,3] PORTA.4=Half_Step[row_r,4] PORTA.5=Half_Step[row_r,5] PORTA.6=Half_Step[row_r,6] PORTA.7=Half_Step[row_r,7] Wait; row_r=row_r+1; if (row_r==8) row_r=0; 1 Επεξήγηση Τελικού Κώδικα Ονομα Συνάρτησης : Microcontroller: Είσοδος: Έξοδος: Μεταβλητές: Slave 1 void Go Half_Step_Left2() Πόρτα A και συνάρτίίση closebase() TEI ΚΑΒΑΛΑΣ

Half_Step : Πίνακας όπου περιέχει όλα τα βήματα των κινητήρων έτσι ώστε να κινηθού Half_Step[8,8]={{1,0,0,0,1,0,0,1},{1,1,0,0,0,0,0,1},{0,1,0,0,0,0,1,1},{0,1,1,0,0,0,1,0},{0,0,1,0,0 Λειτουργία Συνάρτησης: Η λειτουργία αυτής της συνάρτησης είναι να διαβάζει τα βήματα από τον πίνακα Half_Step (. έτσι ώστε να κινηθεί ο κινητήρας up. Τα βήματα αυτά στέλνονται με μία χρόνοκαθυστέρηση : Κώδικας: void Go_Half_Step_Left2() { closebaseo; PORTA.0=Half_Step[row_HI,0] PORTA. 1=Half_Step[row_HI, 1] PORTA,2=Half_Step[row_HI,2] PORTA.3=Half_Step[ro\w_HI,3] PORTA.4=Half_Step[ro\w_HI,4] PORTA.5=Half_Step[row_HI,5] PORTA.6=Half_Step[ro\«_HI,6] PORTA,7=Half_Step[ro\«_HI,7] Wait; row_hi=row_hi-1; if (row_hi==-1) row_hi=7; 1 Επεξήγηση Τελικού Κώδικα I 1 Ονουα Συνάρτησης :, void dagkana(int w) Microcontroller: Slave Είσοδος: Μεταβλητή w Έξοδος: Pins 0 και 1 της Πόρτας D Μεταβλητές; ΤΕΙ ΚΑΒΑΑΑΣ 46 ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΑΗΡΟΦΟΡΙΚΗΣ

W : όρισμα της συνάρτησης οπού παίρνει τις τιμές 1 ή 2 αναλόγως αν θέλουμε να ανοίξει ή να κλείσει η δαγκάνα. Λειτουργία Συνάρτησης: Η συνάρτηση αυτή όταν ξεκινάει, έχει και ένα όρισμα το w. Αν το w είναι 1 το δίνεται σήμα μέσο των pin 1 και 2 της πόρτας D να ανοίξει. Αν το w είναι 2 το δένεται σήμα για να κλείσει. Κώδικας: void dagkana(int w) { if (\Λ/==1) { PORTD.O=1; PORTD.1=0; } if (w==2) { PORTD.0=0; PORTD.1=1; delay_m s(100); PORTD.1=0; } 1 Εττεξήγηση Τελικού Κώδικα Πνουπ Συνάοτησηο : void HomeBase() Microcontroller: Slave Είσοδος: Pins 4 της Πόρτας Β και συναρτήσεις Έξοδος: Go Half Step RightB() και Go Half Step_LeftB() TEI ΚΑΒΑΛΑΣ

Μεταβλητές: SumCount : Σε αυτήν την μεταβλητή αποθηκεύεται η τελική κίνηση που έχει κάνει στον χώρο η βάση του Ρομποτικού Βραχίονα. Λειτουργία Συνάρτησης: Η συνάρτηση αυτή όταν ξεκινάει, δίνει σήμα μέσο της Πόρτας Β στον Microcontroller Master ότι λειτουργεί, ύστερα για όσο δεν βρίσκεται στην αρχική θέση η βάση δηλαδή η βάση είναι θετικά στον χώρο (SumCount>0) ή αρνητικά (SumCount<0) την μετακινούμαι αρνητικά ή θετικά αντίστοιχα μέχρι να βρεθεί στην θέση 0. Όταν τελείωση η διαδικασία ο Slave κλείνει την επικοινωνία με τον Microcontroller Master. X Κώδικας: void HomeBaseO { PORTB.4=1; while (SumCount!=0) { if (SumCount>0) { Go_Half_Step_RightB(); } if (SumCount<0) { Go_Half_Step_LeftB(); } } PORTB.4=0; J Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : I void find motorq Microcontroller: Slave Είσοδος: ' Πόρτα Β i Εξοδος: TEI ΚΑΒΑΛΑΣ

Μεταβλητές: Read : Μεταβλητή στην οποία αποθηκεύεται διαβάζεται από την πόρτα Β η δεκαεξαδική τιμή που Λειτουργία Συνάρτησης: Η συνάρτηση αυτή διαβάζει την πόρτα Β και αποθηκεύει την δεκαεξαδική τιμή στην μεταβλητή Read. Μετά αναλόγως τι τιμή έχει η Read καλούνται και οι ανάλογοι κινητήρες που έχει επιβάλει ο Microcontroller Master που έστειλε και την πληροφορία. Κώδικας: void find_motor() { Read=PINB&OxOF; switch (Read) { case 0x01: Go Half Step Right(); break; case 0x02: Go Half Step Left(); break; case 0x03: Go Half Step Left2(); break; case 0x04: Go_Half_Step_Right2(); break; case 0x05: Go Half Step RightB(); break; case 0x06: Go_Half_Step_LeftB(); break; case 0x07: dagkana(l); break; case 0x08: dagkana(2); break; case OxOA: HomeBaseO; break; default : closebaseo; Επεξήγηση Τελικού Κώδικα Όνομα Συνάρτησης : Microcontroller: j Slave Είσοδος: [ j void main(void) TEI ΚΑΒΑΛΑΣ

Έξοδος; Μεταβλητές: Λειτουργία Συνάρτησης: Στην main γίνονται οι απαραίτητες δηλώσεις των πόρτων όπως βλέπουμε παρακάτω. Μετά το πέρας τον δηλώσεων μπαίνει σε ένα ατέρμονο βρόχο και καλεί την συνάρτηση void find_motor() έτσι ώστε να διαβάζονται οι πληροφορίες που στέλνει ο Microcontroller Master Κώδικας: void main(void) { H Input/Output Ports initialization // Port A initialization // FuncO=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out // State0=0 State1=0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0 PORTA=OxOO; DDRA=0xFF; // Port B initialization // FuncO=ln Func1=ln Func2=ln Func3=ln Func4=ln Func5=ln Func6=ln Func7=ln // StateO=T State 1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=OxOO; DDRB=0x10; // Port C initialization // FuncO=Out Func1=Out Func2=Out Func3=Out Func4=Out Func5=Out Func6=Out Func7=Out // State0=0 State! =0 State2=0 State3=0 State4=0 State5=0 State6=0 State7=0 PORTC=OxOO; TEl ΚΑΒΑΛΑΣ

DDRC=0xFF; // Port D initialization // FuncO=ln Func1=ln Func2=ln Func3=ln Func4=Out Func5=Out Func6=Out Func7=Out // StateO=T State1=T State2=T State3=T State4=0 State5=0 State6=0 State7=0 PORTD=OxOO; DDRD=0xFF; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=ffffh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; OCR1AH=OxOO; OCR1AL=OxOO; OCR1BH=OxOO; OCR1BL=OxOO; // External Interrupt(s) initialization // INTO: Off //INT1: Off GIMSK=0x00; MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0x80; while (1) TEI ΚΑΒΑΛΑΣ

TEI ΚΑΒΑΛΑΣ RoboArm II

Λογικά διαγράμματα - Microcontroller Master Παρακάτω φαίνονται τα λογικά διαγράμματα του Microcontroller Master. Με τα λογικά διαγράμματα μπορούμε να δούμε την λογική δομή και ροή των δεδομένων κάθε συνάρτησης. Για αυτό το σκοπό χρησιμοποιούνται κάποια ειδικά σχήματα έτσι ώστε να είναι ποιο κατανοητή η επεξήγηση τους. Τα σχήματα αυτά εξηγούνται παρακάτω: Σχήμα χρονόκαθυστέρησης Εμφάνιση στην Οθόνη LCD Λογικές αποφάσεις Ναι/Οχι END ^ Τέλος συνάρτησης ή προγράμματος ΤΕΙ ΚΑΒΑΛΑΣ

show_menu_basic() Mode::A Auto B:Prog C:Free END ^ erase_prog() TEI ΚΑΒΑΛΑΣ

ConnectMicro(int connection) TEI ΚΑΒΑΛΑΣ

char keynumo TEI ΚΑΒΑΛΑΣ

TEI ΚΑΒΑΛΑΣ RoboArm II

void CalculateMove(int who, char up, char down) Κράτα παλιά θέση στο pinold < END ^ ΤΕΙ ΚΑΒΑΛΑΣ

void home() TEI ΚΑΒΑΛΑΣ

void program_ mode() TEI ΚΑΒΑΛΑΣ

TEI ΚΑΒΑΛΑΣ RoboArm II

TEI ΚΑΒΑΛΑΣ RoboArm II

Λογικά διαγράμματα - Microcontroller Slave ΤΕΙ ΚΑΒΑΛΑΣ

MainO ^include <lcd.h> #include <delay.h> #include <stdio.h> ^include <ctype.h> #include <math.h> eeprom int prog[20][2]; int pin[3]={0,0,0}; int pinold[3]={0,0,0}; int CountUp=0. CountDown=0, SumCount=0; int thesi=0; char display_buffer[33]; int Prokey; char key; int Timh=0, counter^l; #include "synarthseis.h" PORTA=OxOO; DDRA=0xlF; PORTB=OxOO; DDRB=0x0F; PORTC=OxOO; DDRC=0x00; PORTD=OxOO; DDRD=0x00; TCCR0=0x02; TCNT0=0x00; lcd_init( 16); TEI ΚΑΒΑΛΑΣ

void Go_Half_Step_RightB() TEI ΚΑΒΑΛΑΣ

void Go Half Step Right () Close_Base() PortC.0=Half_Step[row_r,0] PortC. 1=Half_Step[row_r, 1 ] PortC.2=Half_Step[row_r,2] PortC.3=Half_Step[row_r,3] PortC.4=Half_Step[row_r,4] PortC.5=Half_Step[row_r,5] PortC.6=Half_Step[row_r,6] PortC.7=Half_Step[row_r,7] TEI ΚΑΒΑΛΑΣ

void Go_Half_Step_Right2 () Close_Base() PortA.0=Half_Step[row_r,0] PortA. 1 =Half_Step[row_r, 1] PortA.2=Half_Step[row_r,2] PortA.3=Half_Step[row_r,3] PortA.4=Half_Step[row_r,4] PortA.5=HaIf_Step[row_r,5] PortA.6=Half_Step[row_r,6] PortA.7=Half_Step[row_r,7] TEI ΚΑΒΑΑΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΑΗΡΟΦΟΡ1ΚΗΣ

void Go Half Step Left () Close_Base() PortC.0=Half_Step[row_Hl,0] PortC. 1=Half_Step[row_Hl, 1] PortC.2=Half_Step[row_Hl,2] PortC.3=Half_Step[row_Hl,3] PortC.4=Half_Step[row_Hl,4] PortC. 5=Half_Step[row_Hl,5 ] PortC.6=Half_Step[row_Hl,6] PortC.7=Half_Step[row_Hl,7] TEI ΚΑΒΑΛΑΣ

I

void Go_Half_Step_Left2 () CloseBaseO PortA.0=Half_Step[row_Hl,0] PortA. 1=Half_Step[row_Hl, 1 ] PortA.2=Half_Step[row_Hl,2] PortA.3=Half_Step[row_Hl,3] PortA.4=Half_Step[row_Hl,4] PortA.5=Half_Step[row_Hl,5] PortA.6=Half_Step[row_Hl,6] PortA.7=Half_Step[row_Hl,7] TEl ΚΑΒΑΑΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΑΗΡΟΦΟΡΙΚΗΣ

TEI ΚΑΒΑΛΑΣ RoboArm II

void dagkana(int w) TEI ΚΑΒΑΛΑΣ ^

void find_motor() TEI ΚΑΒΑΛΑΣ

main() TEI ΚΑΒΑΛΑΣ

ΕΛΕΓΧΟΣ ΛΟΓΙΣΜΙΚΟΥ Ο έλεγχος πραγματοποιήθηκε κατά την διάρκεια της δημιουργίας του software και σχεδόν παράλληλα. Πραγματοποιήθηκαν έλεγχοι και ανοιχτού και κλειστού κουτιού (White Box-Black Box ). Δηλαδή έλεγχος των αλγορίθμων του προγράμματος με επιθεωρήσεις και περιηγήσεις στον κώδικα, αλλά και έλεγχος επάνω στην εφαρμογή. Ο δεύτερος ήταν ακόμη ποιο δύσκολος αφού δεν ήταν σίγουρο πάντα αν το λάθος προέρχεται από Software ή Hardware. Αυτό ειδικότερα στα πρώτα στάδια της ανάπτυξης του βραχίονα που δεν υπήρχε η ανάλογη σταθερότητα σε κανέναν από τους δύο τομείς. Ακολουθεί το τελικό τεστ, χωρισμένο ανάλογα με τον επεξεργαστή που ανήκει η κάθε συνάρτηση του κώδικα. Μετά από κάθε πίνακα ελέγχου που υπάρχει για κάθε συνάρτηση, υπάρχει ένα μικρό σχόλιο για το επί μέρους τεστ. Ελέγχονται κατά βάση η είσοδος και η έξοδος της κάθε συνάρτησης, καθώς και οι λειτουργίες που επηρεάζουν παράλληλα και άλλες συναρτήσεις. Κατά την διάρκεια του τεστ υπήρχε καθορισμός της κρισιμότητας του κάθε λάθους, κάτι που επηρέαζε και ποιο έπρεπε να επιλυθεί πρώτο. Περιλαμβάνεται μόνο το τελικό τεστ, το οποίο κρίθηκε και πετυχημένο αφού δεν βρέθηκαν άλλα λάθη στο λογισμικό. ΤΕΙ ΚΑΒΑΛΑΣ

Επεξεργαστής : Master Συνάρτηση: KeynumO Έλεγχσι : Είσοδος Προϋποθέσεις: να καλέσει την keynum() βοηθητική συνάρτηση ελέγχου για τον Black Box έλεγχο. Είσοδος I Έλεγχος I Αποτέλεσμα 1White Box Black Box 1 V Αποδοχή -ok- 2 V V Αποδοχή -ok- 3 V V Αποδοχή -ok- 4 V V Αποδοχή -ok- 5 V V Αποδοχή -ok- 6 V V Αποδοχή -ok- 7 V V Αποδοχή -ok- 8 V V Αποδοχή -ok- 9 V V Αποδοχή -ok- 0 V Αποδοχή -ok- A ----------- 1 V Αποδοχή -ok- B 1 V Αποδοχή -ok- C 1 V Αποδοχή -ok- D V Αποδοχή -ok- V Αποδοχή -ok- # V Αποδοχή -ok- TEI ΚΑΒΑΛΑΣ

RoboArm Εικασίες Λαθών: Δύο κουμπιά συγχρόνως Απόρριψη -ok- Αποδοχή -ok- Αποδοχή -ok- Αποτέλεσμα Εισαγωγή όλων των τιμών που φαίνονται στην στήλη ισοδύναμες κλάσεις. Σωστή απόκριση στον χρόνο που πατιέται ένα κουμπί. Αν πατηθούν δύο κουμπιά συγχρόνως, μπορεί να πάρει λάθος τιμή αλλά το πιο πιθανό είναι να πάρει ως εισαγωγή το πρώτο που θα πατηθεί. Επίσης η προσθήκη καθυστερήσεων ανάμεσα στις υπορουτίνες αποτρέπει την λάθος επιλογή του χρήστη. Αν δεν πατηθεί κουμπί τότε όταν τρέξει η συνάρτηση η τιμή θα είναι κενό. Ότι τιμή και να πάρει η συνάρτηση μέσα στο πρόγραμμμα αν δεν είναι μία από τις επιτρεπτές επιστρέφει ως αποτέλεσμα το κενό. ΟΚ ΤΕΙ ΚΑΒΑΛΑΣ

Επεξεργαστής : Master Συνάρτηση: home() Έλεγχοι : Είσοδος Προϋποθέσεις: Εξοδος 1 Έλεγχος I Αποτέλεσμα 1White Box Black Box Σταματάει στον διακόπτη οι πάνω κινητήρες; Σταματάει στον διακόπτη οι κάτω κινητήρες; Σωστά Pin από διακόπτες; V Αποδοχή - ok- V V Αποδοχή - ok- V V Αποδοχή - ok- TEI ΚΑΒΑΛΑΣ

Επεξεργαστής : Master Συνάρτηση: ConnectMicro(int connection) Έλεγχοι : Προϋποθέσεις: Είσοδος Έξοδος προς Slave Είσοδος 1 Έλεγχος I Αποτέλεσμα \A/hito RnY Black Box 1 Αποδοχή -ok- 2 V V Αποδοχή -ok- 3 V Αποδοχή -ok- 4 V Αποδοχή -ok- 6 V Αποδοχή -ok- 7 Ί Αποδοχή -ok- Αποδοχή -ok- 8 ----- ^ 9 V V Αποδοχή -ok- Εικασίες Λαθών: ] 100 V y Αττόρριψπ -ok- Απόρριψη -ok- -1 ------^ 0 ----------- ^ V Απόρριψη -ok- Αποτέλεσμα ------------------ο κ ^ μ ώ ν αφού αν υπάρχει λάθος εισαγωγή το Απόλυτος έλεγχος τω /τα κενό. Ενώ οι σωστές τιμές στέλνουν σωστά στην αποτέλεσμα είναι πά\ Λ Γ.Γ>ιθιιή τηιι κινητήοα. εςοοο του επεζεργαυιιι ιυν ----- TEI ΚΑΒΑΛΑΣ γ^οτι^ητ

Επεξεργαστής: Master Συνάρτηση: Show_Menu_Basic() Έλεγχοι : Προϋποθέσεις: Εξοδος Έξοδος Έλεγχος I Αποτέλεσμα White Box Black Box Σωστή θέση; Αποδοχή -ok- Όλοι οι χαρακτήρες; V Αποδοχή -ok- Για αρκετή ώρα; V Αποδοχή -ok- Αποτέλεσμα: Όταν ξεκινάει το πρόγραμμα, εμφανίζεται το κεντρικό μενού σωστά και επανεμφανίζεται όταν χρειαστεί. Αν και είναι μέσα σε βρόγχο δεν τρεμοπαίζει η οθόνη οπότε παιονάει και τον έλεγχο. OK TEI ΚΑΒΑΛΑΣ

Επεξεργαστής : Master Συνάρτηση: ErasejDrogO Έλεγχοι : Προϋποθέσεις: Έξοδος Έξοδος Έλεγχος I Αποτέλεσμα White Box Black Box Αρχικοποίηση όλου V Αποδοχή -okτου πίνακα; Σωστή τιμή το 0; V Αποδοχή -ok- Πότε καλείται η συνάρτηση Κρατάει σκουπίδια στον πίνακα; Αποτέλεσμα V OK V Αποδοχή -ok- Αποδοχή -ok- Πλήρη διαγραφή του πίνακα. Αν δεν γίνει σωστά και κρατήσει σκουπίδια δημιουργείται πρόβλημα σε άλλες συναρτήσεις. TEl ΚΑΒΑΛΑΣ

Επεξεργαστής : Master Συνάρτηση: void CalculateMove(int who, char up, char down) Έλεγχοι ; Προϋποθέσεις: Είσοδος Έξοδος Πρέπει up==who με τα up down ως χαρακτήρες Και down=up±2 αναλόγως την περίπτωση Είσοδος(1) Έλεγχος I White Box Black Box Αποτέλεσμα 3,3,1 Αποδοχή -ok- 4,4,6 V V Αποδοχή -ok- 9,9,7 V V Αποδοχή -ok- 200,200,200 V Απόρριψη - ok- - ι,- ι,- ι V Απόρριψη - ok- 0,0,0 V Απόρριψη - ok- Οι παραπάνω εικασίες λαθών θα μπορούσαν να δημιουργήσουν πρόβλημα σε περίπτωση που δεν υπήρχε η προϋπόθεση που αναγράφεται πιο νωρίς Γίνεται όμως έλεγχος, στο σημείο που χρησιμοποιείται η συνάρτηση, οπσυ φαίνεται ότι οι τιμές που μπαίνουν στα ορίσματα, είναι default τιμές και με την σωστή σχέση μεταξύ τους,οπότε ισχύει η προϋπόθεση που έχει τεθεί. Αρα και θεωρείται απόριψη το αποτέλεσμα στις εικασίες λαθών. Στις σωστές τιμές λειτουργεί κανονικά. ΤΕΙ ΚΑΒΑΛΑΣ

Είσοδος(2) Έλεγχος 1Αποτέλεσμα White Box Black Box Ισοδύναμες κλάσεις: 1 Αποδοχή -ok- 3 V V Αποδοχή -ok- 4 V Αποδοχή -ok- 6 V V Αποδοχή -ok- 7 V V Αποδοχή -ok- 9 V V Αποδοχή -ok- 2 V V Αποδοχή -ok- 8 V V Αποδοχή -ok- # V V Αποδοχή -ok- V V Αποδοχή -ok- A Απόρριψη - ok- Β V V Απόρριψη - ok- C V V Απόρριψη - ok- D V V Απόρριψη - ok- Έλεγχος στις τιμές που δίνεται από το NumPud. Σωστή αντίδραση στα κουμπιά. Τιμές εκτόο ορίων δεν είναι επιτρεπτές και δεν επηρεάζουν. TEI ΚΑΒΑΛΑΣ

Εξοδος Έλεγχος I Αποτέλεσμα White Box Black Box Υπολογισμός χρόνου; V Αποδοχή -ok- Καταχωρείται στον V V Αποδοχή -okπίνακα; Αν γεμίσει ο πίνακας; V V Απόρριψη -ok- Χρονικό περιθώριο σε V V Αποδοχή -okμηνύματα προς χρήστη Αν πατήσω συνεχόμενα V V Απόρριψη -okκίνηση; Δύο κινήσεις μαζί; V V Απόρριψη -ok- Λάθος κίνηση; V V Απόρριψη -ok- Πόσες κινήσεις μένουν; V V Αποδοχή -ok- Prog[] [ ] Αποδοχή -ok- Thesi V V Αποδοχή -ok- Ρίη[ ] και ΡίηοΙά[ ] V V Αποδοχή -ok- Αποτέλεσμα Σωστή διαχείριση του χρόνου. Έλεγχος για overflow. Μηνύματα προς τον χρήστη κατανοητά και για αρκετό χρόνο. Δεν επιτρέπει λάθος κίνηση. Αναλόγως με την επιλογή του χρήστη κλείδωμα των πλήκτρων που επιτρέπονται. OK ΤΕΙ ΚΑΒΑΛΑΣ