Arduino önceki komutu iptal etme

  • Konbuyu başlatan PınarSu151
  • Başlangıç tarihi

bolubeyi

Profesyonel Üye
Katılım
27 Eyl 2008
Mesajlar
1,042
Puanları
323
Konum
Trabzon
bir değişkene kaydettiyseniz değişkene yeni durum atayın.
 
Konu Sah
PınarSu151
Katılım
23 Ocak 2021
Mesajlar
8
Puanları
3
Yaş
21
bir değişkene kaydettiyseniz değişkene yeni durum atayın.
Rica etsem müsait olduğunuz zaman verdiğim link üzerinden kodu düzenleyebilirmisiniz?
 

bolubeyi

Profesyonel Üye
Katılım
27 Eyl 2008
Mesajlar
1,042
Puanları
323
Konum
Trabzon
Hangi link?
 

kaptan_

Katılımcı Üye
Katılım
1 Şub 2014
Mesajlar
544
Puanları
58
Bir fonksiyon yazın, fonksiyon içerisinde tüm pin değerlerini LOW konumuna çekin.
Her butona bastığınızda önce bu fonksiyonu çağırın.

Örnek:
Kod:
void loop(){
  if(buton1 == true){
    sifirla();
    // diğer kodlar
  }
  if(buton == true){
    sifirla();
    // diğer kodlar
  }
}

void sifirla() {
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
}
 
Katılım
8 Tem 2019
Mesajlar
126
Puanları
8
Yaş
20
her bir if koşulunun içine örneğin ilk if

butondurum2 = 0;
butondurum3 = 0;
butondurum4 = 0;
butondurum5 = 0;
butondurum6 = 0;

ekleyin ikinci elseif için

butondurum1 = 0;
butondurum3 = 0;
butondurum4 = 0;
butondurum5 = 0;
butondurum6 = 0;
gibi hepsine bu ifadeyi ekleyin açık kalmasını istediğiniz durum hariç.
 
Konu Sah
PınarSu151
Katılım
23 Ocak 2021
Mesajlar
8
Puanları
3
Yaş
21

FakirMaker

Üye
Katılım
5 May 2009
Mesajlar
290
Puanları
33
Merhaba, ben bu devrede her yeni bir tuşa basıldığında önceki komutun iptal edilmesini istiyorum bunu nasıl yapabilirim?
Kod:
const int led1 = 6;

const int buton1 = 0;

int butondurum1=0;


const int led2 = 7;

const int buton2 = 1;

int butondurum2=0;


const int led3 = 8;

const int buton3 = 2;

int butondurum3=0;


const int led4 = 9;

const int buton4 = 3;

int butondurum4=0;


const int led5 = 10;

const int buton5 = 4;

int butondurum5=0;


const int led6 = 11;

const int buton6 = 5;

int butondurum6=0;

void setup()
{
  pinMode(led1,OUTPUT);
  pinMode(buton1,INPUT);

  pinMode(led2,OUTPUT);
  pinMode(buton2,INPUT);

  pinMode(led3,OUTPUT);
  pinMode(buton3,INPUT);

  pinMode(led4,OUTPUT);
  pinMode(buton4,INPUT);

  pinMode(led5,OUTPUT);
  pinMode(buton5,INPUT);

  pinMode(led6,OUTPUT);
  pinMode(buton6,INPUT);
}

