Μετάβαση στο κεντρικό περιεχόμενο
Απαιτήσεις ολοκλήρωσης

clap,clapclap,clapclapclap


'Οπως είδαμε και σε προηγούμενη ενότητα, εμφωλιάζοντας ένα if-else μπλοκ μέσα σε ένα forever βρόχο, μπορούμε να χτίσουμε ένα πρόγραμμα οδήγησης ελεγχόμενο με χειροκρότημα για τον Edison. Το πρόγραμμα μπορεί να κάνει τον Edison και να περιμένει μέχρι να εντοπιστεί ένα χειροκρότημα, στη συνέχεια είτε να οδηγήσει προς τα εμπρός είτε να γυρίσει 90 μοίρες, ανάλογα με το αν το ρομπότ ανιχνεύσει ένα χειροκρότημα ή δύο χειροκροτήματα.

Κοιτάξτε αυτό το πρόγραμμα οδήγησης που ελέγχεται από χειροκροτήματα:

Αυτό το πρόγραμμα είναι πολύ πλούσιο σε νέο περιεχόμενο για εμάς. Ας το μελετήσουμε με προσοχή.


Παρατηρήσεις

Καθαρισμός δεδομένων



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

Έτσι όταν ο Edison ελέγξει αν έχει εκπληρωθεί μια προϋπόθεση, εάν υπάρχουν αποθηκευμένα δεδομένα, το ρομπότ θα σκεφτεί ότι η κατάσταση έχει εκπληρωθεί, ακόμα και αν δεν έχει συμβεί αυτήν τη φορά αλλά κάποια προηγούμενη! Γι' αυτό είναι καλή πρακτική κωδικοποίησης να καθαρίζουμε τα δεδομένα των αισθητήρων. Αυτό είναι ιδιαίτερα σημαντικό όταν χρησιμοποιείτε συμβάντα αισθητήρων σε ένθετους όρους μέσα σε βρόχους. Δεν θέλετε τα δεδομένα από έναν προηγούμενο βρόχο να επηρεάσουν τον επόμενο βρόχο!

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


Until


Μια ακόμα παρατήρηση αφορά την χρήση εντολής όρων until.

  


Αναγνωρίζουμε σε αυτήν το κενό για έναν εξάγωνο όρο που είδαμε και στην εντολή if 

Η συγκεκριμένη εντολή ενημερώνει το Edison ότι πρέπει να περιμένει (ένα ακαθόριστο διάστημα) έως ότου εκπληρωθεί ο όρος.

Παρόμοια εντολή όρου είναι και η 


 Ενώ στο μενού drive μπορούμε να βρούμε τις:


  • Μπροστά έως ότου.........,
  • Πίσω έως ότου........
  • Το spin (αναπτύσσεται σε μπροστά στροφή ή πίσω στροφή) αριστερά έως ότου.......
  • και spin (αναπτύσσεται σε μπροστά στροφή ή πίσω στροφή)δεξιά έως ότου.......

αντίστοιχα.

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

Οι συνθήκες αυτές περιλαμβάνουν μπλοκ του μενού Sensing


και χρησιμοποιούνται με τις παρατηρήσεις που έχουμε θέσει νωρίτερα για αυτές(εκκίνηση αισθητήρα, καθαρισμός τιμής κτλ).


clapclapclap


Δυο χειροκροτήματα

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

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

Η Δημιουργία του προγράμματος:


Σύμφωνα με το πρόγραμμά μας

  • Κανένας ήχος

Το Edison ...απλά περιμένει.


  • Ένας ήχος:

To Edison κινείται μπροστά δεξιά για 90 μοίρες και περιμένει.


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



Τελευταία τροποποίηση: Κυριακή, 13 Μαρτίου 2022, 9:28 PM