Ardunio Sayı Tahmin Oyunu

Kodla Büyü

Nadir SERT

Seçkin Üye
Seçkin Üye
Mesajlar
321
Kod:
String inputString = "";         // GELEN VERIYI TUTAN STRING
boolean stringComplete = false;  //STRING TAMAM MI ANLAMAK ICIN KULLANILACAK
int tutulansayi;//MCU TARAFINDAN TUTULAN SAYI
int hak=5;//KULLANICI HAKKI
void setup() {
  
  Serial.begin(9600);//9600 BAUDRATE DE SERI PORT BASLAT
  inputString.reserve(20);//20 KARAKTERLIK YER TANIMLADIK GELEN VERI ICIN
  randomSeed(analogRead(0));//ANALOG 0 GIRISINE BAGLI POT DAN DEGER OKUDUK
  tutulansayi=random(300); //0-300 ARASI SAYI TUTUYOR
  pinMode(11,OUTPUT);//11 NOLU PINI CIKIS YAP
  Serial.print("SAYI TAHMIN OYUNUNA HOS GELDINIZ \n5 TAHMIN HAKKINIZ VAR");
}

void loop() {
  if (stringComplete) //GELEN VERININ TAMAMLANIP TAMAMLANMADIGINA BAK
  {
    int sayi=inputString.toInt();//GELEN STRING VERIYI TAM SAYIYA CEVIR
    
      if(sayi<tutulansayi)//EGER  BIZIM GIRDIGIMIZ SAYI  MCU TARAFINDAN TUTULAN SAYIDAN KUCUKSE  
      {hak--; //HAK SAYISINI 1 AZALT
      Serial.print("\nGIRILEN SAYI=");//SERI PORTTAN GIRDIGIMIZ SAYIYI GOSTER
       Serial.print(sayi);
      Serial.print("\tSAYIYI ARTTIR \t KALAN HAKKINIZ=");Serial.println(hak);}//SAYIYI ARTTIR YAZ KALAN HAKKI GOSTER
     if(sayi>tutulansayi)//EGER  BIZIM GIRDIGIMIZ SAYI  MCU TARAFINDAN TUTULAN SAYIDAN BUYKSE  
      { Serial.print("\nGIRILEN SAYI=");
       Serial.print(sayi);
        hak--;Serial.print("\tSAYIYI AZALT \t KALAN HAKKINIZ=");Serial.println(hak);}//SAYIYI ARTTIR YAZ KALAN HAKKI GOSTER
     if(hak==0)
    {Serial.print("HAKKINIZ BITTI TUTULAN SAYI=");Serial.println(tutulansayi);
      tutulansayi=random(300);hak=5;
       inputString = "";
    stringComplete = false;}
     else
     {if(sayi==tutulansayi)
      { Serial.println("\nTEBRIKLER BILDINIZ");
       digitalWrite(11,HIGH);
       delay(1000);
       digitalWrite(11,LOW);
        tutulansayi=random(300);hak=5;
      }
    inputString = "";
    stringComplete = false;
  }}
}

/*
  SerialEvent occurs whenever a new data comes in the
 hardware serial RX.  This routine is run between each
 time loop() runs, so using delay inside loop can delay
 response.  Multiple bytes of data may be available.
 */
void serialEvent() {
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    if (inChar != '\r')
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == '\r') {
      stringComplete = true;
    }
  }
}
Malum okulların son günleri derslerdeki yoğunluk azalınca ilk ardunio programımı yazayım dedim.ardunio sayı tutuyor siz tahmin etmeye çalışıyorsunuz.eğer kazanırsanız 11 nolu pine bağlı led yanıp 1 sn sonra sönüyor.

Editörde yer alan seri port ekranından oynanabilir.Analog giriş kullanma sebebi her enerji verişte aynı sayıları tutmasın diye enerji vermeden önce pot ile oynanarak farklı sayılar tutmasını sağlamaktır.Editörde yer alan örnek kodlar üzerinde oynanarak yaptım.İyi Eğlenceler
**** olanlar S e r i a l olacak aralıksız yazılacak
 