void loop()
{
  butondurum1 = digitalRead(buton1);
  butondurum2 = digitalRead(buton2);
  butondurum3 = digitalRead(buton3);
  butondurum4 = digitalRead(buton4);
  butondurum5 = digitalRead(buton5);
  butondurum6 = digitalRead(buton6);
     
    if(butondurum1 == HIGH)
    {
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led3,LOW);
      digitalWrite(led4,LOW);
      digitalWrite(led5,LOW);
      digitalWrite(led6,LOW);
     
      digitalWrite(led1,HIGH);
      delay(500);
     
      digitalWrite(led1,LOW);
      digitalWrite(led6,HIGH);
      delay(9999);
    }

    else if(butondurum2 == HIGH)
    {
      digitalWrite(led1,HIGH);
      digitalWrite(led2,HIGH);
      delay(500);
     
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led6,HIGH);
      delay(2000);
    }

    else if(butondurum3 == HIGH)
    {
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led3,LOW);
      digitalWrite(led4,LOW);
      digitalWrite(led5,LOW);
      digitalWrite(led6,LOW);
     
      digitalWrite(led1,HIGH);
      delay(250);
     
      digitalWrite(led1,LOW);
      digitalWrite(led2,HIGH);
      delay(250);
     
      digitalWrite(led2,LOW);
      digitalWrite(led3,HIGH);
      delay(250);
     
      digitalWrite(led3,LOW);
      digitalWrite(led4,HIGH);
      delay(250);
     
      digitalWrite(led4,LOW);
      digitalWrite(led5,HIGH);
      delay(250);
     
      digitalWrite(led5,LOW);
      digitalWrite(led6,HIGH);
      delay(9999);
    }

    else if(butondurum4 == HIGH)
    {
      digitalWrite(led4,HIGH);
      delay(250);
     
      digitalWrite(led4,LOW);
      delay(250);
     
      digitalWrite(led3,HIGH);
      delay(250);
     
      digitalWrite(led3,LOW);
      delay(250);
     
      digitalWrite(led4,HIGH);
      delay(250);
     
      digitalWrite(led4,LOW);
      delay(250);
     
      digitalWrite(led3,HIGH);
      delay(250);
     
      digitalWrite(led3,LOW);
      delay(250);
     
      digitalWrite(led4,HIGH);
      delay(250);
     
      digitalWrite(led4,LOW);
      delay(250);
     
      digitalWrite(led3,HIGH);
      delay(250);
   
      digitalWrite(led3,LOW);
      delay(9999);
    }

    else if(butondurum5 == HIGH)
    {
      digitalWrite(led6,HIGH);
      delay(250);
     
      digitalWrite(led6,LOW);
      digitalWrite(led5,HIGH);
      delay(250);
     
      digitalWrite(led5,LOW);
      digitalWrite(led4,HIGH);
      delay(250);
     
      digitalWrite(led4,LOW);
      digitalWrite(led3,HIGH);
      delay(250);
     
      digitalWrite(led3,LOW);
      digitalWrite(led2,HIGH);
      delay(250);
     
      digitalWrite(led2,LOW);
      digitalWrite(led1,HIGH);
      delay(250);
     
      digitalWrite(led1,LOW);
      digitalWrite(led6,HIGH);
      delay(9999);
    }

    else if(butondurum6 == HIGH)
    {
      digitalWrite(led1,HIGH);
      digitalWrite(led2,HIGH);
      digitalWrite(led3,HIGH);
      digitalWrite(led4,HIGH);
      digitalWrite(led5,HIGH);
      digitalWrite(led6,HIGH);
      delay(500);
     
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led3,LOW);
      digitalWrite(led4,LOW);
      digitalWrite(led5,LOW);
      digitalWrite(led6,LOW);
      delay(500);
     
      digitalWrite(led1,HIGH);
      digitalWrite(led2,HIGH);
      digitalWrite(led3,HIGH);
      digitalWrite(led4,HIGH);
      digitalWrite(led5,HIGH);
      digitalWrite(led6,HIGH);
      delay(500);
     
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led3,LOW);
      digitalWrite(led4,LOW);
      digitalWrite(led5,LOW);
      digitalWrite(led6,LOW);
      delay(500);
     
      digitalWrite(led1,HIGH);
      digitalWrite(led2,HIGH);
      digitalWrite(led3,HIGH);
      digitalWrite(led4,HIGH);
      digitalWrite(led5,HIGH);
      digitalWrite(led6,HIGH);
      delay(500);
     
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led3,LOW);
      digitalWrite(led4,LOW);
      digitalWrite(led5,LOW);
      digitalWrite(led6,LOW);
    }

  else
  {
      digitalWrite(led1,LOW);
      digitalWrite(led2,LOW);
      digitalWrite(led3,LOW);
      digitalWrite(led4,LOW);
      digitalWrite(led5,LOW);
      digitalWrite(led6,LOW);
  }
}
Sana çözümü söylemeden önce birkaç öneride bulunacağım. Birincisi dijital girişler int değil bool dur yani sayı değil durumdur onları öyle yani onlar high veya low değil −2,147,483,648 ve +2,147,483,647 arasında bir değermiş gibi davranamazsın. İkincisi birbirini tekrar eden işlerde fonksiyon kullanmalısın yoksa hem aletin hafızası dolar hemde boşa hamallık edersin. Üçüncüsü sırayla yapılacak işlerde for döngüsünü çok koşullu işlerde if yerine switch döngüsünü kullanman gerekir. Şimdi senin soruna gelirsek; Anladığım kadarıyla bir butona basıldığında başlanan işi tamamlanmadan diğer buton basılırsa yarıda kesmek istiyorsun. Bunu kesmeyle yapabilirdik ama 6 butona kesme vereeyiz o yüzden belirli aralıklarla butonlara bakmak zorundayız. delay(500) komutu aleti 500ms uyutacağı için butonları göremeyiz onun yerine aleti 500e kadar saydırıp her bir sayıda butonlara baktırmamız gerekir. bunun için bekle() adında bir fonksiyon yazmalıyız. Yazdığın kodu sadeleştirdim bi bakarsın. Derledim ama çalıştırmadım sen deneyip göreceksin. Daha fazla sadeleştirmek mümkün ama anlayamazsın o zaman. Şimdi aşağıdaki kodu incele çalıştır olmayan birşey varsa buraya yaz.

