Ενότητα 8 - Τμήμα 1 - Ed Py

Ιστότοπος: ΕΛ/ΛΑΚ Moodle
Μάθημα: Εργαστήριο Python
Βιβλίο: Ενότητα 8 - Τμήμα 1 - Ed Py
Εκτυπώθηκε από: Guest user
Ημερομηνία: Σάββατο, 4 Μαΐου 2024, 1:16 AM

Περιγραφή

Μετά την ολοκλήρωση της ενότητας οι φοιτητές θα μπορούν να:

  • χρησιμοποιούν τις λειτουργίες ρύθμισης του Edpy
  • δημιουργούν κώδικα για να κινήσουν προς τα εμπρός και προς τα πίσω το ρομπότ Edison χρησιμοποιώντας εντολές Edpy
  • δημιουργούν κώδικα για να στρίψουν το ρομπότ Edison χρησιμοποιώντας εντολές Edpy

8.1.1 - Edpy

Μέχρι τώρα χρησιμοποιούσαμε τετράγωνα εικονίδια για να προγραμματίσουμε το ρομπότ edison. Τώρα θα συνδυάσουμε την ρομποτική με την Python.

Πατήστε πάνω στο σύνδεσμο για το Edpy, εδώ και ανοίξτε την Εφαρμογή Edpy

 

edpy

Documentation

Σε αυτό το παράθυρο μπορείτε να χρησιμοποιήσετε το πεδίο αναζήτησης για να ψάξετε στην τεκμηρίωση, εντολές - παραδείγματα που ταιριάζουν με την αναζήτηση σας θα εμφανιστούν στο παράθυρο.

Recently Opened

Αυτό το παράθυρο περιέχει μία λίστα με τα προγράμματα που ανοίξατε πρόσφατα.

Examples

Αυτό το παράθυρο περιέχει μία λίστα με παραδείγματα τα οποία μπορείτε να επιλέξετε και ανοίξετε στην περιοχή προγραμματισμού.

Programming Area

Εδώ τοποθετείτε τον κώδικα σε Python για τον έλεγχο του ρομπότ Edison.

Check Code

Όταν το επιλέγετε ο κώδικας ελέγχεται για λάθη. Αν βρεθούν λάθη ένα μήνυμα θα εμφανιστεί στο παράθυρο εξόδου του μεταγλωττιστή στο κάτω μέρος της οθόνης, παρέχοντας λεπτομέρειες για τα λάθη.

Program Edison

Όταν το επιλέξετε, το τρέχων πρόγραμμα μεταφορτώνεται στο ρομπότ Edison, υπό την προυπόθεση ότι το ρομπότ είναι έτοιμο να προγραμματιστεί.

Compiler Output

Εδώ εμφανίζονται τα λάθη που θα ανιχνευτούν όταν πατήσετε το κουμπί “Check Code”. Αν δεν υπάρχουν λάθη θα δείτε το μήνυμα: “There are no errors in your code.” Η Διαδικασία κατά την οποία η Python θα μετατρέψει τον κώδικα που γράψατε, σε εντολές κατανοητές από το ρομπότ ονομάζεται "μεταγλώττιση του κώδικα”.

Line help

Αυτό το παράθυρο εμφανίζει βοήθεια σχετική με εντολή που βρίσκεται κάτω από τον κέρσορα σας.

8.1.2 - Κώδικας βασικών ρυθμίσεων - Setup Code

Setup Code

Όλα τα προγράμματα για το Edison πρέπει να περιέχουν κώδικα βασικών ρυθμίσεων τον οποίο βλέπουμε κάθε φορά που ανοίγουμε την εφαρμογή EdPy.

#-------------Setup---------------- import Ed Ed.EdisonVersion = Ed.V2 Ed.DistanceUnits = Ed.CM Ed.Tempo = Ed.TEMPO_MEDIUM #--------Your code below-----------


Όπως μάθαμε ήδη, οι γραμμές που αρχίζουν με # είναι σχόλια.

import Ed

Ο Παραπάνω κώδικας εισάγει μία βιβλιοθήκη με εντολές που ελέγχουν το ρομπότ  Edison.

Ed.DistanceUnits = Ed.CM

Ο παραπάνω κώδικας θέτει τη μονάδα μέτρησης σε εκατοστά για τις εντολές οδήγησης.

Ed.Tempo = Ed.TEMPO_MEDIUM

