PDA

צפייה בגרסה מלאה : סיימון אומר ב-++C, ארדואינו



Gold
09-07-2021, 14:20:54
היי לכולם!
אז בזמן שמאור עובד על מכונת הארקייד שלו "בניית מכונת ארקייד מכוערת (http://www.efly.co.il/forums/showthread.php?t=92296&p=560228#post560228)" אני החלטתי לשגע את אבא במשהו אחר, בניית המשחק "סיימון אומר" בעזרת ארדואינו ואולי בהמשך גם על Raspberry Pi ופייתון

151892

בתמונה מעל סיימון מקורי משנות השבעים, אצלנו בבית ומתחת תמונה שלו בסימולטור ארדואינו בסימולטור Tinkercad

151893

אבל לפני הכל אני רוצה להגיד שלא נגעתי בארדואינו כמעט שנה (מחנוכה) אז הקוד שלי מאוד מסורבל, מסתבר שאחרי כמה חודשים פיתוח בשפת פייתון ולולאת for שנראית ככה :(for i in range(10
מאתגר להתרגל שוב לארדואינו {} (;++for (int i=1; i<=10; i. באמת זה קוד או מגילה?

אז דבר ראשון שריעננתי לעצמי זה חיבור לדים ולחצנים לארדואינו. זה היה החלק הקל, השתמשתי בלולאה שהיתה בקוד הקודם שלי "חנוכיית לדים (http://www.efly.co.il/forums/showthread.php?t=92191)" עשינו שעליה סרטון וגם פוסט


https://www.youtube.com/watch?v=whUxao-IYrE

אחר כך היינו צריכים לגרום ללדים להידלק אם הכפתור שלידם לחוץ. זה לקח לנו טיפה יותר זמן בגלל למרות שנשמע הגיוני כשלוחצים על לחצן הוא "נותן חשמל" או בארדואינו עולה לרמה לוגית גבוהה, בארדואינו יותר נוח לעבוד כשהמצב הפוך. וזו הסיבה שאנחנו מחברים את הלחצנים למינוס ומגדירים אותם כ-INPUT_PULLUP אם לא נשתמש בפונקציה הזו אנחנו נצטרך להוסיף עוד נגד לכל לחצן. אם משהו לא ברור בהסבר הזה תשאלו בתגובות.

שמנו לב המשחק תמיד מתחיל עם אותם שלבים, כלומר הוא לא אקראי למרות השימוש בפונקציה random, הבנו את הבעיה אני אוסיף תגובה או פוסט עם הסבר.

הקוד למי שרוצה



#define MAX_GAME_STEPS 100
int randGameSteps[MAX_GAME_STEPS] = {};
const byte push_buttons[] = {4, 5, 8, 9};
const byte led_pins[] = {3, 6, 7, 10};


void setup() {
pinMode(A0, INPUT);
randomSeed(A0);
Serial.begin(9600);
//Serial.println(MAX_GAME_STEPS);
pinMode(2, INPUT_PULLUP);
for (int i=0; i<=3; i++){
pinMode(led_pins[i], OUTPUT);
digitalWrite(led_pins[i], LOW);
pinMode(push_buttons[i], INPUT_PULLUP);}

if (digitalRead(2) == 0){
randomSeed(analogRead(0));
Serial.println(millis());}
}


void loop() {
randNumber = random(4);
Serial.println(randNumber);
/*randGameSteps[0] = led_pins[randNumber];

digitalWrite(randGameSteps[m], HIGH);
delay(1000);
digitalWrite(randGameSteps[m], LOW);
delay(200);}

for (int i=0; i<=3; i++){
if(digitalRead(push_buttons[i]) == 0){
digitalWrite(led_pins[i], HIGH);
delay(500);
digitalWrite(led_pins[i], LOW);}}
*/}


//void initNewGame(){}