Soru & Cevap

6 butonla art arda yazı yazdırabilir miyim?

15.11.2017 - 04:05
şu şekilde yazdım:

#include <SPI.h>
#include <DMD2.h>
#include <fonts/SystemFont5x7.h>
SoftDMD dmd(1,1);
DMD_TextBox box(dmd);
const int buton1=22;
const int reset2=25;
const int buton2=24;
const int reset1=23;
const int buton3=26;
const int reset3=27;

 void setup() {
  Serial.begin (9600);
  dmd.setBrightness (255);
  dmd.begin();
  dmd.selectFont(SystemFont5x7);  
   pinMode (buton1,INPUT);
  pinMode (reset1,INPUT);
  pinMode (buton2,INPUT);
  pinMode (reset2,INPUT);
  pinMode (buton3,INPUT);
  pinMode (reset3,INPUT);
 
}
void loop() {
  if (digitalRead(buton1)==HIGH)
  {box.println("KIS-1");  
  }    
  else if (digitalRead(buton2)==HIGH)
  {box.println("KIS-2");
  } 
  else if (digitalRead(buton3)==HIGH)
  {box.println("KIS-3");
  }      
  else if (digitalRead(reset1)==HIGH)
  {box.println ("       ");}  
  else if (digitalRead(reset2)==HIGH)
  {box.println ("       ");}  
  else if (digitalRead(reset3)==HIGH)
  {box.println ("       ");}  
   else {} 

}

iyi günler cümleten

arduinio mega ile yapmak istediğim şu şekilde

buton1,buton2,buton3,reset1,reset2,reset3 şeklinde 3 butonum var. buton1 e bastığımda p10 panelde "kısım1" yazacak ; reset1 e bastığımda ise bu yazanı söndürecek.sırasıyla buton2 "kısım 2" yazacak reset2 sönürecek aynı şekilde de 3. buton...

yalnız önemli bir nokta buton1 e basıldı "kısım1" yazdı; sonrasında buton 2 ye basıldığında panelde sırasıyla "kısım1" ve "kısım2" yazacak; diyelim reset 2 ye bastık kısım2 sönecek kısım 1 yanmaya devam edecek ta ki reset1 e basana kadar.

if else ile programı yazdım, fakat hem eksik hem de  bir kez bastıktan sonra diğer butona bastığımda en az 10sn bastıktan sonra alıyor. direnç port ayarı vs hepsi tamam 

bu problemi çözmek için kesme mi kullanmalıyım?

eğer ki kullanacaksam belki 16 buton bağlamam gerekirse nasıl bir kesme kullanmalıyım?

şimdiden yardımlarınız için teşekkürler

39 Görüntülenme

2 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user cika_19b
cika_19b
21.11.2017 - 10:43

üstadım cevabınız için çok teşekkür ederim.kesinlikle faydalı oldu.geri dönüşü biraz geç yazdığım için de kusruma bakmayın.bu projeyi kamuya fayda amaçlı hazırlıyorum. aynı zamanda memur olduğumuzdan bos vaktimde uğraşabiliyorum. yazdığınıza göre programı yazdım . fakat istenmeyen 2 durum oluşuyor.

1.si bu 3 lü durum için 2^3 +1=9 koşul yazmamız gerekiyor. fakat 8 veya daha fazla kısım yaptığımızda kombinasyon çok büyük oluyor.

2.si buzzer bağlayıp delay ile beklettiğimiz ms süre içerisinde -tam beklemeye girdiği süre içinde ise- başka butonu algılamıyor. (yani 1000 ms delay yapıp önce buton1 e sonra buton2 ye bastığımızda 1000 ms aralıkla hem buzzer calışıp hem sıralı KIS-1 ve KIS-2 yanıyor.fakat ilk 1000ms de reset butonunu algılamıyor sonraki 1000ms de algılıyor. ya da tam tersi.)

bu durumu araştırmalarıma göre sanırsam kesmelerle çözeceğiz. fakat nasıl bir interrupt yazabiliriz? dış interrupt veya dış interrupt hangisini kullanacağız. bir çözümünüz var mıdır.kodlar aşağıda:

