Πολλές φορές με έχετε ρωτήσει πως να ενώσουμε διάφορα σκετς ώστε να λειτουργήσουν ταυτόχρονα από την ίδια υλοποίηση hardware. Στο σημερινό άρθρο θα δούμε πως γίνεται αυτό. Σε γενικές γραμμές ισχύει περίπου ότι τα πετάμε όλα μέσα σε ένα μοναδικό σκετς αλλά θα πρέπει να προσέξουμε ορισμένα πράγματα και να κάνουμε κάποιες τροποποιήσεις όπου χρειαστεί.
Επάνω ψηλά δηλώνουμε τις βιβλιοθήκες που θα περιλαμβάνει το σκετς (εφόσον περιλαμβάνει κάποια ή κάποιες) Στη συνέχεια ορίζουμε τις μεταβλητές και εφόσον το επιθυμούμε δηλώνουμε αρχική τιμή για αυτές. Ακολουθεί το setup() όπου βάζουμε κάποιες εντολές που θα εκτελεστούν μόνο μια φορά κατά την εκκίνηση εκτέλεσης του προγράμματος και τέλος το loop() όπου βάζουμε τις εντολές που θα εκτελούνται συνεχώς σε επανάληψη. Δεν μπορούμε να έχουμε π.χ. δύο περιοχές με κώδικα με ονομασία loop(), επομένως δεν μπορούμε να βάλουμε τα δύο σκετς με αντιγραφή το ένα κάτω από το άλλο γιατί απλά δεν θα δουλέψει. Θα πρέπει να πάρουμε κομμάτι - κομμάτι τον κώδικα και να τον περάσουμε στο αντίστοιχο τμήμα του σκετς.
Εδώ μπορούμε να κάνουμε μια δοκιμή να τρέξουμε τον κώδικα αν και έχουμε ελάχιστες πιθανότητες να λειτουργήσει σωστά. Τι μπορεί να πάει στραβά; πολλά. Το πιο πιθανό είναι τα δύο σκετς να έχουν αναθέσει κάποιες λειτουργίες σε ίδιες εξόδους. Είναι αυτονόητο ότι δεν θα λειτουργήσει και θα πρέπει να αλλαχτούν τα ποδαράκια (έξοδοι Ι/Ο ) ώστε να είναι επιφορτισμένα με μία μόνο εργασία (π.χ. να ανοίγουν κάποιο ρελέ ή να οδηγούν κάποιο φετ κλπ). Θέλει προσοχή όταν αλλάζουμε κάποια έξοδο με κάποια άλλη γιατί δεν είναι όλες ίδιες. Για παράδειγμα το arduino δεν μπορεί να βγάλει σήμα PWM σε όλες τις εξόδους. Αν μεταφέρουμε μια έξοδο που χρησιμοποιούμε PWM σε μια άλλη που δεν είναι PWM τότε φυσικά δεν θα λειτουργήσει. Επίσης οι είσοδοι είναι αναλογικές και ψηφιακές Δεν μπορούμε να αναθέσουμε την παρακολούθηση ενός αναλογικού σήματος σε μια ψηφιακή είσοδο. Αντιθέτως μια αναλογική είσοδος μπορεί να λειτουργήσει και ως ψηφιακή.
Το επόμενο που πρέπει να προσέξουμε είναι οι μεταβλητές. Δεν πρέπει να έχουμε κοινές μεταβλητές από τα δύο σκετς. Αν και είναι πιθανό να λειτουργήσει (να μην χτυπάει η μεταγλώττιση του προγράμματος), όταν τρέχει το πρόγραμμα μπορεί να μπερδεύεται και να χρησιμοποιεί την τιμή της μεταβλητής που πήρε για το άλλο κομμάτι σκετς που ενσωματώσαμε.
Γενικώς οι αλλαγές που θα πρέπει να γίνουν σε ποδαράκια ή μεταβλητές θα πρέπει να γίνουν σε πολλά σημεία του προγράμματος οπότε χρειάζεται προσοχή για να μην ξεμείνει καμία αλλαγή. Σε αυτό βοηθάει και η αναζήτηση μέσα στο σκετς από τον editor.
Αφού φτάσουμε έως εδώ πιθανώς όλα να πάνε καλά και να λειτουργήσει το ενοποιημένο σκετς. Όμως υπάρχουν ακόμη πράγματα που μπορεί να πάνε στραβά. Μπορεί για παράδειγμα να έχουμε απεικόνιση σε LCD display. Στη χειρότερη περίπτωση μπορεί στο ένα σκετς να χρησιμοποιεί οθόνη με σύνδεση SPI και στο δεύτερο με σύνδεση I2C. Θα πρέπει να καταργήσουμε την μία οθόνη και να προσαρμόσουμε όλες τις κατάλληλες εντολές που αναφέρονται στην οθόνη από το δεύτερο σκετς. Αλλά ακόμη και αν τα δυο σκετς χρησιμοποιούν την ίδια βιβλιοθήκη και την ίδια σύνδεση της οθόνης πάλι μπορούν τα μηνύματα του ενός σκετς να επικαλύπτουν τα μηνύματα από το άλλο σκετς. Εδώ θα χρειαστεί να επέμβουμε στις εντολές Lcd.print() και να αλλάξουμε τις θέσεις που εμφανίζονται τα μηνύματα. Ενδεχομένως να χρειαστεί να αλλάξουμε και την οθόνη από 2 γραμμών σε 4 γραμμών.
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου