Arkadaşlar merhaba yeni yeni bir şeyler öğrenmeye başlıyorum arduino da. Uzaktan kumandalı arabayı arduino aracılığıyla pc den kontrol etmek istiyorum ve ediyorum da processing yardımıyla w a s d tuşları kullanarak fakat ‘w’ a bastığımızda araba ileri gıdıyor, ‘w’ dan elimi çektiğimde de gitmeye devam ediyor, benim istediğim şey bastığım surece gitsin elimi çektiğimde dursun. Switch le alakalı sanırım ama bir çözüm bulamadım yardımcı olursanız sevinirim ilginize şimdiden teşekkürler. char val; // deger tanımlama void setup() { // cikis pinlerini tanimla pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); // seri iletisim ayarlari Serial.begin(9600); // ilk komut gönderme digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); } void loop() { // seri sinyali oku val = Serial.read(); if(val!=-1) { switch(val) { // eğer sinyal w ise ileri sür case ‘w’: digitalWrite(13, HIGH); digitalWrite(12, LOW); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“ileri git”); break; // eğer sinyal s ise geri sür case ‘s’: digitalWrite(13, LOW); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“geri git”); break; // eğer sinyal d ise sola don case ‘d’: digitalWrite(11, LOW); digitalWrite(10, HIGH); Serial.println(“sola don”); break; // eğer sinyal a ise saga don case ‘a’: digitalWrite(10, LOW); digitalWrite(11, HIGH); Serial.println(“saga don”); break; // eğer sinyal x ise dur case ‘x’: digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“dur”); break; } } }
Merhaba! Ben pek elektronikten anlamam daha caylagim bugün yeni kitabim Arduino ile bulustum
Acaba else’yi de kullansan bir faydasi olur mu?
Ben arduinoya henuz sahip degilim aama yazidigin kodda hata yok . sorun serial den okunan son kodun hala hafizada olmasi eksik olan setup taki gibi switch kodundan sonra Serial i okumayi durdurup tekrar baslatman problemi cozebilir.
Switch ile gelen char değerine göre yapacağı işi yaptıktan sonra Switch parantezinin dışında tüm pinleri LOW yapmak bir çözüm olabilir.
Her türlü durumda, arayüzden w gönderdikten sonra, halen w okuyor. Sistem sizin w’ya ne kadar süre bastığınızı görmez/göremez. “Gönder” tuşuna bastıktan sonra sistem bunu bir karakter olarak görüyor herhangi bir zaman bilgisi bulunmuyor.
bluetooth haberleşmesinde hep sendtext ile text değer gönderiliyor.rakam yollamamız mümkünmüdür.yani ‘100’ yerin 100 göndermek istiyorum veya ‘100’ değerini integer değişkene nasıl aktarabiliriz.
aşağıdaki kod gibi yap sanırım istediğini tam karrşılar if (val==“w”) { digitalWrite(13, HIGH); digitalWrite(12, LOW); digitalWrite(11, HIGH); digitalWrite(10, HIGH); } else if else if … … } val=“”;
en alta bir de default koşulu ekleyip tüm pinleri durma komutu yollarsanız sorun çözülür sanıyorum. default digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“dur”); break; sol ve sağ dönüşlerde de sadece dönecek motora komut verip dönmeyecek olan motorlara herhangi bir şey dememişsiniz.
sadece Serial.read ve serial monitörle yaptığını varsayarak; klavyeden w yolladın gitti arduino loop a devam eder. senin elini ne zaman çektiğini anlayamaz ki, bunu kodla falan çözmen imkansız. library denen olaya hiç bakmadım henüz. sen bi bak ![]()
bende senin projenin android telden kontollüsünü yapıyorum hazır kontrol programı var hiç bir şeye basılmadığı zaman sürekli S harfi(stop olarak ayarlanmış) gönderiyor. Belki bu yardımcı olabilir
Bende öğrenmeye devam ediyorum şuan iş yerindeyim arduino yok yanımda o sebepten deneyemedim. döngüleri okurken senin problem geldi aklıma bir dene istersen seri porta putty ile bağlan yani arabayı kontrol etmek için. char val=0; // deger tanımlama void setup() { // cikis pinlerini tanimla pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); // seri iletisim ayarlari Serial.begin(9600); // ilk komut gönderme } void loop() { digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); do { // seri sinyali oku val = Serial.read(); switch(val) { // eğer sinyal w ise ileri sür case ‘w’: digitalWrite(13, HIGH); digitalWrite(12, LOW); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“ileri git”); break; // eğer sinyal s ise geri sür case ‘s’: digitalWrite(13, LOW); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“geri git”); break; // eğer sinyal d ise sola don case ‘d’: digitalWrite(11, LOW); digitalWrite(10, HIGH); Serial.println(“sola don”); break; // eğer sinyal a ise saga don case ‘a’: digitalWrite(10, LOW); digitalWrite(11, HIGH); Serial.println(“saga don”); break; // eğer sinyal x ise dur case ‘x’: digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(10, HIGH); Serial.println(“dur”); break; } } while((Serial.available() > 0)); } şeklinde düzenle kodlarını ![]()
Sanal Arduino varmış ya ![]()
Merhaba eger If(wal=w) … Else if(wal=s) … Else if … … Else if… … //en sona Else if(wal=0) Motorlari durdur Yaparsan cozulebilir diye dusunuyorum