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
Yorum Gönder