Arduino Kod

furkan966

Üye
Katılım
30 Kas 2020
Mesajlar
10
Puanları
1
Bir yarışma programında; bir tane sunucu, A takımı, B takımı ve C takımı bulunmaktadır. Sunucu soru sorduktan sonra her takımın önünde bulunan 1’er adet butona basılmak sureti ile takımlar söz alabilmektedir. Söz alan takım dışında diğer takımlar butona basmış olsalar bile söz alamamaktadırlar. Sorunun cevabı, söz alan takım tarafından doğru cevaplandırıldıysa,sunucunun önünde bulunan doğru veya yanlış butonlardan doğru butonuna,sunucunun basması ile söz alan takımın önündeki yeşil ışık yanmaktadır. Yanlış cevaplandırılması durumunda ise, sunucu tarafından yanlış butona basılarak söz alan takımın önündeki kırmızı ışık yanmaktadır. Bu işlemin Arduino Kodu ?
 
Normalde gençlerin şevki kırılmasın diye cevap veriyorum böyle sorulara ama bu çok basit bir soru kardeşim. Bu yazılım değil mantık sorusu ve bunu kendin yapmalısın.
 
Normalde gençlerin şevki kırılmasın diye cevap veriyorum böyle sorulara ama bu çok basit bir soru kardeşim. Bu yazılım değil mantık sorusu ve bunu kendin yapmalısın.
Kod:
boolean dizi[3] = {0, 0, 0}; // 3 elamanlı dizi oluşturduk, dizi içindeki elemalnar 0 ve ya 1 olabileceğinden bloolean değişken tipi belirlendi

int yeni_soru = 0;

void setup() { // setup bölümünde arduino da kullanacağımız giriş çıkışlar belirlendi

pinMode(2, INPUT);

pinMode(3, INPUT);

pinMode(4, INPUT);

pinMode(5, INPUT);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

pinMode(11, OUTPUT);

pinMode(12, OUTPUT);

pinMode(13, OUTPUT);

}



void loop() {

if (dizi[0] == 0 && digitalRead(5) == 1)

{ //dizinin 0. elamanının değeri 0 ise ve arduino girişlerinden 1. yaryışmacı için atanmış 2 nolu dijital giriş 1 ise 1.

dizi[0] = 1; // 1. yarışmacının değeri 0 dan 1 e değiştirildi



for (int i = 0; i < 100; i++)

{

if (digitalRead(3) == 1)

{

digitalWrite(8, 1);

yeni_soru = 1;

break;

}

else if (digitalRead(4) == 1)

{

digitalWrite(11, 1);

break;

}

delay(300);

}

}

else if (dizi[1] == 0 && digitalRead(6) == 1)

{



dizi[1] = 1; //2. yarışmacının değeri 0 dan 1 e değiştirildi

for (int i = 0; i < 100; i++)

{

if (digitalRead(3) == 1)

{

digitalWrite(9, 1);

yeni_soru = 1;

break;

}

else if (digitalRead(4) == 1)

{

digitalWrite(12, 1);

break;

}

delay(300);

}

}

else if (dizi[2] == 0 && digitalRead(7) == 1)

{



dizi[2] = 1; // 2. yarışmacının değeri 0 dan 1 e değiştirildi

for (int i = 0; i < 100; i++)

{

if (digitalRead(3) == 1)

{

digitalWrite(10, 1);

yeni_soru = 1;

break;

}

else if (digitalRead(4) == 1)

{

digitalWrite(13, 1);

break;

}

delay(300);

}

}

if (digitalRead(2) == 1 || yeni_soru == 1) //eğer resetleme düğmesine basılmış ise

{

delay(1000);

yeni_soru=0;

for (byte i = 0; i < 3; i++) // 0 dan başlayıp 3 den küçük olduğu sürece bir bir artan bir döngü oluşruldu

{ // bu şekilde yarışmacıların atandığı dizi elamanlarının değerleri 0 oldu

dizi = 0; // döngü ile dizi elamanlarının değeri 1 den 0 değeri olarak değiştirildi

digitalWrite((i + 8), 0);

digitalWrite((i + 11), 0);



}

}

}
Hocam bu şekilde doğru mu
 
Moderatör tarafında düzenlendi:
Çok karmaşık yazmışsın içinde kayboldum. Kardeşim kodu yazarken yanına comment yapmak yetmez mümkün olduğıunca anlayacağın şekilde yazman gerekir ki sorunu hemen çözesin. Bunun için #define ile başlayan makrolar kullan. Ben seninkini okuyamadım bile çok fazla if döngüsü iç içe girmiş mantığım almadı, yaşlanıyorum artık. Sana daha temizini gönderiyorum çok daha kısaltabilirdim ama o zaman senin anlaman imkansız olurdu. Sadece iki tane fonksiyon ve iki boyutlu bi led dizisi ne kadar kısaltıp sadeleştirmiş kendin gör. Çalıştırıp denemedim sen dene eksik bi yeri varsa haber et.

Kod:
#define DOGRU 0
#define YANLIS 1
#define YARISAN_A 0
#define YARISAN_B 1
#define YARISAN_C 2

