Πίνακας περιεχομένων:
- Βήμα 1: Καλωδίωση
- Βήμα 2: Δηλώσεις δήλωσης
- Βήμα 3: Η λειτουργία ρύθμισης
- Βήμα 4: Η συνάρτηση βρόχου
- Βήμα 5: Η συνάρτηση ClearLCD
- Βήμα 6: Η συνάρτηση DrawBoard
- Βήμα 7: Η λειτουργία PlayBoard
- Βήμα 8: Η λειτουργία ClearBoard
- Βήμα 9: Η συνάρτηση τίτλου
- Βήμα 10: Η λειτουργία ButtonsMenu
- Βήμα 11: Η λειτουργία ButtonsGame
- Βήμα 12: Η λειτουργία GameOver
- Βήμα 13: Η συνάρτηση εισαγωγής
- Βήμα 14: Η συνάρτηση BottomCheck
- Βήμα 15: Η λειτουργία WritSerial
- Βήμα 16: Ολοκλήρωση
Βίντεο: Arduino - Πιάνα πιάνου: 16 βήματα (με εικόνες)
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:36
Γεια σας, άνθρωποι του Διαδικτύου, θα μιλήσουμε για το πώς να φτιάξετε αυτό που ΣΙΓΟΥΡΑ δεν είναι αντιγραφή ενός παιχνιδιού για κινητά σε ένα arduino uno r3.
έτσι για να ξεκινήσετε, θα χρειαστείτε όλα τα μέρη, τα οποία είναι τα ακόλουθα! 1x Arduino Uno r3 ($ 42)
2x ασπίδα πληκτρολογίου LCD ($ 19 το καθένα)
5x κουμπιά
5x αντιστάσεις 220Ω
Καλώδια 28x
Εντάξει, μόλις έχετε όλα τα μέρη, ήρθε η ώρα να ξεκινήσετε!
Βήμα 1: Καλωδίωση
Ξεκινήστε συνδέοντας το arduino και τους φίλους σας όπως φαίνεται στο διάγραμμα, Βεβαιωθείτε ότι τα κουμπιά είναι σωστά συνδεδεμένα, με τις υποδοχές A0-4 στη γείωση των κουμπιών, ή το arduino θα πιστεύει ότι τα κουμπιά κρατιούνται συνεχώς αντί για ένα πάτημα.
Βήμα 2: Δηλώσεις δήλωσης
Όλος ο κώδικας εδώ θα πρέπει να προχωρήσει πριν από τη ρύθμιση και το βρόχο κενό, επειδή όλες αυτές οι μεταβλητές και τα αντικείμενα χρησιμοποιούνται σε πολλές από τις συναρτήσεις που θα δημιουργήσουμε.
Ξεκινήστε βάζοντας:
#περιλαμβάνω
στην κορυφή του κώδικα, αυτό λέει στο arduino να χρησιμοποιήσει τη βιβλιοθήκη "LiquidCrystal.h" και τις συναρτήσεις που αποτελούν μέρος του.
Το επόμενο βήμα είναι να καθορίσουμε τις καρφίτσες που χρησιμοποιούμε για τα κουμπιά μας τοποθετώντας αυτόν τον κώδικα κάτω από το #include:
#define btnEnter A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18
Ορίζουμε τους όρους btnEnter και btn1 σε btn 4 για να κάνουμε τον κώδικα ευκολότερο για μας να διαβάζουμε ή να αλλάζουμε εάν είναι απαραίτητο. Αυτό σημαίνει ότι όταν πληκτρολογούμε btn1 το arduino θα ξέρει ότι στην πραγματικότητα εννοούμε το κουμπί 15. Παρόλο που καλούμε τις θύρες θύρες 15, 16, 17 και 18, φέρουν την ετικέτα στο arduino ως A1 A2 A3 και A4, αυτό συμβαίνει επειδή είναι θύρες που χρησιμοποιούνται ειδικά για αναλογικές εισόδους, αν και τις χρησιμοποιούμε μόνο για ψηφιακές εισόδους.
Στη συνέχεια θα δημιουργήσουμε τα αντικείμενα που θα ελέγχουν τις οθόνες υγρών κρυστάλλων. Για να το κάνετε αυτό, βάλτε αυτόν τον κώδικα κάτω από τους ορισμούς μας
LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7).
Αυτό που κάνει λέει στο arduino ότι όταν καλούμε lcdLeft ή lcdRight αναφερόμαστε σε ένα αντικείμενο LiquidCrystal. Οι αριθμοί στις συνημμένες αγκύλες λένε στο arduino ποιες θύρες πρέπει να χρησιμοποιεί το αντικείμενο για την αποστολή μηνυμάτων στην οθόνη LCD όταν χρησιμοποιούμε τις λειτουργίες τους.
Τώρα πρέπει να δηλώσουμε τις μεταβλητές βάζοντας το επόμενο κομμάτι κώδικα κάτω από τις δηλώσεις αντικειμένου:
// αυτές οι μεταβλητές είναι επιλογές που μπορείτε να αλλάξετε - υψηλότεροι αριθμοί = γρηγορότερη ταχύτητα παιχνιδιού intintGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;
// ρύθμιση μεταβλητών για το gameboolean bolPlay; // παρακολουθεί αν ο παίκτης int intScore; // παρακολουθεί τη βαθμολογία του παίκτη int intDiff; // απλώς ένα αισθητικό πράγμα για να πείτε σε ποια δυσκολία βρίσκεται το παιχνίδι // ρυθμίστε μεταβλητές για εισαγωγή int intEnter. // παρακολουθεί εάν ο χρήστης πατήσει το κουμπί εισαγωγής int intInput. // παρακολουθεί ποια κουμπιά πατά ο χρήστης boolean bolTilePressed; // βεβαιωθείτε ότι η συσκευή αναπαραγωγής δεν πατά κατά λάθος ένα κουμπί 5x και δεν χάνει // ρυθμίστε μεταβλητές για turn int intTick; // μετράει χιλιάδες (ανά βρόχο) μέχρι intDelay int intDelay. // ο χρόνος που περιμένει το πρόγραμμα μέχρι την επόμενη στροφή σε millis int intGameSpeed. // παύση επιλογών εντοπισμού σφαλμάτων boolean bolSerialBoard; // όταν ισχύει θα εκτυπώσει τον πίνακα στη σειριακή οθόνη
Δηλώνουμε μια μεταβλητή δηλώνοντας τον τύπο δεδομένων και στη συνέχεια το όνομα της μεταβλητής, π. int thisIsAnInteger
Boolean μεταβλητές, όπως το bolSerialBoard και το bolPlay μπορούν να έχουν μόνο μία από τις δύο τιμές, true ή false.
Η ακέραιη μεταβλητή (int) όπως το intScore και το intInput μπορεί να λάβει ακέραιους αριθμούς ως τιμές, όπως 1, 5 ή 100.
Μερικοί άλλοι αξιοσημείωτοι τύποι δεδομένων που δεν χρησιμοποιούμε εδώ είναι μια συμβολοσειρά, η οποία είναι ένα κομμάτι κειμένου και ένα float, που είναι δεκαδικός αριθμός.
Κάθε μία από τις μεταβλητές εδώ χρησιμοποιείται σε πολλά διαφορετικά σημεία από το πρόγραμμα, εδώ είναι μια σύνοψη του τι κάνει η κάθε μία
Το bolPlay ενημερώνει το πρόγραμμα εάν πρέπει να εμφανιστεί το μενού ή εάν το πραγματικό παιχνίδι πρέπει να εκτελείται.
Το intScore παρακολουθεί τη βαθμολογία του παίκτη καθώς χτυπάει πλακάκια, Το intDiff χρησιμοποιείται στο κύριο μενού για να πει στο πρόγραμμα τι κομμάτι κειμένου να εκτυπώσει στις οθόνες LCD, Το intEnter χρησιμοποιείται για να πει στο πρόγραμμα εάν πατηθεί το κουμπί εισαγωγής (πιο αριστερά), Το intInput χρησιμοποιείται για να πει στο πρόγραμμα ποιο από τα άλλα 4 κουμπιά είναι πατημένο.
Το bolTilePressed χρησιμοποιείται για να βεβαιωθείτε ότι το πρόγραμμα διαβάζει μόνο όταν πατάτε το κουμπί και όχι όταν το κρατάτε πατημένο.
Τα intGameSpeed, intGameSpeedEasy, intGameSpeedMedium και intGameSpeedHard χρησιμοποιούνται για τον έλεγχο του πόσο γρήγορα πρέπει να επιταχυνθεί το παιχνίδι με βάση τη δυσκολία που έχει επιλεγεί.
Τα intTick και intDelay χρησιμοποιούνται για να σταματήσουν το πρόγραμμα να μετακινεί τον πίνακα κάθε φορά που κάνει βρόχο.
Το bolSerialBoard χρησιμοποιείται για να σας επιτρέψει να κάνετε το πρόγραμμα να στείλει τον πίνακα στη σειριακή οθόνη του arduino ως μια σειρά αριθμών για σκοπούς δοκιμής.
Τέλος, ήρθε η ώρα να δηλώσουμε τον πίνακα μας ως πίνακα χρησιμοποιώντας αυτόν τον κωδικό:
// set up game arrayint arrGame [16] [4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
Ένας πίνακας είναι ένας πίνακας που κάθε σημείο στο οποίο μπορεί να κληθεί για μαθηματικά ή να αλλάξει.
Ο κωδικός σας θα πρέπει τώρα να μοιάζει με αυτόν.
// περιλαμβάνει βιβλιοθήκες#include
// αυτές οι μεταβλητές είναι επιλογές που μπορείτε να αλλάξετε - υψηλότεροι αριθμοί = γρηγορότερη επιτάχυνση του παιχνιδιού
int intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;
// Ορισμός καρφίτσες
#define btnEnter A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18
// δημιουργία αντικειμένων LCD (n, ~, n, ~, ~, n)
LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);
// ρύθμιση συστοιχίας παιχνιδιών
int arrGame [16] [4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
// ρυθμίστε μεταβλητές για το παιχνίδι
boolean bolPlay; // παρακολουθεί αν ο παίκτης int intScore; // παρακολουθεί τη βαθμολογία του παίκτη int intDiff; // μόνο ένα αισθητικό πράγμα για να πείτε σε τι δυσκολία είναι το παιχνίδι
// ρύθμιση μεταβλητών για εισαγωγή
int intEnter; // παρακολουθεί εάν ο χρήστης πατήσει το κουμπί εισαγωγής int intInput. // παρακολουθεί ποια κουμπιά πατά ο χρήστης boolean bolTilePressed; // Βεβαιωθείτε ότι η συσκευή αναπαραγωγής δεν πατά κατά λάθος ένα κουμπί 5x και δεν χάνει
// ρύθμιση μεταβλητών για σειρά
int intTick; // μετράει χιλιάδες (ανά βρόχο) μέχρι intDelay int intDelay. // ο χρόνος που περιμένει το πρόγραμμα μέχρι την επόμενη στροφή σε millis int intGameSpeed.
// παύση επιλογών εντοπισμού σφαλμάτων
boolean bolSerialBoard; // όταν ισχύει θα εκτυπώσει τον πίνακα στη σειριακή οθόνη
Βήμα 3: Η λειτουργία ρύθμισης
Ο βρόχος εγκατάστασης είναι μια συνάρτηση που διαβάζεται από το arduino μόνο μία φορά όταν ξεκινά αρχικά.
Στον βρόχο εγκατάστασης απλώς ρυθμίζουμε τις τιμές μερικών μεταβλητών μας, επειδή αντί να τις ορίσουμε μια τιμή όταν τις δηλώνουμε, το κάνουμε εδώ.
Ξεκινήστε βάζοντας αυτόν τον κώδικα στο Void Setup.
bolPlay = false; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium;
Κάθε γραμμή ρυθμίζει απλώς μια μεταβλητή σε μια τιμή.
Το bolPlay έχει οριστεί σε false για να μην αρχίσει να παίζει το παιχνίδι.
Το intScore έχει οριστεί στο 0, επειδή φυσικά το σκορ σας ξεκινά από το 0.
Το intTick ξεκινά από το 0, επειδή το πρόγραμμα δεν μετράει αυτήν τη στιγμή τίποτα.
Το intDelay έχει οριστεί σε 1000 επειδή αυτός είναι ο ρυθμός με τον οποίο ξεκινούν τα πλακίδια.
Το intDiff είναι απλώς ένα ασκητικό πράγμα, ώστε το πρόγραμμα να ξέρει τι να γράψει για τη δυσκολία του παιχνιδιού.
Το intGameSpeed έχει οριστεί σε ό, τι και αν είναι το intGameSpeedMedium, που σημαίνει ότι έχει ρυθμιστεί στη μέση δυσκολία.
Στη συνέχεια, τοποθετήστε αυτόν τον κωδικό στο Void Setup κάτω από τον κωδικό που μόλις βάλατε.
lcdLeft.begin (16, 2); lcdRight.begin (16, 2);
Serial.begin (9600);
Αυτό λέει στο arduino να αρχίσει να επικοινωνεί με τον υπολογιστή μέσω της σειριακής οθόνης (ορατό κάνοντας κλικ στο κουμπί στην επάνω δεξιά γωνία του arduino IDE).
Το Void Setup θα πρέπει τώρα να μοιάζει με αυτό!
void setup () {Serial.begin (9600); // ξεκινήστε τη σειριακή οθόνη // ρυθμίστε τις μεταβλητές bolPlay = false; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium; // έναρξη lcd's lcdLeft.begin (16, 2); lcdRight.begin (16, 2); }
Βήμα 4: Η συνάρτηση βρόχου
Η λειτουργία βρόχου εκτελείται από το arduino κάθε επανάληψη του arduino.
Αντιγράψτε τον ακόλουθο κώδικα στο Void Loop.
void loop () {input (); // έλεγχος για είσοδο παιχνιδιού εάν (bolPlay == true) {if (intTick> = intDelay) {// ελέγξτε αν το παιχνίδι πρέπει να παίξει μια σειρά ή να συνεχίσει να περιμένει Serial.println ("~~~~~~~ print "); // εκτύπωση για να δηλώσει ότι ο πίνακας κινείται προς // writeSerial (); // εάν η επιλογή είναι ενεργοποιημένη, γράψτε τον πίνακα σε σειριακά κουμπιάGame (); // έλεγχος εισόδων παίκτη playBoard (); // μετακινήστε τον πίνακα και προσθέστε ένα νέο πλακίδιο clearLcd (); // καθαρίστε τις οθόνες LCD πριν σχεδιάσετε το drawBoard (). // σύρετε τον πίνακα στο κάτω μέρος του LCD που ελέγχετε (); intTick = 0; // επαναφορά intTick} else {buttonsGame (); // έλεγχος εισόδων παίκτη clearLcd (); // καθαρίστε τις οθόνες LCD πριν σχεδιάσετε το drawBoard (). // σύρετε τον πίνακα στο inttick του lcd = intTick + intGameSpeed; // add to tick}} else {clearLcd (); // καθαρίστε τις οθόνες LCD πριν σχεδιάσετε τον τίτλο (). // εμφάνιση τίτλου και βαθμολογιών infoMenu (); // διαβάστε την είσοδο του παίκτη clearBoard (); // διασφαλίστε ολόκληρο τον πίνακα = 0} καθυστέρηση (10). // καθυστέρηση του arduino για μια σύντομη στιγμή}
όταν το bolPlay είναι ίσο με true σημαίνει ότι το παιχνίδι παίζεται και πρέπει να τρέχει όλος ο κώδικας για το πότε παίζεται το παιχνίδι, αλλά θέλουμε μόνο ο πίνακας να προσθέσει ένα νέο πλακίδιο και να μετακινηθεί προς τα κάτω όταν το intTick είναι μεγαλύτερο από το intDelay μας, Διαφορετικά, εξακολουθούμε να θέλουμε να επιτρέψουμε στον χρήστη να πατήσει ένα κουμπί για να χτυπήσει ένα πλακίδιο και να αυξήσει την ταχύτητα του intTick.
Το μεγαλύτερο μέρος αυτού του κώδικα χρησιμοποιεί συναρτήσεις που πρέπει να κάνουμε και θα τις κάνουμε στα επόμενα βήματα. Ο σκοπός αυτών των λειτουργιών είναι ο ακόλουθος.
Η εισαγωγή διαβάζει ποια κουμπιά έχει πατήσει ο χρήστης.
buttonsGame ελέγχει τι κάνουν τα κουμπιά όταν βρίσκονται στο παιχνίδι και όχι στο μενού
Το playBoard προσθέτει ένα νέο πλακίδιο στον πίνακα και, στη συνέχεια, μετακινεί τα πάντα στον πίνακα κατά ένα διάστημα
Το clearLCD καθαρίζει τις οθόνες LCD για να βεβαιωθεί ότι δεν έχουν μείνει φαντάσματα πίσω από τα πλακάκια
Το drawBoard περνά από το arrGame και το εκτυπώνει στις οθόνες LCD
Το clearBoard καθαρίζει ολόκληρο το arrGame όταν το παιχνίδι δεν παίζεται
bottomCheck ελέγχει το κάτω μέρος του arrGame για κατάσταση αστοχίας
title εμφανίζει τον τίτλο και τις πληροφορίες βαθμολογίας του παιχνιδιού όταν βρίσκεται στο μενού
κουμπιά μενού ελέγχει τι κάνουν οι εισαγωγές του χρήστη όταν βρίσκονται στο μενού.
Το gameOver είναι μια άλλη συνάρτηση, αν και δεν καλείται εδώ όπως λέγεται στις κάτω λειτουργίεςΕλέγξτε και κουμπιάΠαιχνίδι.
Βήμα 5: Η συνάρτηση ClearLCD
για να δημιουργήσουμε μια συνάρτηση ξεκινάμε προσθέτοντας αυτό στον κώδικα
void functionName () {
}
το "functionName" μπορεί να είναι οτιδήποτε, αρκεί να μην υπάρχει ήδη.
Αντιγράψτε αυτόν τον κώδικα στο πρόγραμμά σας:
void clearLcd () {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 1; ii ++) {lcdLeft.setCursor (i, ii); lcdLeft.write (""); lcdRight.setCursor (i, ii); lcdRight.write (""); }}}
Αυτό περνάει από ολόκληρο τον πίνακα χρησιμοποιώντας 2 μετρημένους βρόχους για να περάσετε από κάθε σημείο στις οθόνες LCD και να γράψετε ένα κενό.
Χωρίς να μηδενιστεί σε τίποτα, τα LCD θα διατηρήσουν ό, τι γράφτηκε προηγουμένως
Βήμα 6: Η συνάρτηση DrawBoard
αντιγράψτε αυτόν τον κώδικα στο πρόγραμμά σας
void drawBoard () {for (int i = 1; i <= 15; i ++) {// σχεδιάστε κολλήματα 1 και 2 στην αριστερή οθόνη LCD // αν το κεραμίδι = 0 δεν γράφει τίποτα, = 1 γράφετε "#", = 2 γράψτε "@" lcdLeft.setCursor (i, 1); // ορίστηκε στην πρώτη στήλη (πιο αριστερά) εάν (arrGame [0] == 1) {lcdLeft.write ("#");} if (arrGame [0] == 2) {lcdLeft.write ("@");} lcdLeft.setCursor (i, 0); // ορίστε στη δεύτερη στήλη (στο κέντρο αριστερά) εάν (arrGame [1] == 1) {lcdLeft.write ("#");} if (arrGame [1] == 2) {lcdLeft.write ("@");} lcdRight.setCursor (i, 1); // ορίστε στην τρίτη στήλη (στο κέντρο δεξιά) εάν (arrGame [2] == 1) {lcdRight.write ("#");} if (arrGame [2] == 2) {lcdRight.write ("@");} lcdRight.setCursor (i, 0); // ορίστε στην τέταρτη στήλη (πιο δεξιά) εάν (arrGame [3] == 1) {lcdRight.write ("#");} if (arrGame [3] == 2) {lcdRight.write ("@");}}}
αυτό χρησιμοποιεί ένα βρόχο για να περάσει από κάθε σειρά του πίνακα, στη συνέχεια ελέγχει αν οποιαδήποτε στήλη στη σειρά είναι ίση με 1 ή 2, με βάση αυτό εκτυπώνει στη LCD είτε ένα hashtag, για ένα πλακίδιο που δεν έχει ακόμη χτυπήστε, ή ένα @ για ένα πλακίδιο επιτυχίας.
Βήμα 7: Η λειτουργία PlayBoard
αντιγράψτε αυτόν τον κώδικα στο πρόγραμμά σας.
void playBoard () {for (int i = 0; i <= 3; i ++) {arrGame [0] = 0;} // διαγραφή arrGame της επάνω σειράς [0] [τυχαία (0, 4)] = 1; // ορίστε ένα τυχαίο σημείο στην επάνω σειρά να είναι πλακίδιο για (int i = 15; i> = 1; i-) {// που λειτουργεί από το κάτω μέρος του πίνακα προς τα πάνω για (int ii = 0; ii <= 3; ii ++) {// για κάθε σύγκρουση arrGame [ii] = arrGame [i - 1] [ii]; }}}
αυτός ο κώδικας ξεκινά με την εκκαθάριση ολόκληρης της κορυφαίας σειράς στο 0, ή χωρίς πλακίδιο και, στη συνέχεια, ορίζει ένα τυχαίο πλακίδιο σε 1 και μη επιλεγμένο πλακίδιο.
Στη συνέχεια περνάει από έναν μετρημένο βρόχο αντίστροφα, από 15 σε 1, ρυθμίζοντας τη σειρά ίση με ό, τι ισούται με τη γραμμή πάνω της, κάνοντας τον πίνακα να μετακινείται προς τα κάτω από την οθόνη LCD
Βήμα 8: Η λειτουργία ClearBoard
αντιγράψτε αυτόν τον κώδικα στο πρόγραμμά σας.
void clearBoard () {// επαναφορά των τιμών επιλογής και καθυστέρησης intTick = 0; intDelay = 1000; // περάστε από τον πίνακα και ορίστε τα πάντα στο 0 για (int i = 0; i <= 15; i ++) {για (int ii = 0; ii <= 3; ii ++) {arrGame [ii] = 0 ? }}}
Αυτός ο κώδικας εκτελείται όταν το παιχνίδι δεν παίζεται για να βεβαιωθείτε ότι το σύνολο του arrGame έχει οριστεί σε 0, ή χωρίς πλακίδια, χρησιμοποιώντας καταμετρημένους βρόχους για να περάσετε από τον πίνακα.
Ο κώδικας επαναφέρει επίσης τις τιμές των intDelay και intTick.
Βήμα 9: Η συνάρτηση τίτλου
αντιγράψτε τον ακόλουθο κώδικα στο πρόγραμμά σας
άκυρος τίτλος () {// εγγραφή τίτλου στην οθόνη LCD και χώρο για βαθμολογία lcdRight.setCursor (0, 0); lcdRight.write ("Πλακάκια πιάνου"); lcdRight.setCursor (0, 1); lcdRight.write ("Βαθμολογία:"); // μετατροπή της παρτιτούρας σε string string strScore [3]. sprintf (strScore, "%d", intScore); // εμφάνιση βαθμολογίας σε LCD lcdRight.write (strScore); // προσθέστε το diffictuly lcdRight.setCursor (10, 1); if (intDiff == 0) {lcdRight.write ("Εύκολο"); } if (intDiff == 1) {lcdRight.write ("Medium"); } if (intDiff == 2) {lcdRight.write ("Hard"); } // Πατήστε λίγο εντολή lcdLeft.setCursor (0, 0); lcdLeft.write ("Πατήστε Enter"); lcdLeft.setCursor (0, 1); lcdLeft.write ("για αρχή!"); }
Αυτός ο κώδικας γράφει τον τίτλο του παιχνιδιού και τη βαθμολογία στις οθόνες LCD, το κάνει αυτό λέγοντας στην LCD από πού να αρχίσει να πληκτρολογεί χρησιμοποιώντας το LCD.setCursor και στη συνέχεια γράφοντας τη συμβολοσειρά σε LCD.write.
Δημιουργείται επίσης εδώ μια νέα μεταβλητή, strScore, χρησιμοποιείται για τη μετατροπή του intScore σε τύπο δεδομένων συμβολοσειράς ή χαρακτήρα χρησιμοποιώντας τη συνάρτηση sprintf.
Το intDiff χρησιμοποιείται επίσης εδώ, με βάση τις τιμές του, εκτυπώνει τις διαφορετικές επιλογές δυσκολίας.
Βήμα 10: Η λειτουργία ButtonsMenu
εισαγάγετε τον ακόλουθο κώδικα στο πρόγραμμά σας
void buttonsMenu () {// όταν πατηθεί enter ξεκινήστε το παιχνίδι και επαναφέρετε την τιμή βαθμολογίας εάν (intEnter == 1) {bolPlay = true; intScore = 0; playBoard (); drawBoard (); } // όταν πατηθεί το κουμπί 3 ενεργοποιήστε την επιλογή εντοπισμού σφαλμάτων εκτύπωσης του πίνακα σε σειριακή αν (intInput == 3) {if (bolSerialBoard == false) {Serial.println ("Serial Board Active"); bolSerialBoard = true; } else {Serial.println ("Serial Board Disabled"); bolSerialBoard = false; }} // ορίστε την ταχύτητα του παιχνιδιού σε εύκολη δυσκολία εάν (intInput == 0) {Serial.print ("Game set to easy ("); Serial.print (intGameSpeedEasy); Serial.println ("ms acceleration)"); intDiff = 0; intGameSpeed = intGameSpeedEasy; } // ορίστε την ταχύτητα του παιχνιδιού σε μέση δυσκολία εάν (intInput == 1) {Serial.print ("Το παιχνίδι έχει οριστεί σε μέσο ("); Serial.print (intGameSpeedMedium); Serial.println ("ms επιτάχυνση)"); intDiff = 1; intGameSpeed = intGameSpeedMedium; } // ορίστε την ταχύτητα του παιχνιδιού σε σκληρή δυσκολία εάν (intInput == 2) {Serial.print ("Game set to hard ("); Serial.print (intGameSpeedHard); Serial.println ("ms acceleration)"); intDiff = 2; intGameSpeed = intGameSpeedHard; }}
αυτός ο κωδικός εκτελείται μόνο όταν το bolPlay είναι ίσο με false στον κενό βρόχο
εάν το intEnter έχει οριστεί σε 1 σημαίνει ότι έχει πατηθεί το κουμπί εισαγωγής, εάν πατηθεί το πρόγραμμα ορίζει το bolPlay σε true και το παιχνίδι ξεκινά.
Στη συνέχεια, το πρόγραμμα διαβάζει σε τι ισούται το intInput. αν είναι ίσο με το 0 πατάτε το πρώτο κουμπί από τα αριστερά, ανεβαίνοντας προς τα δεξιά μέχρι το 3. Αν η είσοδος είναι ίση με 4 δεν πατάτε κανένα κουμπί.
εάν πατήσετε τα κουμπιά 0-2 το παιχνίδι αλλάζει τη δυσκολία, προσαρμόζοντας επίσης την τιμή της ταχύτητας του παιχνιδιού, πράγμα που σημαίνει ότι θα επιταχυνθεί γρηγορότερα.
αν πατηθεί το κουμπί 3 το παιχνίδι θα ενεργοποιήσει ή θα απενεργοποιήσει μια λειτουργία εντοπισμού σφαλμάτων όπου ολόκληρος ο πίνακας εκτυπώνεται στη σειριακή οθόνη για να βοηθήσει στην εύρεση ζητημάτων στο πρόγραμμα.
Βήμα 11: Η λειτουργία ButtonsGame
αντιγράψτε τον ακόλουθο κώδικα στο πρόγραμμά σας
void buttonsGame () {if (intInput! = 4) {// αν πατηθεί ένα κουμπί εάν (bolTilePressed == false) {// μόνο αν το bolTilePressed είναι εσφαλμένη ενέργεια ενεργοποίησης για τον έλεγχο ενός κουμπιού πατήστε bolTilePressed = true; // στη συνέχεια, ορίστε το bolTilePressed στο true για να βεβαιωθείτε ότι δεν ενεργοποιήθηκε ξανά τυχαία int intLowestTile = 0; // για να οριστεί στο πλακίδιο με το χαμηλότερο πλακίδιο int intCheckedTile = 15; // για να παρακολουθείτε ποια πλακίδια έχουν ελεγχθεί ενώ (intLowestTile == 0) {// εφόσον δεν έχει ρυθμιστεί σε τίποτα ελέγξτε τα πλακίδια για (int i = 0; i 100) {// όσο int η καθυστέρηση δεν είναι μικρότερη από 100 intDelay = intDelay - 20; // πάρτε μια τιμή από αυτό}} else {Serial.println ("Πατήθηκε λάθος κουμπί"); τέλος παιχνιδιού(); // διαφορετικά τελείωσε το παιχνίδι}}}}}
Ο κώδικας εκτελείται μόνο όταν το bolPlay είναι ίσο με true στον κενό βρόχο.
Όπως κουμπιάΜενού με βάση την τιμή του intInput ελέγχει αν η συσκευή αναπαραγωγής έχει χτυπήσει ένα πλακίδιο ή έχει χάσει.
Το κάνει αυτό περνώντας από το arrGame από κάτω προς τα πάνω χρησιμοποιώντας έναν βρόχο while για να αναζητήσετε ποια σειρά είναι η χαμηλότερη με ένα πλακίδιο unhit. Στη συνέχεια, ελέγχει αν το σημείο στη σειρά που αντιστοιχεί στο κουμπί που έχει πατηθεί είναι ένα πλακίδιο που δεν έχει επιλεγεί ή όχι, αν είναι unhit το θέτει ίσο με 2 αντί για 1, που σημαίνει ότι θα εμφανίζεται ως @, διαφορετικά ενεργοποιεί το παιχνίδιOver συνάρτηση που δεν έχουμε ακόμη δημιουργήσει.
Αυτή η συνάρτηση χρησιμοποιεί επίσης τη μεταβλητή bolTilePressed ρυθμίζοντάς την σε true όταν πατάτε ένα κουμπί και false όταν δεν πατάτε κανένα κουμπί. Αυτό γίνεται για να διασφαλιστεί ότι ο χρήστης δεν θα χάσει κατά λάθος το παιχνίδι επειδή το πρόγραμμα νόμιζε ότι πάτησε το κουμπί πολλές φορές όταν το κρατούσε πατημένο.
Βήμα 12: Η λειτουργία GameOver
Αντιγράψτε τον ακόλουθο κώδικα στο πρόγραμμά σας
void gameOver () {Serial.println ("Game Over!"); Serial.print ("Η βαθμολογία σας ήταν:"); Serial.println (intScore); Serial.print ("Η ταχύτητά σας ήταν:"); Serial.println (intDelay); bolPlay = false; }
Αυτό ενεργοποιείται είτε από τις λειτουργίες checkBottom είτε από κουμπιά Game και ενεργοποιεί το τέλος του παιχνιδιού ρυθμίζοντας το bolPlay να είναι ψευδές.
Εκτυπώνει επίσης ένα μήνυμα στη σειριακή οθόνη για τη βαθμολογία των χρηστών και τα πλακίδια ταχύτητας προστέθηκαν σε χιλιοστά του δευτερολέπτου.
Βήμα 13: Η συνάρτηση εισαγωγής
Αντιγράψτε τον ακόλουθο κώδικα στο πρόγραμμά σας.
void input () {intEnter = digitalRead (btnEnter); // διαβάστε enter // διαβάστε ποια από τις άλλες εισόδους ή εάν καμία δεν έχει οριστεί σε 4 εάν (digitalRead (btn1) == HIGH) {intInput = 0;} else {if (digitalRead (btn2) == HIGH) {intInput = 1;} else {if (digitalRead (btn3) == HIGH) {intInput = 2;} else {if (digitalRead (btn4) == HIGH) {intInput = 3;} else {intInput = 4; }}}} // σειριακή εκτύπωση των εισόδων if (intEnter == 1) {Serial.println ("Enter Pressed!");} if (intInput! = 4) {Serial.print ("Button Press:"); Serial.println (intInput); } else {// εάν δεν πατηθεί κανένα κουμπί επαναφορά bolTilePressed bolTilePressed = false; }}
Αυτός ο κωδικός χρησιμοποιείται με τις λειτουργίες buttonsGame και buttonsMenu. με βάση τα κουμπιά που έχει πατήσει ο χρήστης, ορίζει την τιμή του intInput, ή αν δεν πατηθεί κανένα κουμπί, ορίζει το intInput σε ίσο με 4.
Εάν δεν πατηθεί κανένα κουμπί, εδώ γίνεται επαναφορά του bolTilePressed για τη λειτουργία buttonsGame.
Εκτυπώνει επίσης ένα μήνυμα στη σειριακή οθόνη στην οποία πατάτε το κουμπί.
Βήμα 14: Η συνάρτηση BottomCheck
αντιγράψτε τον ακόλουθο κώδικα στο πρόγραμμά σας.
void bottomCheck () {for (int i = 0; i <= 3; i ++) {// for the 4 columns if (arrGame [15] == 1) {// εάν ένα κεραμίδι βρίσκεται στο κάτω μέρος Serial.println ("Πλακάκι στο κάτω μέρος"); arrGame [15] = 2; drawBoard (); καθυστέρηση (400)? arrGame [15] = 1; drawBoard (); καθυστέρηση (400)? arrGame [15] = 2; drawBoard (); καθυστέρηση (400)? arrGame [15] = 1; drawBoard (); καθυστέρηση (400)? τέλος παιχνιδιού(); }}}
χρησιμοποιώντας έναν βρόχο αυτός ο κώδικας ελέγχει την κάτω σειρά του arrGame για τυχόν πλακίδια unhit (πλακίδια ίσα με 1), εάν υπάρχει ένα unhit πλακίδιο στο κάτω μέρος της οθόνης θα αναβοσβήνει το πλακίδιο και στη συνέχεια θα ενεργοποιήσει το παιχνίδι πάνω από τη λειτουργία.
Βήμα 15: Η λειτουργία WritSerial
αντιγράψτε τον ακόλουθο κώδικα στο πρόγραμμά σας
void writeSerial () {if (bolSerialBoard == true) {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 3; ii ++) {Serial.print (arrGame [ii]); Serial.print (","); } Serial.println (""); }}}
Αυτή είναι η λειτουργία που ακολουθείται από την επιλογή εντοπισμού σφαλμάτων που μπορεί να ενεργοποιηθεί στη λειτουργία buttonsMenu. Εάν το bolSerialBoard έχει οριστεί σε true σε αυτήν τη λειτουργία, θα περάσει από το arrGame και θα εκτυπώσει ολόκληρο τον πίνακα στη σειριακή οθόνη για σκοπούς δοκιμής χρησιμοποιώντας έναν πίνακα.
Βήμα 16: Ολοκλήρωση
Όλος ο κωδικός σας δεν πρέπει να είναι πλήρης και να μοιάζει κάπως έτσι!
/ * * Όνομα - Πλακάκια πιάνου. Arduino * By - Domenic Marulli * Ημερομηνία - 11/ *
/ περιλαμβάνει βιβλιοθήκες
#περιλαμβάνω
// αυτές οι μεταβλητές είναι επιλογές που μπορείτε να αλλάξετε - υψηλότεροι αριθμοί = γρηγορότερη επιτάχυνση του παιχνιδιού
int intGameSpeedEasy = 10; int intGameSpeedMedium = 25; int intGameSpeedHard = 80;
// Ορισμός καρφίτσες
#define btnEnter A0 #define btn1 15 #define btn2 16 #define btn3 17 #define btn4 18
// δημιουργία αντικειμένων LCD (n, ~, n, ~, ~, n)
LiquidCrystal lcdLeft (8, 9, 12, 10, 11, 13); LiquidCrystal lcdRight (2, 3, 4, 5, 6, 7);
// ρύθμιση συστοιχίας παιχνιδιών
int arrGame [16] [4] = {{0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}};
// ρυθμίστε μεταβλητές για το παιχνίδι
boolean bolPlay; // παρακολουθεί αν ο παίκτης int intScore; // παρακολουθεί τη βαθμολογία του παίκτη int intDiff; // μόνο ένα αισθητικό πράγμα για να πείτε σε τι δυσκολία είναι το παιχνίδι
// ρύθμιση μεταβλητών για εισαγωγή
int intEnter; // παρακολουθεί εάν ο χρήστης πατήσει το κουμπί εισαγωγής int intInput. // παρακολουθεί ποια κουμπιά πατά ο χρήστης boolean bolTilePressed; // Βεβαιωθείτε ότι η συσκευή αναπαραγωγής δεν πατά κατά λάθος ένα κουμπί 5x και δεν χάνει
// ρύθμιση μεταβλητών για σειρά
int intTick; // μετράει χιλιάδες (ανά βρόχο) μέχρι intDelay int intDelay. // ο χρόνος που περιμένει το πρόγραμμα μέχρι την επόμενη στροφή σε millis int intGameSpeed.
// παύση επιλογών εντοπισμού σφαλμάτων
boolean bolSerialBoard; // όταν ισχύει θα εκτυπώσει τον πίνακα στη σειριακή οθόνη
// η ρύθμιση που θα εκτελεστεί μία φορά
void setup () {Serial.begin (9600); // ξεκινήστε τη σειριακή οθόνη // ρυθμίστε τις μεταβλητές bolPlay = false; intScore = 0; intTick = 0; intDelay = 1000; intDiff = 1; intGameSpeed = intGameSpeedMedium; // έναρξη lcd's lcdLeft.begin (16, 2); lcdRight.begin (16, 2); }
// ο βρόχος που θα τρέχει κάθε 10 χιλιοστά του δευτερολέπτου
void loop () {input (); // έλεγχος για είσοδο παιχνιδιού εάν (bolPlay == true) {if (intTick> = intDelay) {// ελέγξτε αν το παιχνίδι πρέπει να παίξει μια σειρά ή να συνεχίσει να περιμένει Serial.println ("~~~~~~~ print "); // εκτύπωση για να δηλώσει ότι ο πίνακας κινείται προς // writeSerial (); // εάν η επιλογή είναι ενεργοποιημένη, γράψτε τον πίνακα σε σειριακά κουμπιάGame (); // έλεγχος εισόδων παίκτη playBoard (); // μετακινήστε τον πίνακα και προσθέστε ένα νέο πλακίδιο clearLcd (); // καθαρίστε τις οθόνες LCD πριν σχεδιάσετε το drawBoard (). // σύρετε τον πίνακα στο κάτω μέρος του LCD που ελέγχετε (); intTick = 0; // επαναφορά intTick} else {buttonsGame (); // έλεγχος εισόδων παίκτη clearLcd (); // καθαρίστε τις οθόνες LCD πριν σχεδιάσετε το drawBoard (). // σύρετε τον πίνακα στο inttick του lcd = intTick + intGameSpeed; // add to tick}} else {clearLcd (); // καθαρίστε τις οθόνες LCD πριν σχεδιάσετε τον τίτλο (). // εμφάνιση τίτλου και βαθμολογιών infoMenu (); // διαβάστε την είσοδο του παίκτη clearBoard (); // διασφαλίστε ολόκληρο τον πίνακα = 0} καθυστέρηση (10). // καθυστέρηση του arduino για μια σύντομη στιγμή}
// καθαρίζει το LCD, έτσι ώστε να μην αφήνονται κελιά που δεν έχουν εισαχθεί
void clearLcd () {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 1; ii ++) {lcdLeft.setCursor (i, ii); lcdLeft.write (""); lcdRight.setCursor (i, ii); lcdRight.write (""); }}}
// τραβά τον πίνακα στα LCD
void drawBoard () {for (int i = 1; i <= 15; i ++) {// σχεδιάστε κολλήματα 1 και 2 στην αριστερή οθόνη LCD // αν το κεραμίδι = 0 δεν γράφει τίποτα, = 1 γράφετε "#", = 2 γράψτε "@" lcdLeft.setCursor (i, 1); // ορίστηκε στην πρώτη στήλη (πιο αριστερά) εάν (arrGame [0] == 1) {lcdLeft.write ("#");} if (arrGame [0] == 2) {lcdLeft.write ("@");} lcdLeft.setCursor (i, 0); // ορίστε στη δεύτερη στήλη (στο κέντρο αριστερά) εάν (arrGame [1] == 1) {lcdLeft.write ("#");} if (arrGame [1] == 2) {lcdLeft.write ("@");} lcdRight.setCursor (i, 1); // ορίστε στην τρίτη στήλη (στο κέντρο δεξιά) εάν (arrGame [2] == 1) {lcdRight.write ("#");} if (arrGame [2] == 2) {lcdRight.write ("@");} lcdRight.setCursor (i, 0); // ορίστε στην τέταρτη στήλη (πιο δεξιά) εάν (arrGame [3] == 1) {lcdRight.write ("#");} if (arrGame [3] == 2) {lcdRight.write ("@");}}}
// μετακινεί τον πίνακα προς τα κάτω και τοποθετεί μια τυχαία τιμή ως πλακίδιο
void playBoard () {for (int i = 0; i <= 3; i ++) {arrGame [0] = 0;} // διαγραφή arrGame της επάνω σειράς [0] [τυχαία (0, 4)] = 1; // ορίστε ένα τυχαίο σημείο στην επάνω σειρά να είναι πλακίδιο για (int i = 15; i> = 1; i-) {// που λειτουργεί από το κάτω μέρος του πίνακα προς τα πάνω για (int ii = 0; ii <= 3; ii ++) {// για κάθε σύγκρουση arrGame [ii] = arrGame [i - 1] [ii]; }}}
// ορίζει ολόκληρο τον πίνακα στο 0 και επαναφέρει τις μεταβλητές σε pregame
void clearBoard () {// επαναφορά των τιμών επιλογής και καθυστέρησης intTick = 0; intDelay = 1000; // περάστε από τον πίνακα και ορίστε τα πάντα στο 0 για (int i = 0; i <= 15; i ++) {για (int ii = 0; ii <= 3; ii ++) {arrGame [ii] = 0 ? }}}
// εμφανίζει το Κύριο μενού στις οθόνες LCD
άκυρος τίτλος () {// εγγραφή τίτλου στην οθόνη LCD και χώρο για βαθμολογία lcdRight.setCursor (0, 0); lcdRight.write ("Πλακάκια πιάνου"); lcdRight.setCursor (0, 1); lcdRight.write ("Βαθμολογία:"); // μετατροπή της παρτιτούρας σε string string strScore [3]. sprintf (strScore, "%d", intScore); // εμφάνιση βαθμολογίας σε LCD lcdRight.write (strScore); // προσθέστε το diffictuly lcdRight.setCursor (10, 1); if (intDiff == 0) {lcdRight.write ("Εύκολο"); } if (intDiff == 1) {lcdRight.write ("Medium"); } if (intDiff == 2) {lcdRight.write ("Hard"); } // Πατήστε λίγο εντολή lcdLeft.setCursor (0, 0); lcdLeft.write ("Πατήστε Enter"); lcdLeft.setCursor (0, 1); lcdLeft.write ("για αρχή!"); }
// ελέγχει τα κουμπιά και τι να κάνει για αυτά ενώ βρίσκεστε εκτός παιχνιδιού
void buttonsMenu () {// όταν πατηθεί enter ξεκινήστε το παιχνίδι και επαναφέρετε την τιμή βαθμολογίας εάν (intEnter == 1) {bolPlay = true; intScore = 0; playBoard (); drawBoard (); } // όταν πατηθεί το κουμπί 3 ενεργοποιήστε την επιλογή εντοπισμού σφαλμάτων εκτύπωσης του πίνακα σε σειριακή αν (intInput == 3) {if (bolSerialBoard == false) {Serial.println ("Serial Board Active"); bolSerialBoard = true; } else {Serial.println ("Serial Board Disabled"); bolSerialBoard = false; }} // ορίστε την ταχύτητα του παιχνιδιού σε εύκολη δυσκολία εάν (intInput == 0) {Serial.print ("Game set to easy ("); Serial.print (intGameSpeedEasy); Serial.println ("ms acceleration)"); intDiff = 0; intGameSpeed = intGameSpeedEasy; } // ορίστε την ταχύτητα του παιχνιδιού σε μέση δυσκολία εάν (intInput == 1) {Serial.print ("Το παιχνίδι έχει οριστεί σε μέσο ("); Serial.print (intGameSpeedMedium); Serial.println ("ms επιτάχυνση)"); intDiff = 1; intGameSpeed = intGameSpeedMedium; } // ορίστε την ταχύτητα του παιχνιδιού σε σκληρή δυσκολία εάν (intInput == 2) {Serial.print ("Game set to hard ("); Serial.print (intGameSpeedHard); Serial.println ("ms acceleration)"); intDiff = 2; intGameSpeed = intGameSpeedHard; }}
// ελέγχει τα κουμπιά και τι να κάνει για αυτά ενώ βρίσκεστε στο παιχνίδι
void buttonsGame () {if (intInput! = 4) {// αν πατηθεί ένα κουμπί εάν (bolTilePressed == false) {// μόνο αν το bolTilePressed είναι εσφαλμένη ενέργεια ενεργοποίησης για τον έλεγχο ενός κουμπιού πατήστε bolTilePressed = true; // στη συνέχεια, ορίστε το bolTilePressed στο true για να βεβαιωθείτε ότι δεν ενεργοποιήθηκε ξανά τυχαία int intLowestTile = 0; // για να οριστεί στο πλακίδιο με το χαμηλότερο πλακίδιο int intCheckedTile = 15; // για να παρακολουθείτε ποια πλακίδια έχουν ελεγχθεί ενώ (intLowestTile == 0) {// εφόσον δεν έχει οριστεί σε τίποτα ελέγξτε τα πλακίδια για (int i = 0; i 100) {// εφ 'όσον int η καθυστέρηση δεν είναι μικρότερη από 100 intDelay = intDelay - 20; // πάρτε μια τιμή από αυτό}} else {Serial.println ("Πατήθηκε λάθος κουμπί"); τέλος παιχνιδιού(); // διαφορετικά τελείωσε το παιχνίδι}}}}}
void gameOver () {
Serial.println ("Game Over!"); Serial.print ("Η βαθμολογία σας ήταν:"); Serial.println (intScore); Serial.print ("Η ταχύτητά σας ήταν:"); Serial.println (intDelay); bolPlay = false; }
// ελέγχει την είσοδο του παίκτη
void input () {intEnter = digitalRead (btnEnter); // διαβάστε enter // διαβάστε ποια από τις άλλες εισόδους ή εάν καμία δεν έχει οριστεί σε 4 εάν (digitalRead (btn1) == HIGH) {intInput = 0;} else {if (digitalRead (btn2) == HIGH) {intInput = 1;} else {if (digitalRead (btn3) == HIGH) {intInput = 2;} else {if (digitalRead (btn4) == HIGH) {intInput = 3;} else {intInput = 4; }}}} // σειριακή εκτύπωση των εισόδων if (intEnter == 1) {Serial.println ("Enter Pressed!");} if (intInput! = 4) {Serial.print ("Button Press:"); Serial.println (intInput); } else {// εάν δεν πατηθεί κανένα κουμπί επαναφορά bolTilePressed bolTilePressed = false; }}
// ελέγχει το κάτω μέρος του πίνακα για βλάβη
void bottomCheck () {for (int i = 0; i <= 3; i ++) {// for the 4 columns if (arrGame [15] == 1) {// εάν ένα κεραμίδι βρίσκεται στο κάτω μέρος Serial.println ("Πλακάκι στο κάτω μέρος"); arrGame [15] = 2; drawBoard (); καθυστέρηση (400)? arrGame [15] = 1; drawBoard (); καθυστέρηση (400)? arrGame [15] = 2; drawBoard (); καθυστέρηση (400)? arrGame [15] = 1; drawBoard (); καθυστέρηση (400)? τέλος παιχνιδιού(); }}}
// τυπώνει την πλακέτα στη σειριακή οθόνη εάν το bolSerialBoard είναι αληθινό
void writeSerial () {if (bolSerialBoard == true) {for (int i = 0; i <= 15; i ++) {for (int ii = 0; ii <= 3; ii ++) {Serial.print (arrGame [ii]); Serial.print (","); } Serial.println (""); }}}
Μόλις εισαχθεί όλος ο κωδικός, ανεβάστε στο arduino σας και απολαύστε!
Συνιστάται:
Απλό Robo-Dog (φτιαγμένο από πλήκτρα πιάνου, πιστόλι παιχνιδιών και ποντίκι): 20 βήματα (με εικόνες)
Απλό Robo-Dog (φτιαγμένο από πλήκτρα πιάνου, πιστόλι παιχνιδιών και ποντίκι): Ω, Αζερμπαϊτζάν! Χώρα της φωτιάς, μεγάλη φιλοξενία, φιλικοί άνθρωποι και όμορφες γυναίκες (… συγγνώμη, γυναίκα! Φυσικά, έχω μόνο μάτια για σένα, γυναίκα μου gözəl balaca ana ördəkburun!). Αλλά ειλικρινά, αυτό είναι ένα πολύ δύσκολο μέρος για έναν κατασκευαστή, ειδικά όταν
Πώς να φτιάξετε ένα ασύρματο γάντι πιάνου αέρα: 9 βήματα
Πώς να φτιάξετε ένα ασύρματο γάντι πιάνου αέρα: Σκοποί και λειτουργίες: Το φορετό τεχνολογικό μας έργο είναι να δημιουργήσουμε ένα ασύρματο γάντι πιάνου αέρα με συγχρονισμένα φώτα χρησιμοποιώντας βασικά ηλεκτρονικά, ένα μικροελεγκτή όπως ένα HexWear και ένα φορητό υπολογιστή με λογισμικό Arduino και Max 8 Ε Οι χρήσεις του έργου μας
Κολιέ πιάνου εργασίας: 6 βήματα
Εργαζόμενη γραβάτα πιάνου: Η δεκαετία του 1980 επέφερε πολλά μεγάλα επιτεύγματα στη μόδα και τη μουσική. Υπήρχε συνθετική μουσική, το funky keytar, κολάν και το κλασικό ανδρικό κολιέ για πιάνο. Αυτές οι γραβάτες φορέθηκαν ειρωνικά (και μη ειρωνικά) από πολλούς μοντέρνους (και μη μοντέρνους)
Μάθετε πλήκτρα πιάνου με Makey Makey: 6 βήματα (με εικόνες)
Μάθετε πλήκτρα πιάνου με τον Makey Makey: Το έφτιαξα για μια βραδιά Instuctables στο σταθμό The Maker. Αυτό το παιχνίδι σας βοηθά να μάθετε πού βρίσκονται οι νότες σε ένα πληκτρολόγιο πιάνου μέσω παιχνιδιού. Η ομάδα μας κλήθηκε να συμμετάσχει σε ένα Maker Station Pavilion σε μια έκθεση εκπαίδευσης. Μιλώντας στην εκπαίδευση
Φορετό παιχνίδι πιάνου: 11 βήματα (με εικόνες)
Φορετό παιχνίδι Πιάνο: Παιχνίδι Πιάνο ενσωματωμένο σε μπλουζάκι. Διαθέτει 8 πλήκτρα από το Do to Do (1 οκτάβα). Μπορείτε να παίξετε απλή μουσική φορώντας το πουκάμισο και πιέζοντας το υφασμάτινο κουμπί στο πουκάμισο. Όλα τα εξαρτήματα από το πιάνο παιχνιδιών (μπαταρίες, ηχείο, πλακέτα) είναι τοποθετημένα