Kod:
#define ON true
#define OFF false

const int led1 = 6;
const int led2 = 7;
const int led3 = 8;
const int led4 = 9;
const int led5 = 10;
const int led6 = 11;

const int buton1 = 0;
const int buton2 = 1;
const int buton3 = 2;
const int buton4 = 3;
const int buton5 = 4;
const int buton6 = 5;

int flag=0;
void led(bool,bool,bool,bool,bool,bool);// Led Fonksiyon prototipi
void bekle(int,int);
void check_inputs(); 
void setup()
{
  for(int i=0;i<6;i++)    //Girişler
    pinMode(i,INPUT);

  for(int k=6;k<12;k++)    //Çıkışlar
    pinMode(k,OUTPUT);
}

void loop()
{
    flag=0;
    check_inputs();
    switch(flag){
      case 1:
        led(ON,OFF,OFF,OFF,OFF,OFF);
        bekle(1,500);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(1,9999);
        break;
      case 2:
        led(ON,ON,OFF,OFF,OFF,OFF);
        bekle(2,500);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(2,2000);
        break;
      case 3:
        led(ON,OFF,OFF,OFF,OFF,OFF);
        bekle(3,250);
        led(OFF,ON,OFF,OFF,OFF,OFF);
        bekle(3,250);
        led(OFF,OFF,ON,OFF,OFF,OFF);
        bekle(3,250);
        led(OFF,OFF,OFF,ON,OFF,OFF);
        bekle(3,250);
        led(OFF,OFF,OFF,OFF,ON,OFF);
        bekle(3,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(3,9999);
        break;
      case 4:
        led(OFF,OFF,OFF,ON,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,ON,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,ON,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,ON,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,ON,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,ON,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,9999);
        break;
      case 5:
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(5,250);
        led(OFF,OFF,OFF,OFF,ON,OFF);
        bekle(5,250);
        led(OFF,OFF,OFF,ON,OFF,OFF);
        bekle(5,250);
        led(OFF,OFF,ON,OFF,OFF,OFF);
        bekle(5,250);
        led(OFF,ON,OFF,OFF,OFF,OFF);
        bekle(5,250);
        led(ON,OFF,OFF,OFF,OFF,OFF);
        bekle(5,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(5,9999);
        break;
      case 6:
        led(ON,ON,ON,ON,ON,ON);
        bekle(6,500);
        led(OFF,OFF,OFF,OFF,OFF,OFF);
        bekle(6,500);
        led(ON,ON,ON,ON,ON,ON);
        bekle(6,500);
        led(OFF,OFF,OFF,OFF,OFF,OFF);
        bekle(6,500);
        led(ON,ON,ON,ON,ON,ON);
        bekle(6,500);
        led(OFF,OFF,OFF,OFF,OFF,OFF);
        break;
      deafult:
        break;
    }
}

void led(bool Led1,bool Led2,bool Led3,bool Led4,bool Led5,bool Led6){
  digitalWrite(led1,Led1);
  digitalWrite(led2,Led2);
  digitalWrite(led3,Led3);
  digitalWrite(led4,Led4);
  digitalWrite(led5,Led5);
  digitalWrite(led6,Led6);
}

void bekle(int mflag,int sure){
  int isure = 0;
  while(isure<sure && flag==mflag){
    delay(1);
    check_inputs();
    isure++;
  }
}
void check_inputs(){
  int mflag=0;
  for(int i=0;i<6;i++)
    if(digitalRead(i))
      mflag=i+1;
  if(mflag != flag && mflag !=0)
    flag=mflag;
}
 
Konu Sah
PınarSu151
Katılım
23 Ocak 2021
Mesajlar
8
Puanları
3
Yaş
21
Sana çözümü söylemeden önce birkaç öneride bulunacağım. Birincisi dijital girişler int değil bool dur yani sayı değil durumdur onları öyle yani onlar high veya low değil −2,147,483,648 ve +2,147,483,647 arasında bir değermiş gibi davranamazsın. İkincisi birbirini tekrar eden işlerde fonksiyon kullanmalısın yoksa hem aletin hafızası dolar hemde boşa hamallık edersin. Üçüncüsü sırayla yapılacak işlerde for döngüsünü çok koşullu işlerde if yerine switch döngüsünü kullanman gerekir. Şimdi senin soruna gelirsek; Anladığım kadarıyla bir butona basıldığında başlanan işi tamamlanmadan diğer buton basılırsa yarıda kesmek istiyorsun. Bunu kesmeyle yapabilirdik ama 6 butona kesme vereeyiz o yüzden belirli aralıklarla butonlara bakmak zorundayız. delay(500) komutu aleti 500ms uyutacağı için butonları göremeyiz onun yerine aleti 500e kadar saydırıp her bir sayıda butonlara baktırmamız gerekir. bunun için bekle() adında bir fonksiyon yazmalıyız. Yazdığın kodu sadeleştirdim bi bakarsın. Derledim ama çalıştırmadım sen deneyip göreceksin. Daha fazla sadeleştirmek mümkün ama anlayamazsın o zaman. Şimdi aşağıdaki kodu incele çalıştır olmayan birşey varsa buraya yaz.

Kod:
#define ON true
#define OFF false

const int led1 = 6;
const int led2 = 7;
const int led3 = 8;
const int led4 = 9;
const int led5 = 10;
const int led6 = 11;

const int buton1 = 0;
const int buton2 = 1;
const int buton3 = 2;
const int buton4 = 3;
const int buton5 = 4;
const int buton6 = 5;

int flag=0;
void led(bool,bool,bool,bool,bool,bool);// Led Fonksiyon prototipi
void bekle(int,int);
void check_inputs();
void setup()
{
  for(int i=0;i<6;i++)    //Girişler
    pinMode(i,INPUT);

  for(int k=6;k<12;k++)    //Çıkışlar
    pinMode(k,OUTPUT);
}

void loop()
{
    flag=0;
    check_inputs();
    switch(flag){
      case 1:
        led(ON,OFF,OFF,OFF,OFF,OFF);
        bekle(1,500);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(1,9999);
        break;
      case 2:
        led(ON,ON,OFF,OFF,OFF,OFF);
        bekle(2,500);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(2,2000);
        break;
      case 3:
        led(ON,OFF,OFF,OFF,OFF,OFF);
        bekle(3,250);
        led(OFF,ON,OFF,OFF,OFF,OFF);
        bekle(3,250);
        led(OFF,OFF,ON,OFF,OFF,OFF);
        bekle(3,250);
        led(OFF,OFF,OFF,ON,OFF,OFF);
        bekle(3,250);
        led(OFF,OFF,OFF,OFF,ON,OFF);
        bekle(3,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(3,9999);
        break;
      case 4:
        led(OFF,OFF,OFF,ON,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,ON,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,ON,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,ON,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,ON,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,ON,OFF,OFF,ON);
        bekle(4,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(4,9999);
        break;
      case 5:
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(5,250);
        led(OFF,OFF,OFF,OFF,ON,OFF);
        bekle(5,250);
        led(OFF,OFF,OFF,ON,OFF,OFF);
        bekle(5,250);
        led(OFF,OFF,ON,OFF,OFF,OFF);
        bekle(5,250);
        led(OFF,ON,OFF,OFF,OFF,OFF);
        bekle(5,250);
        led(ON,OFF,OFF,OFF,OFF,OFF);
        bekle(5,250);
        led(OFF,OFF,OFF,OFF,OFF,ON);
        bekle(5,9999);
        break;
      case 6:
        led(ON,ON,ON,ON,ON,ON);
        bekle(6,500);
        led(OFF,OFF,OFF,OFF,OFF,OFF);
        bekle(6,500);
        led(ON,ON,ON,ON,ON,ON);
        bekle(6,500);
        led(OFF,OFF,OFF,OFF,OFF,OFF);
        bekle(6,500);
        led(ON,ON,ON,ON,ON,ON);
        bekle(6,500);
        led(OFF,OFF,OFF,OFF,OFF,OFF);
        break;
      deafult:
        break;
    }
}

void led(bool Led1,bool Led2,bool Led3,bool Led4,bool Led5,bool Led6){
  digitalWrite(led1,Led1);
  digitalWrite(led2,Led2);
  digitalWrite(led3,Led3);
  digitalWrite(led4,Led4);
  digitalWrite(led5,Led5);
  digitalWrite(led6,Led6);
}

void bekle(int mflag,int sure){
  int isure = 0;
  while(isure<sure && flag==mflag){
    delay(1);
    check_inputs();
    isure++;
  }
}
void check_inputs(){
  int mflag=0;
  for(int i=0;i<6;i++)
    if(digitalRead(i))
      mflag=i+1;
  if(mflag != flag && mflag !=0)
    flag=mflag;
}
Çok ama çok teşekkür ederim.
 

Benzer Konular

Forum istatistikleri

Konular
114,972
Mesajlar
809,463
Kullanıcılar
420,523
Son üye
AhmetSüdaş

Yeni konular

Üst