Ο παραπάνω κώδικας θέτει το ρυθμό παιξίματος μουσικής σε "κανονική ταχύτητα".

8.1.3 - Δοκιμαστικό πρόγραμμα - Test Program

Επιλέξτε το "test program" από το παράθυρο Examples στα αριστερά.

Το δοκιμαστικό πρόγραμμα μοιάζει με αυτό:

#-------------Setup---------------- import Ed Ed.EdisonVersion = Ed.V2 Ed.DistanceUnits = Ed.TIME Ed.Tempo = Ed.TEMPO_MEDIUM #--------Your code below----------- while True: Ed.PlayBeep() Ed.LeftLed(Ed.OFF) Ed.RightLed(Ed.ON) Ed.Drive(Ed.SPIN_RIGHT, 5, 350) Ed.TimeWait(20, Ed.TIME_MILLISECONDS) Ed.PlayBeep() Ed.LeftLed(Ed.ON) Ed.RightLed(Ed.OFF) Ed.Drive(Ed.SPIN_LEFT, 5, 350) Ed.TimeWait(20, Ed.TIME_MILLISECONDS)

Το Edison εξετάζει μία γραμμή κάθε φορά και εκτελεί την εντολή που υπάρχει σε αυτή τη γραμμή. Κενές γραμμές ή γραμμές με σχόλια αγνοούνται

Κάθε μία από αυτές τις γραμμές καλεί κάποια εντολή ενσωματωμένη στο Edison. Μπορείτε να εξερευνήσετε κάθε μία από αυτές αυτές τις εντολές αναζητώντας πληροφορίες για αυτές στο παράθυρο τεκμηρίωσης "Documentation".

Στην Python, οι εντολές μπορεί να δέχονται παραμέτρους οι οποίες περνάνε σε αυτές για την περιγραφή της χρήσης της εντολής. Για παράδειγμα, η εντολή Ed.RightLed() δέχεται μία παράμετρο που διευκρινίζει αν το LED πρέπει να ΑΝΑΨΕΙ (Ed.ON) ή να ΣΒΗΣΕΙ (Ed.OFF).

Η εντολή Ed.PlayBeep() δεν δέχεται κάποια παράμετρο. Στην εντολή Ed.TimeWait() υπάρχουν 2 παράμετροι – η πρώτη αφορά το χρονικό διάστημα σε δευτερόλεπτα ή χιλιοστά δευτερολέπτου για αναμονή, και η δεύτερη παράμετρος αφορά τη μονάδα μέτρησης του χρόνου (χιλιοστά δευτερολέπτου ή δευτερόλεπτα).

Σαν άσκηση, βρείτε πόσες παραμέτρους δέχεται κάθε μία από τις ακόλουθες εντολές:

  • Ed.PlayBeep()
  • Ed.TimeWait()
  • Ed.LeftLed()
  • Ed.DriveRightMotor()

8.1.4 - Οδήγηση

Κάντε κλικ στο Menu και αρχίστε ένα νέο πρόγραμμα

Γράψτε το ακόλουθο πρόγραμμα για να οδηγήσετε το ρομπότ Edison εμπρός.

#-------------Setup---------------- import Ed Ed.EdisonVersion = Ed.V2 Ed.DistanceUnits = Ed.CM Ed.Tempo = Ed.TEMPO_MEDIUM #--------Your code below----------- Ed.Drive(Ed.FORWARD, Ed.SPEED_5, 8)


Όπως γράφετε στο “Ed” παρατηρήστε ότι ένα κουτάκι ανοίγει και μας προτείνει το τι θα μπορούσε να ακολουθήσει την εντολή που πληκτρολογούμε. Αυτό είναι μία ιδιότητα της εφαρμογής EdPy που ονομάζεται "συμπλήρωση γραμμής εντολών" (command line completion) και κάνει τον προγραμματισμό ταχύτερο.

Αφού πληκτρολογήσετε τον παραπάνω κώδικα πατήστε το κουμπί “Check Code” να να σιγουρευτείτε ότι δεν έχετε τυπογραφικά λάθη στον κώδικα. Αυτού του είδους τα λάθη ονομάζονται "συντακτικά λάθη" επειδή ο μεταγλωττιστής της Python δεν μπορεί να καταλάβει λέξεις που δεν είναι μέρος του λεξιλογίου ή δεν ακολουθούν τη σωστή σύνταξη εντολών.