Ardunio kendi sayı tutuyor kendi tahmin etmeye çalışıyor.Seri port arayüzden tuttuğu ve tahmin ettiği sayıları gözlemleyebilirsiniz.
Kod:
void loop() {
 while(1)//SONSUZA KADAR DONGUDE KALSIN DIYE
 {bulundu=false;//SAYI BULUNMADI
 min=0;//MCU TAHMIN MIN DEGERI
 max=3000;//MCU TAHMIN MAX DEGERI
    while(!bulundu)//SAYI BULUNASAYA KADAR TAHMINE DEVAM ETSIN 
    {
    int sayi=random(min,max);//MIN VE MAX ARASINDA SAYI TUT
    
      if(sayi<tutulansayi)//EGER  BIZIM GIRDIGIMIZ SAYI  MCU TARAFINDAN TUTULAN SAYIDAN KUCUKSE  
      {hak++; //HAK SAYISINI 1 AZALT
      min=sayi;//BIR SONRAKI DENEME DE MIN DEGERI BU OLACAK
      Serial.print("\nGIRILEN SAYI=");//SERI PORTTAN GIRDIGIMIZ SAYIYI GOSTER
       Serial.print(sayi);
      Serial.print("\tSAYIYI ARTTIR \t DENEME SAYISI=");Serial.println(hak);}//SAYIYI ARTTIR YAZ KALAN HAKKI GOSTER
     if(sayi>tutulansayi)//EGER  BIZIM GIRDIGIMIZ SAYI  MCU TARAFINDAN TUTULAN SAYIDAN BUYKSE  
      {max=sayi;//BIR SONRAKI DENEME DE MAX DEGERI BU OLACAK
        Serial.print("\nGIRILEN SAYI=");
       Serial.print(sayi);
        hak++;Serial.print("\tSAYIYI AZALT \t DENEME SAYISI=");Serial.println(hak);}//SAYIYI ARTTIR YAZ KALAN HAKKI GOSTER
   if(sayi==tutulansayi)
      {  Serial.print("\nGIRILEN SAYI=");
       Serial.print(sayi);
         Serial.print("\tTUTULAN SAYI=");
       Serial.print(tutulansayi);
        Serial.println("\nTEBRIKLER BILDINIZ");
       digitalWrite(11,HIGH);
       delay(1000);
       digitalWrite(11,LOW);
        tutulansayi=random(3000);
        bulundu=true;
        hak=0;
      }
  
    }
}
}
***** S e r i a l olarak değiştirin
 
Ardunio 11 numaralı bacağına bir adet LED bağlıyoruz.Ledin anot bacağı 11 nolu pine katod bacağı GND bağlı olacak.11 nolu bacak PWM çıkışıdır.PWM nedir derseniz bacağa uygulanan kare dalga çıkışın
___-----____
___-_______ gibi voltaj olduğu zamanı azaltarak güçten kaybetmeden led parlaklığını azaltabiliriz.Örnek olarak dc bir motora 5V verdiğinizde hızlı döner ama 3V verdiğinizde daha yavaş döner.3v verdiğinizde hem güçtte hemde devirde azalma olur.Güçte azalma olmaması için 5V vermeniz gerekirken deviri düşürmek için Verdiğiniz 5V süresini değiştirmeniz gerekir işte bu PWM ile yapılır.
Kod:
void setup() {  
  pinMode(11,OUTPUT);//11 NOLU PINI CIKIS YAP
}

void loop() {

    int sayi=random(0,255);//MIN VE MAX ARASINDA SAYI TUT
    analogWrite(11, sayi);    
    delay(50);


}
bu kodda rastgele 0-255 arasında rastgele sayı üretilir.Bu sayıda pwm çıkışına verilerek ledin 50 ms aralıklarla farklı parlaklıkda yanması sağlanır.
 
Geri
Üst