Arduino IR kumanda ile alakalı soru

Başlatan overlok, 18 Haziran 2018, 13:51:22

overlok

Selamlar,
Yeğenime arduino ve IR kumanda ile ufak bir araba yapmaya çalışıyorum. Netten kurcalayarak bir şeyler yaptım kod kısmı ile alakalı. Kodda sıkıntı yok çalışıyor.
Aşağıdaki kodda örneğin ileri için ileri tuşuna basıldığında motorlar çalışıyor, durdurmak için ayrıca stopa basmak gerekiyor.
Öğrenmek istediğim tuşa basılı olduğu süre motorların çalışmasını nasıl sağlarım. Yani ileri tuşuna basınca motorlar çalışacak tuşu bıraktığında duracak şekilde.
Yardımcı olabilir misiniz bu konuda?

#include <IRremote.h>

#define YUKARI 25245
#define ASAGI 43095
#define SOLA 8925
#define SAGA 49725
#define DUR 765

int receiver_pin = 3;
int sol_motor1 = 4;      
int sol_motor2 = 5;
int sag_motor1  =6;
int sag_motor2 = 7;

IRrecv receiver(receiver_pin);
decode_results output;

void setup() {
  Serial.begin(9600);
  receiver.enableIRIn();
  pinMode(sol_motor1, OUTPUT);
  pinMode(sol_motor2, OUTPUT);
  pinMode(sag_motor1, OUTPUT);
  pinMode(sag_motor2, OUTPUT);
}

void loop() {
  if (receiver.decode(&output)) {
    unsigned int value = output.value;
    switch(value) {
      case YUKARI:
           digitalWrite(sol_motor1,LOW);
           digitalWrite(sol_motor2,HIGH);
           digitalWrite(sag_motor1,HIGH);
           digitalWrite(sag_motor2,LOW);
           break;
      case ASAGI:
           digitalWrite(sol_motor1,HIGH);
           digitalWrite(sol_motor2,LOW);
           digitalWrite(sag_motor1,LOW);
           digitalWrite(sag_motor2,HIGH);
           break;
      case SOLA: 
           digitalWrite(sol_motor1,LOW);
           digitalWrite(sol_motor2,HIGH);
           digitalWrite(sag_motor1,LOW);
           digitalWrite(sag_motor2,HIGH);
           break;
      case SAGA:
           digitalWrite(sol_motor1,HIGH);
           digitalWrite(sol_motor2,LOW);
           digitalWrite(sag_motor1,HIGH);
           digitalWrite(sag_motor2,LOW);
           break;
      case DUR:
           digitalWrite(sol_motor1,LOW);
           digitalWrite(sol_motor2,LOW);
           digitalWrite(sag_motor1,LOW);
           digitalWrite(sag_motor2,LOW);
           break;
    }
    receiver.resume();
  }
}
Hanımların dikkatine, overlok makinesi ayağınıza geldi!

agora_meyhanesi42

Her case işleminden sonra value değerini sıfırla ve case DUR yerine Case Else yaz sorun çözülür fakat bu uzun yolu kısa yolu ise do while komutunu kullanman. Basılı olduğu sürece işlem yap basılı değilse dur şeklinde.
Yüksel Türk ! Senin için yükselmenin hududu yoktur...

overlok

Alıntı yapılan: agora_meyhanesi42 - 18 Haziran 2018, 18:05:23Her case işleminden sonra value değerini sıfırla ve case DUR yerine Case Else yaz sorun çözülür fakat bu uzun yolu kısa yolu ise do while komutunu kullanman. Basılı olduğu sürece işlem yap basılı değilse dur şeklinde.
Cevap için teşekkürler fakat anlayamadım dediğinizi. Value değeri nasıl sıfırlanır? Case else yazdığımda hata alıyorum.
Hanımların dikkatine, overlok makinesi ayağınıza geldi!

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr