arduino kod yardımı.

Başlatan kerem, 08 Ağustos 2024, 18:43:45

kerem

mrb arkadaşlar. aşağıda yazdığım kod istetidigm gibi çalışmamaktadır. benim istegim; bir sıcaklık uygulaması, kumandayla açma kapama işlemi yapıyorum. sistem açıkken eğer sıcaklık sayac değerini geçerse led1 1 defa yanıp sönmesini istiyorum. sadece geçtiği noktada 1 defa yanıp sönecek(yaptığım programda sayac her arttığında yanıp söndüğünü görüyorum.) aynı şekilde sıcaklık sayaç değerinden küçükse led1 1 defa yanıp sönmeli(yaptığım programda sayac her arttığında yanıp söndüğünü görüyorum) sistemin böyle işlenmesini istiyorum ama sürekli farklı değerler alıyorum.

kısaca mantığım şu: cihaz açılınca yanı kumandadan aç sinyali gelince: termostat düşünün belirlenen sıcaklığın üstüne çıkınca kapanıyor(burada bir sinyal istiyorum). aynı şekilde sıcaklık düştüğünde tekrar açılıyor(burda bir sinyal istiyorum). bu şekilde çalışacak taki kumandadan kapatma sinyayi gelmeyene kadar.

void setup (){

pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,INPUT);
  sayac=0;
  sayac1=18;
  sayac2=0;
  sayac3=0;
  sayac4=0;
  sicaklik=17;
 }






void loop() {
// while(1)
 
 //{   
//Serial.println(sayac);
btdrm=(digitalRead(hata));
arti=digitalRead(YUKARI);
eksi=digitalRead(ASAGI);


 
  /*
  Serial.print(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");
sicaklik=sensors.getTempCByIndex(0);
  Serial.print("Temperature is: ");
  Serial.print(sicaklik); // Why "byIndex"?
    delay(1000);
*/






  if (kumanda.decode(& results)) {
    unsigned long code = results.value;
    Serial.println(code,HEX);
  kumanda.resume();


  //kumandadan basma ayarları
   if(code==OK )//1 butonuna basıldıysa
    {
      sayac2++;
     
     if(sayac2==1 ){ 
    digitalWrite(led,1);
    delay(500);
    digitalWrite(led,0);
    delay(500);

   
 display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(10, 0);
  display.println("CIHAZ ON");
  display.display();
  delay(2500);

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4);
  display.setCursor(30, 0);
  //display.println("ON");
  display.println(sayac1);
  display.display();
  delay(10);

  }


     
   
 if(sayac2==2 ){

     
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(10, 0);
  display.println("CIHAZ OFF");
  display.display();
  delay(1000);
 
   digitalWrite(led,1);;
    delay(500);
    digitalWrite(led,0);
    delay(500);
   
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4);
  display.setCursor(30, 0);
  display.println("OFF");
  display.display();
  delay(10);
 
 sayac2=0;
     }
     }


if( sayac1>sicaklik && sayac2==1){
sayac4++;
delay(200);
if(sayac4==1){
     digitalWrite(led,0);
    delay(500);
    digitalWrite(led,0);
    delay(500);
}

    if(sayac4==2){
     digitalWrite(led,1);
    delay(500);
    digitalWrite(led,0);
    delay(500);
}
 display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(10, 0);
  display.println("T ON");
  display.display();
  delay(2500);

  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4);
  display.setCursor(30, 0);
  //display.println("ON");
  display.println(sayac1);
  display.display();
  delay(10);
 
     }
     

if( sayac1<sicaklik && sayac2==1){
sayac4--;
     
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(2);
  display.setCursor(10, 0);
  display.println("T OFF");
  display.display();
  delay(1000);
 
   
     digitalWrite(led,1);
    delay(500);
    digitalWrite(led,0);
    delay(500);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4);
  display.setCursor(30, 0);
  display.println("OFF");
  display.display();
  delay(10);
 
 //sayac2=0;
     }
     


 
  if(code==YUKARI&& sayac2==1 ) //2 butonuna basıldıysa
    {
   
  sayac1++;
 
  /* Serial.print(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  Serial.print("Temperature is: ");
  Serial.print(sensors.getTempCByIndex(0)); // Why "byIndex"?
    delay(1000);
*/
   
       
if(sayac1==40)sayac1=40;
   display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4);
  display.setCursor(30, 0);
  display.println(sayac1);
  display.display();
  delay(1000);
   

    }
 
     
   if(code==ASAGI&& sayac2==1) //2 butonuna basıldıysa
   {
  sayac1--;
 

if(sayac1<15)sayac1=15;
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(4);
  display.setCursor(30, 0);
  display.println(sayac1);
  display.display();
  delay(1000);

   
   }

mehmet

Ledin yanıp sönme işlemi bitince "code = -1" gibi normalde olmayan bir değer yüklerseniz, sorun aşılmış olur.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

kerem

Teşekkür ederim mehmet bey. şöyle bir sorum daha olacak. ilginiz için teşekkür ederim öncelikle.
şimdi benim arduionaya bir buton baglayacağım. bu botuna 1 kere basınca led bir 1 kere yanıp sönecek. botuna 2.ci defa basınca led 2 kere yanıp söncek. butona 3.cü defa basınca led 3 defa yanıp söncek.

ama diyelim butona peşpese 2 defa bastım. ben ledin 2 defa yanıp sönmesini istiyorum. yani butona 1 defa basıldı bilgisini es geçip doğrudan 2 defa basıldı sayıp ona göre işlem yapmasını istiyorum. ama her seferinde ne kadar hızlıda butona basmış olsam önce 1 defa basıldı algılayıp ledi 1 defa yanıp söndürüyor ben bu olayı istemiyorum. kodlar aşağıdadır. nasıl bir yol izlemeliyim