Η Ed.Drive() είναι μία συνάρτηση της Python από τη βιβλιοθήκη του Edison. Οι συναρτήσεις είναι τμήματα κώδικα που που εκτελούν μία συγκεκριμένη λειτουργία ανάλογα με τις παραμέτρους που θα δεχθεί. Η συνάρτηση Drive() δέχεται τρεις παραμέτρους:

  • κατεύθυνση – την κατεύθυνση προς την οποία θα οδηγηθεί το Edison
  • ταχύτητα – η ταχύτητα με την οποία το Edison θα μετακινηθεί, τιμές από 1 μέχρι 10, όπου 10 είναι η μέγιστη ταχύτητα
  • απόσταση – η απόσταση που θα διανύσει το Edison σύμφωνα με την καθορισμένη μονάδα μέτρησης (εκατοστά που καθορίζονται με τη δήλωση "Ed.CM", ίντσες που καθορίζονται με "Ed.INCH", ή χρόνο με "Ed.TIME").

Χρησιμοποιήστε τα σημάδια εκκίνησης και τερματισμού του φύλλου δραστηριότητας 2.1. 

Μετρήστε την απόσταση μεταξύ γραμμής εκκίνησης και τερματισμού και δοκιμάστε να αλλάξετε το πρόγραμμα σας ώστε το Edison να σταματήσει λίγο πριν τη γραμμή τερματισμού.

8.1.5 - Απεριόριστη απόσταση - Περιορισμένος χρόνος

Τι γίνεται αν θέλετε να προχωρήσει το ρομπότ σας χωρίς να σταματήσει ή να σταματήσει μετά από ένα συμβάν ή μετά από ορισμένο χρόνο; Τότε πρέπει να χρησιμοποιήσετε την παράμετρο Ed.DISTANCE_UNLIMITED

Αντιγράψτε τον παρακάτω κώδικα στο edison

#-------------Setup---------------- import Ed Ed.EdisonVersion = Ed.V2 Ed.DistanceUnits = Ed.CM Ed.Tempo = Ed.TEMPO_MEDIUM #--------Your code below----------- Ed.Drive(Ed.FORWARD, Ed.SPEED_6, Ed.DISTANCE_UNLIMITED) Ed.TimeWait(500, Ed.TIME_MILLISECONDS) Ed.Drive(Ed.STOP, Ed.SPEED_10, 0)


Με αυτές τις εντολές το edison πηγαίνει προς τα εμπρός με ταχύτητα 6 για 500 χιλιοστά του δευτερολέπτου (μισό δευτερόλεπτο).

8.1.6 - Περιστροφική κίνηση και στροφή

Αντιγράψτε τον κώδικα που ακολουθεί στο edpy

#-------------Setup---------------- import Ed Ed.EdisonVersion = Ed.V2 Ed.DistanceUnits = Ed.CM Ed.Tempo = Ed.TEMPO_MEDIUM #--------Your code below----------- degresToTurn = 90 Ed.Drive(Ed.SPIN_LEFT, Ed.SPEED_6, degresToTurn)


Παρατηρήστε ότι στη θέση της τρίτης παραμέτρου απόστασης υπάρχει η λέξη  “degreesToTurn”. Αυτή είναι μία μεταβλητή στην Python και αναπαριστά μία τιμή που όχι οριστεί να είναι 90. Αυτό ονομάζεται “ανάθεση τιμής” σε μία μεταβλητή.

Οι μεταβλητές στην Python είναι τμήματα μνήμης για αποθήκευση τιμών που χρησιμοποιούνται σε ένα πρόγραμμα. Ένα πλεονέκτημα της χρήσης μεταβλητών είναι ότι αν η τιμή τους αλλάξει, αρκεί να την αλλάξουμε σε μία μόνο γραμμή κώδικα.

Προσθέστε την ακόλουθη γραμμή κώδικα στο πρόγραμμα σας, μετά την τελευταία γραμμή και, μεταφορτώστε και εκτελέστε το πρόγραμμα στο edison.

Ed.Drive(Ed.SPIN_RIGHT, Ed.SPEED_6, degreesToTurn)


8.1.7 - Μικρός λαβύρινθος

Μπορείτε να λύσετε το μικρό αυτό λαβύρινθο με την edpy?

mini maze

Μπορείτε να δείτε μία λύση εδώ