Soru & Cevap

arduino programıma kesme ekleyemiyorum

22.07.2018 - 05:41

arduino dan yazdığımı bir programa kesme eklemek istiyorum fakat derlediği sırada hatta mesajı veriyor programı ekledim yardımcı olanlara şimdiden teşekürler program: int motor_sag=13; int motor_sol=12; int butonsag=8; int butonsol=7; int butondurumsag; int butondurumsol; void setup() { pinMode(motor_sag,OUTPUT); pinMode(motor_sol,OUTPUT); pinMode(butonsag,INPUT); pinMode(butonsol,INPUT); pinMode(2, INPUT); // DİJİTAL 4 PİNİNE 1. LED BAĞLANACAK pinMode(3, INPUT); // DİJİTAL 5 PİNİNE 2. LED BAĞLANACAK attachInterrupt(0, kesme, RISING); // INT0 pini (dijital2 pini) 1 yapılırsa program kesme isimli fonksiyonu yürütür. attachInterrupt(1, kesme2, RISING); } void loop() { butondurumsag=digitalRead(butonsag); butondurumsol=digitalRead(butonsol); if(butondurumsag==1 && butondurumsol==0) { digitalWrite(motor_sag,HIGH); digitalWrite(motor_sol,LOW); delay(3000); digitalWrite(motor_sag,LOW); digitalWrite(motor_sol,LOW); } else if(butondurumsag==0 && butondurumsol==1) { digitalWrite(motor_sag,LOW); digitalWrite(motor_sol,HIGH); delay(3000); digitalWrite(motor_sag,LOW); digitalWrite(motor_sol,LOW); } else if(butondurumsag==1 && butondurumsol==1){ digitalWrite(motor_sag,LOW); digitalWrite(motor_sol,LOW); } else if(butondurumsag==0 && butondurumsol==0){ digitalWrite(motor_sag,LOW); digitalWrite(motor_sol,LOW); } }

16 Görüntülenme

2 Cevap

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

Profile picture for user m_mesut_44
m_mesut_44
24.07.2018 - 12:33

İlginizden dolayı teşekür ederim aslında benim yapmak istediğim motorlu perde projesi için yazmış olduğum koda 2 ayrı buton koyup perde tam açıldığında veya tam kapandığında motorların durması yazmış olduğum kod aşağıya ekledim inceleyip nasıl yapacağımı söyleyebilirseniz sevinirim 

 

int motor_sag=13;
int motor_sol=12;
int butonsag=8;
int butonsol=7;
int butondurumsag;
int butondurumsol;
#include <IRremote.h>

IRrecv irrecv(2);

decode_results results;

#define BUTON0 0x20DF08F7
#define YUKARI 0xE0E048B7
#define ASAGI 0xE0E008F7

void setup() 
{
  pinMode(motor_sag,OUTPUT);
  pinMode(motor_sol,OUTPUT);
  pinMode(butonsag,INPUT);
  pinMode(butonsol,INPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();
  pinMode(4, OUTPUT);
  digitalWrite(3, LOW);
}
void loop() {
   butondurumsag=digitalRead(butonsag);
   butondurumsol=digitalRead(butonsol);
   while (butondurumsag==1 && butondurumsol==0){
      digitalWrite(motor_sag,HIGH); 
      digitalWrite(motor_sol,LOW);
      
   }           
    else if(butondurumsag==0 && butondurumsol==1){
     digitalWrite(motor_sag,LOW); 
     digitalWrite(motor_sol,HIGH); 
      delay(2000);
      digitalWrite(motor_sag,LOW);
      digitalWrite(motor_sol,LOW);       
    }
    else if(butondurumsag==1 && butondurumsol==1){
     digitalWrite(motor_sag,LOW);
     digitalWrite(motor_sol,LOW);
}
    else if(butondurumsag==0 && butondurumsol==0){
     digitalWrite(motor_sag,LOW);
     digitalWrite(motor_sol,LOW);


    if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    if(results.value == YUKARI)
    digitalWrite(motor_sag,HIGH); 
      digitalWrite(motor_sol,LOW);
      delay(1500);
      digitalWrite(motor_sag,LOW);
      digitalWrite(motor_sol,LOW);
    irrecv.resume();
  }
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, HEX);
    if(results.value == ASAGI)
    digitalWrite(motor_sag,LOW); 
      digitalWrite(motor_sol,HIGH);
      delay(2000);
      digitalWrite(motor_sag,LOW);
      digitalWrite(motor_sol,LOW);
    irrecv.resume();
  }
}
}
    

 

picture-158072-1530701953.jpg
TGUNEYSU
23.07.2018 - 11:20

KESME uygulamanız doğru değil:

  • Kesme içinde kullanılacak ve ana programla paylaşılacak bütün değişkenlerin VOLATILE olaraka tanımlanması gerekir.
    Örnek:  volatile int sayac = 0;
  • KESME nin işlemlerini yapacak rutinlerin fonksiyon olarak programda bulunması gerekir. Sizinkinde KESME() ve KESME2() fonksiyonları yok !
  • Ayrıca KESME rutinleri içinde DELAY() fonksiyonu kullanılmaz. MILLIS çalışmaz. SERIALport çalışması garantili değildir.
  • attachInterrupt komut formatı aşağıdaki gibi olmalı:
    Örnek:  attachInterrupt(digitalPinToInterrupt(interruptPin), KESME, RISING);
    Burada interruptPin değişkeninin interrupt için kullanılacak pin olması gerekir.
  • Interrupt için kullanılacak pinler değişik ARDUINO modellerine göre değişir. Siz eğer UNO kullanıyorsanız yalnız DIG2 ve DIG3 interrupt olarak kullanılır. 
  • Kullandığınız DIG0 ve DIG1 geçerli değildir. Kullanılabilecek pin listesi ARDUINO nun referans sayfasından bulunur:
    https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

İyi çalışmalar.