const int Abuton = 2;
const int Bbuton = 3;
const int Cbuton = 4;
const int SDbuton = 5;
const int SYbuton = 6;

const int ledler[3][2] ={{7,8},{9,10},{11,12}};


bool cevap_verilebilir = true;

void setup() { // setup bölümünde arduino da kullanacağımız giriş çıkışlar belirlendi
  pinMode(Abuton, INPUT);
  pinMode(Bbuton, INPUT);
  pinMode(Cbuton, INPUT);
  pinMode(SDbuton, INPUT);
  pinMode(SYbuton, INPUT);


  pinMode(ledler[YARISAN_A][YANLIS], OUTPUT);
  pinMode(ledler[YARISAN_A][DOGRU], OUTPUT);
  pinMode(ledler[YARISAN_B][YANLIS], OUTPUT);
  pinMode(ledler[YARISAN_B][DOGRU], OUTPUT);
  pinMode(ledler[YARISAN_C][YANLIS], OUTPUT);
  pinMode(ledler[YARISAN_C][DOGRU], OUTPUT);
}
int yarismaci;
int cevap;
void loop() {
  if(cevap_verilebilir){
    yarismaci = yarismaci_butonlari_dinle();
    if(yarismaci != 3)
      cevap_verilebilir = false;
  }
  else{
    cevap = sunucu_butonlarini_dinle();
    if(cevap !=2){
      digitalWrite(ledler[yarismaci][cevap],1);
      delay(3000);
      digitalWrite(ledler[yarismaci][cevap],0);
      cevap_verilebilir = true;  
    }
  }
}

int yarismaci_butonlari_dinle(){
  if(digitalRead(Abuton))
    return YARISAN_A;
  else if(digitalRead(Bbuton))
    return YARISAN_B;
  else if(digitalRead(Cbuton))
    return YARISAN_C;
  else
    return 3;
}
int sunucu_butonlarini_dinle(){
  if(digitalRead(SDbuton)) 
    return DOGRU;
  else if(digitalRead(SYbuton))
    return YANLIS;
  else
    return 2;
}
 
Çok karmaşık yazmışsın içinde kayboldum. Kardeşim kodu yazarken yanına comment yapmak yetmez mümkün olduğıunca anlayacağın şekilde yazman gerekir ki sorunu hemen çözesin. Bunun için #define ile başlayan makrolar kullan. Ben seninkini okuyamadım bile çok fazla if döngüsü iç içe girmiş mantığım almadı, yaşlanıyorum artık. Sana daha temizini gönderiyorum çok daha kısaltabilirdim ama o zaman senin anlaman imkansız olurdu. Sadece iki tane fonksiyon ve iki boyutlu bi led dizisi ne kadar kısaltıp sadeleştirmiş kendin gör. Çalıştırıp denemedim sen dene eksik bi yeri varsa haber et.

Kod:
#define DOGRU 0
#define YANLIS 1
#define YARISAN_A 0
#define YARISAN_B 1
#define YARISAN_C 2

const int Abuton = 2;
const int Bbuton = 3;
const int Cbuton = 4;
const int SDbuton = 5;
const int SYbuton = 6;

const int ledler[3][2] ={{7,8},{9,10},{11,12}};


bool cevap_verilebilir = true;

void setup() { // setup bölümünde arduino da kullanacağımız giriş çıkışlar belirlendi
  pinMode(Abuton, INPUT);
  pinMode(Bbuton, INPUT);
  pinMode(Cbuton, INPUT);
  pinMode(SDbuton, INPUT);
  pinMode(SYbuton, INPUT);


  pinMode(ledler[YARISAN_A][YANLIS], OUTPUT);
  pinMode(ledler[YARISAN_A][DOGRU], OUTPUT);
  pinMode(ledler[YARISAN_B][YANLIS], OUTPUT);
  pinMode(ledler[YARISAN_B][DOGRU], OUTPUT);
  pinMode(ledler[YARISAN_C][YANLIS], OUTPUT);
  pinMode(ledler[YARISAN_C][DOGRU], OUTPUT);
}
int yarismaci;
int cevap;
void loop() {
  if(cevap_verilebilir){
    yarismaci = yarismaci_butonlari_dinle();
    if(yarismaci != 3)
      cevap_verilebilir = false;
  }
  else{
    cevap = sunucu_butonlarini_dinle();
    if(cevap !=2){
      digitalWrite(ledler[yarismaci][cevap],1);
      delay(3000);
      digitalWrite(ledler[yarismaci][cevap],0);
      cevap_verilebilir = true; 
    }
  }
}

int yarismaci_butonlari_dinle(){
  if(digitalRead(Abuton))
    return YARISAN_A;
  else if(digitalRead(Bbuton))
    return YARISAN_B;
  else if(digitalRead(Cbuton))
    return YARISAN_C;
  else
    return 3;
}
int sunucu_butonlarini_dinle(){
  if(digitalRead(SDbuton))
    return DOGRU;
  else if(digitalRead(SYbuton))
    return YANLIS;
  else
    return 2;
}
Hatasız çalıştı hocam çok sağolun çok teşekkür ederim
 

Forum istatistikleri

Konular
127,959
Mesajlar
913,914
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst