ΑΣΚΗΣΗ ΜHΧΑΤΡΟΝΙΚΗΣ Να σχεδιάσετε ένα σύστημα το οποίο ελέγχει την κατάσταση τριών διακοπτών on/off, όταν πατηθεί ένας διακόπτης επαναφοράς (push buron), και εξετάζει αν ο συνδυασμός των παραπάνω διακοπτών συμφωνεί με αυτόν ο οποίος έχει αποθηκευτεί στο μικροελεγκτή του παραπάνω συστήματος. Αν ο συνδυασμός είναι σωστός, ένα πράσινο led ανάβει και ένας κινητήρας ξεκινάει να περιστρέφετε για όσο χρονικό διάστημα ο παραπάνω διακόπτης επαναφοράς (push buron) είναι πατημένος. Ενώ αν ο συνδυασμός είναι λάθος, ένα κόκκινο led ανάβει, μια ηχητική σειρήνα (buzzer) ηχεί για χρονικό διάστημα 3sec και ταυτόχρονα απεικονίζετε σε ένα display ο αύξον αριθμός των αποτυχημένων προσπαθειών. Τέλος όταν εισάγετε ένας σωστός συνδυασμός η ένδειξη του display να μηδενίζετε.
ΛΥΣΗ Αρχικά απεικονίζουμε τα εξαρτήματα που μας δίνει το πρόβλημα και στη συνέχεια τα χωρίζουμε σε εισόδους και εξόδου του μικροελεγτή. Εξαρτήματα : Διακόπτες on/off on Push buron Πράσινο led Κόκκινο led off buzzer DC motor 7- segment display
Seven segment display (κοινής καθόδου)
+Vcc=5v Είσοδοι Έξοδοι Κόκκινο led +Vcc=5v buzzer +Vcc=5v +Vcc=5v Διακόπτες on/off ΜΙΚΡΟΕΛΕΓΚΤΗΣ f e a g d b c display Πράσινο led push buron +Vcc=24v motοr
int diakop~s1=1, diakop~s2=2, diakop~s3=3,push buron=0; int apo~ximenes_prospathies=0; int red_led=10, buzzer=11, a=4, b=5, c=6, d=7, e=8, f=9, g=14, green_led=12; void setup() pinmode(1,input); pinmode(2,input); pinmode(3,input); pinmode(0,input); pinmode(4,output); pinmode(5,output); pinmode(6,output); pinmode(7,output); pinmode(8,output); pinmode(9,output); pinmode(10,output); pinmode(11,output); pinmode(12,output); pinmode(13,output); pinmode(14,output); Εδώ δηλώνω ακέραιες μεταβλητές που αντιστοιχούν στο κάθε pin του μικροελεγκτή Στη void setup() δηλώνω, ποια pin του μικροελεγκτή θα είναι είσοδοι (INPUT) και ποια θα είναι έξοδοι(output)..
void loop() if(push buron==high) if(diakop~s1==low && diakop~s2==high && diakop~s3==low) digitalwrite(12,high); digitalwrite(13,high); apo~ximenes_prospathies=0; zero(); else apo~ximenes_prospathies++; switch(apo~ximenes_prospathies) case 0 : zero(); break; case 1 : one(); break; case 2 : two();break;...... case 9 : nine(); break; digitalwrite(10,high); digitalwrite(11,high); delay(3000); digitalwrite(11,low); Με την if, μόλις πατηθεί το push buron γίνεται έλεγχος αν ο συνδυασμός είναι αληθής, αν είναι σωστός τα pin 12 και 13 θα γίνουν HIGH με σκοπό τη φωτοβολία του πράσινου led και την εκκίνηση του DC κινητήρα. Αν ο συνδυασμός είναι λανθασμένος με την else αυξάνει ο μετρητής των αποτυχημένων προσπαθειών κατά ένα. Με την switch ανάλογα με το πόσες αποτυχημένες προσπάθειες έχουμε κάνει καλεί την αντίστοιχη συνάρτηση με την οποία θα αποτυπώνετε στο display ο αριθμός των αποτυχημένων προσπαθειών Στη συνέχεια τα pin 10 και 11 θα γίνουν HIGH με σκοπό να ανάψει το κόκκινο led και να ηχεί buzzer για 3sec, μετά τα 3sec το pin 11 LOW και το buzzer θα σταματήσει..
void zero() digitalwrite(g,low); void one() digitalwrite(a,low); digitalwrite(g,low); void two() digitalwrite(c,low); void three() void four() digitalwrite(a,low); void five() digitalwrite(b,low); void six() digitalwrite(b,low); void seven() digitalwrite(g,low); void eight() void nine()