Kolay gelsin isis üzerinde cny70 ten analog değer okumaya çalışıyorum.Analog değerleri ayrı ayrı okuyunca bir problem olmuyor ama aynı anda 2 sensörü okumaya çalışınca yine tek sensör okuyormuş gibi davranıyor. sanırım sorun İF yapısında bir yardım edebilecek var mıdır
int M1=13; // sol motor M1 olarak tanımlandı. int M2=12; // sağ motor M2 olarak tanımlandı. int M1_ileri=11; // 11,10 9, 8 pinler L293D motor sürücünün, int M1_geri=10; //ileri geri kontrolü için sabit olarak ayarlandı motorun int M2_ileri=9; // geri geri gitmesi için bir sebeb yok. int M2_geri=8; int analog_0=A0; // A0,A1,A2,A3,A4 analog pinler sırayla int analog_1=A1; //soldan sağa doğru sharp sensörlerin okunduğu pinlerdir. int analog_2=A2; int analog_3=A3; int analog_4=A4; float sensor_0volt=0; // voltaja çevrilen değerler float sensor_1volt=0; float sensor_2volt=0; float sensor_3volt=0; float sensor_4volt=0; void setup() { pinMode(M1, OUTPUT); // pinlerin giriş çıkış işlemleri tanımlandı pinMode(M2, OUTPUT); pinMode(M1_ileri, OUTPUT); pinMode(M1_geri, OUTPUT); pinMode(M2_ileri, OUTPUT); pinMode(M2_geri, OUTPUT); pinMode(analog_0, INPUT); pinMode(analog_1, INPUT); pinMode(analog_2, INPUT); pinMode(analog_3, INPUT); pinMode(analog_4, INPUT); } void loop() { sensor_0volt = (analogRead(analog_0)* (5.0 / 1024.0)); // döngü içerinde voltaja çevirmeyi tanınmladık (sürekli değişken voltaj olduğu için) sensor_1volt = (analogRead(analog_1)* (5.0 / 1024.0)); sensor_2volt = (analogRead(analog_2)* (5.0 / 1024.0)); sensor_3volt = (analogRead(analog_3)* (5.0 / 1024.0)); sensor_4volt = (analogRead(analog_4)* (5.0 / 1024.0)); if (sensor_2volt>0.7 && sensor_2volt<1.0) // tek orta sensör görünce düz git (3. sensör) { ileri(); delay(80); } else if (sensor_0volt>0.7 && sensor_0volt<1.0) // tek en sol sensör görünce sol motoru kapat, sağ motoru tam çalıştır (1. sensör) { tamsol(); delay(80); } else if (sensor_4volt>0.7 && sensor_4volt<1.0) // tek en sağ sensör görünce sağ motoru kapat, sol motoru tam çalıştır(5. sensör) { tamsag(); delay(80); } else if (sensor_3volt>0.7 && sensor_3volt<1.0 ) // 4. sensör görürse { yarimsag(); delay(80); } else if (sensor_1volt>0.7 && sensor_1volt<1.0 ) // 2. sensör görürse { yarimsol(); delay(80); } else if (sensor_1volt>0.7 &&sensor_0volt>0.7 && sensor_1volt<1.0 && sensor_0volt<1.0) // 1 ve 2. sensör görürse { ceyreksol(); delay(80); } else { kapali(); } } void ileri() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,HIGH); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,HIGH); digitalWrite(M1,HIGH); digitalWrite(M2,HIGH); } void kapali() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,LOW); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,LOW); digitalWrite(M1,LOW); digitalWrite(M2,LOW); } void tamsol() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,HIGH); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,HIGH); digitalWrite(M1,LOW); digitalWrite(M2,HIGH); } void tamsag() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,HIGH); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,HIGH); digitalWrite(M1,HIGH); digitalWrite(M2,LOW); } void yarimsag() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,HIGH); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,HIGH); analogWrite(M1,255); // burada PWM kullandık sol motor tam çalışmaya devam ediyor analogWrite(M2,155); // sağ motor ise yarım hızda bu sayede kuvvet sağa doğru yarılanır. } void yarimsol() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,HIGH); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,HIGH); analogWrite(M1,155); // burada PWM kullandık sol motor yarım çalışmaya devam ediyor analogWrite(M2,255); // sağ motor ise tam hızda bu sayede kuvvet sola doğru yarılanır. } void ceyreksol() { digitalWrite(M1_ileri,LOW); digitalWrite(M1_geri,LOW); digitalWrite(M2_ileri,LOW); digitalWrite(M2_geri,LOW); analogWrite(M1,200); // burada PWM kullandık sol motor ceyrek çalışmaya devam ediyor analogWrite(M2,255); // sağ motor ise tam hızda bu sayede kuvvet sola doğru yarılanır. } tam olarak sorun ; else if (sensor_1volt>0.7 &&sensor_0volt>0.7 && sensor_1volt<1.0 && sensor_0volt<1.0) // 1 ve 2. sensör görürse { ceyreksol(); delay(80); } burada voltaj aralıklarını simülasyonda veriyorum ama olmuyor. çok fazla şart kullanıyorum sanırım biraz acemiyim
float/real değerleri 0.7 gibi kullanma mumkunse bunları 0 dan büyük ve integer bir hale çevir mantığı buna göre kur daha kolay olur. hiç bir zaman 0.7 olmayabilir değerin, mesela 0.69998 veya 0,70001 gibi bir değer olur yakalayamazsın…
teşşekkür ederim efendim cevabınız için int i; float f; f = 3.6; i = (int) f; bu şekilde bir çeviri yapacağım sanırım. analog işlemlerin dijitalden hızlı olduğunu düşünerek çizgi izleyen robotu analog olarak programlıyorum. inşallah doğru yoldayımdır
0 dan buyuk olsun sayilarin 0.7 yi int yaparssn 0 olur bi ise yaramaz i=int (f*10) gibi bisey daha iyi olur