Arduino ile led Zarı I2Cli

 herkese merhaba bugün Arduino ile I2Cli Led zarı devresi yapıcaz öncelikle led zarının ne işe yaradığını söyleyim led zarı herhangi bir tane kutu(monopoly , kızma birader vb) oyununda zar yoksa yada zar kayıpsa led zarını kullanarak oyununuza devam edebilirsiniz led zarının çalışma prensibide butona bastığınızda led soldan sağa 2-3 defa dönecek ondan sonra hangi sayı geldiyse lcd ekranda gelen zar sayısı yazacak mesela "zar sayisi = 1"diye yazdı diyelim 1 tane led yanıcak kısacası kaç tane led yandıysa lcd ekranda zar sayısını yazacak hadi malzemelere geçelim 

malzemeler 

1 tane buton 4 bacaklı 

6 tane led renkleri fark etmez 

1 tane 10K direnç

6 tane 1K direnç 

I2C lcd ekran 

breadboad

arduino uno r3 klon

NOT: lcd ekranınızın arabirimi kaç ise onu yazın mesela LiquidCrystal_I2C lcd (0x27,16,2); yada (0x3f,16,2); diye girebilirsiniz ama ilk önce I2C nizin arabirimini sorgulamanız gerek ona göre I2C lcd ekranınızın arabirimini yazmanız gerek

Bağlantıları



Arduino kodu

/* arduino ile led zarı devresi
    malzemeler
    6 tane LED diyot renkleri fark etmez
    6 tane 1K direnç
    1 tane 10K direnç
    1 tane 4 bacaklı push button
    arduino uno R3 Klon
    breadboard
    jumper kablo
    devrenin amacı nedir?
    evinizdeki herhangi kutu oyunun zarı eksik yada kayıp diyelim zarı bulamıyorsunuz yada bulmakla vakit kaybetmek istemiyorsunuz led zarını kullanarak oyununuza devam edebilirsiniz
    hadi kodu yazmaya geçelim
*/
#include <LiquidCrystal_I2C.h>
#define DEBUG 0
LiquidCrystal_I2C lcd(0x27,16,2);
int first = 2;

int second = 3;

int third = 4;

int fourth = 5;

int fifth = 6;

int sixth = 7;



// pin for the button switch

int button = 12;

// value to check state of button switch

int pressed = 0;



void setup() {

  // set all LED pins to OUTPUT

  for (int i = first; i <= sixth; i++) {

    pinMode(i, OUTPUT);

  }
  lcd.init();
  lcd.backlight();

  // set buttin pin to INPUT

  pinMode(button, INPUT);



  // initialize random seed by noise from analog pin 0 (should be unconnected)

  randomSeed(analogRead(0));



  // if we're debugging, connect to serial

#ifdef DEBUG
#endif



}



void buildUpTension() {

  // light LEDs from left to right and back to build up tension

  // while waiting for the dice to be thrown

  // left to right

  for (int i = first; i <= sixth; i++) {

    if (i != first) {

      digitalWrite(i - 1, LOW);

    }

    digitalWrite(i, HIGH);

    delay(100);

  }

  // right to left

  for (int i = sixth; i >= first; i--) {

    if (i != sixth) {

      digitalWrite(i + 1, LOW);

    }

    digitalWrite(i, HIGH);

    delay(100);

  }

}



void showNumber(int number) {

  digitalWrite(first, HIGH);

  if (number >= 2) {

    digitalWrite(second, HIGH);

  }

  if (number >= 3) {

    digitalWrite(third, HIGH);

  }

  if (number >= 4) {

    digitalWrite(fourth, HIGH);

  }

  if (number >= 5) {

    digitalWrite(fifth, HIGH);

  }

  if (number == 6) {

    digitalWrite(sixth, HIGH);

  }

}



int throwDice() {

  // get a random number in the range [1,6]

  int randNumber = random(1, 7);



#ifdef DEBUG

 lcd.setCursor(0,0);
 lcd.print("Zar Sayisi : ");
 lcd.println(randNumber);
#endif



  return randNumber;

}



void setAllLEDs(int value) {

  for (int i = first; i <= sixth; i++) {

    digitalWrite(i, value);

  }

}



void loop() {

  // if button is pressed - throw the dice

  pressed = digitalRead(button);



  if (pressed == HIGH) {

    // remove previous number

    setAllLEDs(LOW);



    buildUpTension();

    int thrownNumber = throwDice();

    showNumber(thrownNumber);

  }



}

Yorumlar