#include <SPI.h>
#include <DMD2.h>
#include <fonts/Droid_Sans_16.h>
#include <fonts/SystemFont5x7.h>
SoftDMD dmd(1,1);
DMD_TextBox box(dmd);
const int buton1=22;
const int reset2=25;
const int buton2=24;
const int reset1=23;
const int buton3=26;
const int reset3=27;
const int buzzer=28;
int b1;
int b2;
int b3;
int C = 262;
int F = 494;

 void setup() {
  Serial.begin (9600);
  dmd.setBrightness (255);
  dmd.begin();
  dmd.selectFont(Droid_Sans_16);  
   pinMode (buton1,INPUT);
  pinMode (reset1,INPUT);
  pinMode (buton2,INPUT);
  pinMode (reset2,INPUT);
  pinMode (buton3,INPUT);
  pinMode (reset3,INPUT);
 pinMode (buzzer,OUTPUT);
}
void loop() {
  if (digitalRead(buton1)==HIGH)
  {b1=true;}
   else {}  
   if (digitalRead(buton2)==HIGH)
  {b2=true;}
   else {}  
  if (digitalRead(buton3)==HIGH)
  {b3=true;}  
   else {}     
  if (digitalRead(reset1)==HIGH)
  {b1=false;} 
   else {}  
  if (digitalRead(reset2)==HIGH)
  {b2=false;} 
   else {}  
   if (digitalRead(reset3)==HIGH)
  {b3=false;} 
   else {} 
  if(b1 && !b2 && !b3)
  {box.println("KIS-1");  
  tone(buzzer,C);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
  else if(!b1 && b2 && !b3) 
  {box.println("KIS-2");
   tone(buzzer,C);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
 else if(!b1 && !b2 && b3)
  {box.println("KIS-3");
   tone(buzzer,C);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
 else if(!b1 && !b2 && !b3)
  {box.println ("");
  
  noTone(buzzer);
  delay (1000);}
  else if (b1 && b2 && !b3)
 { box.println ("KIS-1");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);
  box.println ("KIS-2");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
   else if (!b1 && b2 && b3)
 { box.println ("KIS-2");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);
  box.println ("KIS-3");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
     else if (b1 && !b2 && b3)
 { box.println ("KIS-1");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);
  box.println ("KIS-3");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
  else if (b1 && b2 && b3)
  {box.println ("KIS-1");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);
  box.println ("KIS-2");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);
  box.println ("KIS-3");
  tone(buzzer,F);
  delay(1000);
  noTone(buzzer);
  delay (1000);}
   else {} 

}

 

Profile picture for user raydingoz
raydingoz
15.11.2017 - 05:46

Yanlış anlamadıysam proje şöyle:

ne istiyoruz: Ekranımız var ve:

  • " - "
  • "Kısım 1"
  • "Kısım 2"
  • "Kısım 3"
  • "Kısım 1 - Kısım 2"
  • "Kısım 1 - Kısım 3"
  • "Kısım 2 - Kısım 3"
  • "Kısım 1 - Kısım 2 - Kısım 3" 

yazacak.

yani 8 durum var.

3 tane booleanımız var. Bu boolenaları ilk baş tanımlarız :

boolean b1 = false; // birinci kısımı butonu

if (digitalRead(buton1)==HIGH){
    b1=true;  
}
if (digitalRead(reset1)==HIGH){
    b1=false;  
}

Sonra durumları tanımlarız:

//"-" için
if (!b1 && !b2 && !b3) {
  box.println(" - "); 
}else if (b1 && !b2 && !b3){
  box.println("Kısım 1"); 
}else if (!b1 && b2 && !b3){
  box.println("Kısım 2"); 
}else if (!b1 && !b2 && b3){
  box.println("Kısım 3"); 
}else if (b1 && b2 && !b3){
  box.println("Ksıım 1 - Kısım 2"); 
}

/*
. 
.
.
gibi
*/

 

 

böyle olması lazım mantıken ama denemeden bilemeyiz.