Potans -Farkı- Okutma Problemim!! [Çözüldü]
  • İyi günler;

    Dikiş makinesi pedalına bağlı bir potansım var.Ben bu potansı Arduino'dan okutup bilgisayara Serial Mesajları gönderiyorum.İşte sorunum da burda başlıyor:
    Ben pedala dokunmasam yani en açık konumda kalsa -kendi halinde- veya yarısına kadar bassam ayağımı hareket ettirmeden orda bıraksam da tahmin edebileceğiniz üzere deli gibi mesaj gönderiyor.Saniye de bilmem kaç defa...
    Bana durduğu yerde deli gibi mesaj gönderen bir yazılım yerine yalnızca "değişimleri" yani potanstaki -farkı- gönderecek bir yazılım lazım. Delay komutunu kullanmayı denedim.Deli gibi mesaj göndermiyordu doğru ama bu sefer pedalı kontrol etmeye çalıştığımda takıla takıla mesaj gönderdiği için devre işe yaramaz durumdaydı.
    Yardımcı olabilirseniz çok sevinirim , Saygılar ...

    Kod kısmı:

    int pot = A1; //A1 Girişine bağlı pot
    int bendON = 224; //MIDI protokolünde bend ayarını başlatan komut

    void setup() {
    Serial.begin(9600); //baudrate
    }

    void loop() {
    int potVal = analogRead(pot); //Değeri okutma
    int potValWrite = map(potVal, 885, 975, 0 ,127); /*Potansta tam erişim olmadığı için 885-975 değerlerini(min-max) 0-127 (MIDI protokolünün anlıcağı sayılara) sığdırma */
    MIDImessage(bendON, 0, potValWrite); //Mesajı gönderme
    }


    void MIDImessage(byte command, byte data1, byte data2) {
    Serial.write(command);
    Serial.write(data1); //Mesajı gönderme
    Serial.write(data2);
    }

  • merhaba;
    if komutu ile sürekli değerleri kontrol ettirtceksin, değerler farkıysa MIDI ile gönderecek. Void loop içindeki kodlar böyle olmalıdır;
    void loop() {
    int potVal = analogRead(pot);
    int potValWrite = map(potVal, 885, 975, 0, 127);

    if(potValWrite != potValWrite )
    {
    MIDImessage(bendON, 0, portValWrite);
    delay(50);
    }
  • Çok teşekkür ederim yardımınız için ama ne yazık ki çalıştıramadım.
    Dediklerinizi aynen uyguladım.Ama hiçbir mesajlaşma olmadı. İf içindeki şartı sağlamadı sanırım. Pot okuma aralığını(885-975)den 0-1023 yaptım , potansın çalışmıyo ihtimaline karşı basit potans okuma yazılımını yükleyip potansın sağlamlığnı test ettim. "!=" ifadesini yanlış yazmış olabileceğiniz ihtimaline karşı C# operatörleri listesine baktım.Delay'ın süresini değiştirdim, if yapısından çıkarttım.Ama çalışmadı.Mesajlaşma olmuyor. Ve sorunun bilgisayardaki MIDI-Serial Converter programında da olacağını sanmıyorum çünkü Serial Ekranında da hiçbir hareket yok , Tx ledinde de.
  • merhaba;
    burda siz MIDI haberlşemesini kullandığınız için böyle yazdım asıl belirtmek istediğim şey if komutu ile kontrol yapman gerekio serial monitörde değer görmek istiorsan Serial.println(portValWrite) dene.
  • Çok teşekkürler Süleyman Bey sorunu şöyle çözdüm:
    If kullanmam zorunluymuş yardımlarınız için teşekkürler.

    int pot = A1;
    byte bendON = 224;

    void setup() {
    Serial.begin(9600);
    }
    void loop() {
    int potVal = analogRead(pot);
    delay(15);
    int potValLast = analogRead(pot);

    if(potVal == potValLast) { }
    else {
    int potValWrite = map(potValLast, 30, 130, 0 ,127);
    MIDImessage(bendON, 0, potValWrite);
    }

    }
    void MIDImessage(byte command, byte data1, byte data2) {
    Serial.write(command);
    Serial.write(data1);
    Serial.write(data2);
    }
  • merhaba;
    ben teşekkür ederim sorununuzu çözmenize sevindim.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.