Hello
I need your help.
not experienced in arduino, i'm trying to make Simon Says game which i already work but i can't at the end of the game make a servo motor drive (SG90)
Can you help with the layout and programming?
below is the schedule I have
/*
18 - Game Simon Says
LED akan berkedip dengan dengan pola dan urutan tertentu, kemudian kita menekan push button
dengan cara mengikuti pola dan urutan led tersebut.
*/
//set pin yang digunakan untuk menghubungkan dengan push button, LED dan buzzer
int button[] = {2,4,6,8}; //push button merah adalah button[0], hijau adalah button[1], biru adalah button[2], kuning adalah button[3]
int led[] = {3,5,7,9}; //LED merah adalah led[0], hijau adalah led[1], biru adalah led[2], kuning adalah led[3]
int tones[] = {262, 330, 392, 494}; //nada-nada yang digunakan untuk tiap push button (c, e, g, b)
int roundsToWin = 10; //jumlah ronde yang harus dimainkan sebelum memenangkan permainan
int buttonSequence[16]; //membuat array yang akan menjadi urutan yang perlu diingat oleh pemain
int buzzerPin = 10; //pin yang terhubung dengan buzzer
int pressedButton = 4; //variabel untuk mengingat push button mana yang ditekan. 4 adalah nilai jika tidak ada push button yang ditekan.
int roundCounter = 1; //melacak apa yang sedang dimainkan pemain
long startTime = 0; //variabel pengatur waktu untuk batas waktu saat push button ditekan
long timeLimit = 2000; //batas waktu untuk menekan push button
boolean gameStarted = false; //variabel untuk memberitahu game apakah memainkan atau tidak
void setup(){
//mengatur semua pin untuk push button sehingga input_pullup (digunakan sehingga tidak perlu memakai eksternal resistor)
pinMode(button[0], INPUT_PULLUP);
pinMode(button[1], INPUT_PULLUP);
pinMode(button[2], INPUT_PULLUP);
pinMode(button[3], INPUT_PULLUP);
//mengatur semua pin LED sebagai output
pinMode(led[0], OUTPUT);
pinMode(led[1], OUTPUT);
pinMode(led[2], OUTPUT);
pinMode(led[3], OUTPUT);
pinMode(buzzerPin, OUTPUT); //mengatur pin buzzer sebagai output
}
void loop(){
if (gameStarted == false){ //jika game belum dimulai
startSequence(); //jalankan SQUENCE AWAL
roundCounter = 0; //reset penghitung ronde
delay(1500); //jeda 1,5 detik
gameStarted = true; //atur gameStarted ke kondisi true sehingga urutan ini tidak dimuat kembali
}
//setiap ronde, akan dimualai dengan start kedipan urutan LED dan diulang
for(int i=0; i <= roundCounter; i++){ //go through the array up to the current round number
flashLED(buttonSequence*); //nyalakan LED untuk posisi array yang sesuai dan mainkan lagu*
-
delay(200); //tunggu*
-
allLEDoff(); //matikan semua LED*
-
delay(200);*
}
//kemudian mulai dengan urutan satu persatu dan memeriksa jika pemain menekan push button yang benar
for(int i=0; i <= roundCounter; i++){ //untuk setiap push button yang akan ditekan dalam sequence -
startTime = millis(); //catat waktu awal mulai*
-
while(true){ //terus jalankan loop sampai pemain menekan push button atau batas waktu habis (batas waktu bisa cek didalam statement if)*
-
pressedButton = buttonCheck(); //setiap loop memeriksa push button mana yang ditekan*
-
if (pressedButton < 4){ //jika sebuah push button ditekan... (angka 4 maksudnya adalah tidak ada push button yang ditekan)*
-
flashLED(pressedButton); //kedip/flash LED untuk push button yang sudah ditekan*
_ if(pressedButton == buttonSequence*){ //if the button matches the button in the sequence*_
* delay(250); //biarkan LED menyalauntuk sesaat*
* allLEDoff(); //kemudian matikan semua LED dan*
* break; //akhiri loop while (ini akan membuat melanjutkan ke nomor selanjutnya didalam loop for)*
* } else{ //jika push button yang ditekan tidak sama dengan dengan urutan nyala LED*
* loseSequence(); //jalankan SEQUENCE KALAH*
* break; //setelah selesai menjalankan SEQUENCE KALAH, break dari loop while sehingga game dapat dimulai kembali*
* }*
* } else { //jika tidak ada push button yang ditekan*
* allLEDoff(); //tmatikan semua LED*
* }*
* //memeriksa apakah waktu sudah habis*
* if(millis() - startTime > timeLimit){ //jika batas waktu habis*
* loseSequence(); //jalankan SEQUENCE KALAH*
* break; //setelah selesai menjalankan SEQUENCE KALAH, break dari loop while sehingga game dapat dimulai kembali*
* }*
* } *
}
* roundCounter = roundCounter + 1; //tambahkan jumlah ronde dengan 1*
* if (roundCounter >= roundsToWin){ //jika pemain menyelesaikan ke 16 ronde*
* winSequence(); //mainkan lagu kemenangan*
* }*
* delay(500); //tunggu 0.5 detik antara setiap ronde*
}
//----------FUNCTIONS------------
//KEDIPKAN LED DAN BUNYIKAN BUZZER
void flashLED (int ledNumber){
* digitalWrite(led[ledNumber], HIGH);*
* tone(buzzerPin, tones[ledNumber]);*
}
//MATIKAN SEMUA LED
void allLEDoff (){
* //matikan semua LED*
* digitalWrite(led[0],LOW);*
* digitalWrite(led[1],LOW);*
* digitalWrite(led[2],LOW);*
* digitalWrite(led[3],LOW);*
* //matikan suara buzzer*
* noTone(buzzerPin);*
}
//PERIKSA push button YANG DITEKAN
int buttonCheck(){
* //periksa jika ada push button yang ditekan*
* if(digitalRead(button[0]) == LOW){*
* return 0;*
* }else if(digitalRead(button[1]) == LOW){*
* return 1;*
* }else if(digitalRead(button[2]) == LOW){*
* return 2;*
* }else if(digitalRead(button[3]) == LOW){*
* return 3;*
* }else{*
* return 4; //ini akan menjadi nilai untuk tidak ada push button yang ditekan*
* }*
}
//SEQUENCE AWAL
void startSequence(){
* randomSeed(analogRead(A0)); //membuat nomor acak benar-benar acak*
* //mengisi array buttonSequence dengan angka acak dari 0 hingga 3*
* for (int i=0;i<=roundsToWin;i++){*
_ buttonSequence = round(random(0,4));
* }
//kedip/flash semua LED ketika game dimulai*
* for(int i=0; i<=3; i++){*_
_ tone(buzzerPin, tones*, 200); //memainkan salah satu dari 4 nada*_
* //turn all of the leds on*
* digitalWrite(led[0],HIGH);*
* digitalWrite(led[1],HIGH);*
* digitalWrite(led[2],HIGH);*
* digitalWrite(led[3],HIGH);*
* delay(100); //tunggu sesaat*
* //turn all of the leds off*
* digitalWrite(led[0],LOW);*
* digitalWrite(led[1],LOW);*
* digitalWrite(led[2],LOW);*
* digitalWrite(led[3],LOW);*
* delay(100); //tunggu sesaat*
* } //ini akan diulang sebanyak 4 kali*
}
//SEQUENCE MENANG
void winSequence(){
* //nyalakan semua LED*
* for(int j=0; j<=3; j++){*
* digitalWrite(led[j], HIGH);*
* }*
* //mainkan lagu 1Up*
* tone(buzzerPin, 1318, 150); //E6*
* delay(175);*
* tone(buzzerPin, 1567, 150); //G6*
* delay(175);*
* tone(buzzerPin, 2637, 150); //E7*
* delay(175);*
* tone(buzzerPin, 2093, 150); //C7*
* delay(175);*
* tone(buzzerPin, 2349, 150); //D7*
* delay(175);*
* tone(buzzerPin, 3135, 500); //G7*
* delay(500); *
* //tunggu sampai sebuah push button ditekan*
* do { *
* pressedButton = buttonCheck();*
* } while(pressedButton > 3);*
* delay(100);*
* gameStarted = false; //reset game sehingga sequence awal dimainkan kembali.*
}
//SEQUENCE KALAH
void loseSequence(){
* //turn all the LEDs on*
* for(int j=0; j<=3; j++){*
* digitalWrite(led[j], HIGH);*
* }*
* //play the 1Up noise*
* tone(buzzerPin, 130, 250); //E6*
* delay(275);*
* tone(buzzerPin, 73, 250); //G6*
* delay(275);*
* tone(buzzerPin, 65, 150); //E7*
* delay(175);*
* tone(buzzerPin, 98, 500); //C7*
* delay(500);*
* //tunggu sampai sebuah push button ditekan*
* do { *
* pressedButton = buttonCheck();*
* } while(pressedButton > 3);*
* delay(200);*
* gameStarted = false; //reset game sehingga sequence awal dimainkan kembali.*
}