[const int buton = 2;
const int led1 = 3;
const int led2 = 4;
const int led3 = 5;

int butondurumu = 0;
int deger = 0;
void setup()
{

//Pinlerin giriş – çıkış tanımlaması yapılıyor
pinMode(buton, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
Serial.begin(9600);
}

void loop()
{
//buton değeri buton durumu değişkenine yazılıyor
butondurumu = digitalRead(buton);

//Butona basıldı ve deger değişkeni 0 ise
if ( (butondurumu == LOW)  )
 delay(10);
 
  deger++;
 Serial.println(String ("Butona ")+deger+(".defa basıldı"));   
{
 
 
  while ( (butondurumu == LOW)  ){
    delay(3000);   
    butondurumu = digitalRead(buton);
  }
   delay(10);

 if ( (deger == 1)  )
digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
//deger=1;
delay(10);
}

//Buton bırakıldı ve deger değişkeni 1 ise
/*if ( (butondurumu == LOW) && (deger == 1) )

{

// 1. kez basıp bırakınca yapılacaklar yazılabilir.

deger=2;
delay(10);
}*/

//Butona basıldı ve deger değişkeni 2 ise
//if ( (butondurumu == HIGH) && (deger == 2) )
if ( deger == 2 )
{
// 2. kez basılınca yapılacaklar yazılabilir.

digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
  digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
//deger=3;
delay(10);
}
/*
//Buton bırakıldı ve deger değişkeni 3 ise
if ( (butondurumu == LOW) && (deger == 3) )

{

// 2. kez basıp bırakınca yapılacaklar yazılabilir.

deger=4;
delay(10);
}*/

//Butona basıldı ve deger değişkeni 4 ise
if ( (deger == 3) )

{
// 3. kez basılınca yapılacaklar yazılabilir.

digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
  digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
 digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(300);   
 

deger=0;
delay(10);
}

mehmet

#3
Bir süre belirlemelisiniz ilk önce. Bu süre içinde basılan tuş sayısını geçerli saymalısınız.
Ya da başka bir buton ekleyip birinci butona basma işleminin bittiğini bildirmelisiniz. (PC'deki <ENTER> tuşu gibi)


Ek:
Kodlarınızı kod bloğu içinde paylaşırsanız daha anlaşılır olacaktır.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

kerem

#4
hocam zaman olayını tam anlamlandıramadım kod üzerinde küçük bir örnek yazma şansınız varmı teşekkür ederim.




  const int buton = 2;
const int led1 = 3;
const int led2 = 4;
const int led3 = 5;

int butondurumu = 0;
int deger = 0;
void setup()
{

//Pinlerin giriş – çıkış tanımlaması yapılıyor
pinMode(buton, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
Serial.begin(9600);
}

void loop()
{
//buton değeri buton durumu değişkenine yazılıyor
butondurumu = digitalRead(buton);

//Butona basıldı ve deger değişkeni 0 ise
if ( (butondurumu == LOW)  )
 delay(10);
  
  deger++;
 Serial.println(String ("Butona ")+deger+(".defa basıldı"));   
{
  
  
  while ( (butondurumu == LOW)  ){
    delay(3000);   
    butondurumu = digitalRead(buton);
  }
   delay(10); 

 if ( (deger == 1)  )
digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
//deger=1;
delay(10);
}

//Buton bırakıldı ve deger değişkeni 1 ise
/*if ( (butondurumu == LOW) && (deger == 1) )

{

// 1. kez basıp bırakınca yapılacaklar yazılabilir.

deger=2;
delay(10);
}*/

//Butona basıldı ve deger değişkeni 2 ise
//if ( (butondurumu == HIGH) && (deger == 2) )
if ( deger == 2 )
{
// 2. kez basılınca yapılacaklar yazılabilir.

digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
  digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
//deger=3;
delay(10);
}
/*
//Buton bırakıldı ve deger değişkeni 3 ise
if ( (butondurumu == LOW) && (deger == 3) )

{

// 2. kez basıp bırakınca yapılacaklar yazılabilir.

deger=4;
delay(10);
}*/

//Butona basıldı ve deger değişkeni 4 ise
if ( (deger == 3) )

{
// 3. kez basılınca yapılacaklar yazılabilir.

digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
  digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(500);
 digitalWrite(led1, HIGH);
  delay(500);
digitalWrite(led1, LOW);
delay(300);   
  

deger=0;
delay(10);
}
/*
//Buton bırakıldı ve deger değişkeni 5 ise
if ( (butondurumu == LOW) && (deger == 5) )

{

// 3. kez basıp bırakınca yapılacaklar yazılabilir.

deger=0;
delay(10);
}
*/
 /*if ( (butondurumu == LOW) ) {
    
  digitalWrite(led1, LOW);
delay(300);   
  }*/

}




*/

mehmet

En fazla kaç saniye sonra tuş durumu değerlendirilecek? Bunu önce belirleyin.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

kerem

hocam 0 ila 1 saniye arası 1 defa yanıp sönecek. 1,2 saniye ile 2 saniye arası 2 defa yan sön 2,2 ile 3 saniye arası 3 defa yan sön olması gerek

mehmet

https://etepic.com/index.php?msg=48446
burada yazdığınızla, üstte yazdığınız çelişmiyor mu?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
http://www.mehmetbilgi.net.tr
CC BY

Powered by EzPortal