Arduino projemde 'loop' komutu içerisinde if mantığıyla çeşitli kodlar çalıştırıyorum, sensörün gördüğü dataya göre. Bu süreçte son görülen sensörü kaydetmek için 0. sensör gördüyse ss=1; 2. sensör gördüyse ss=2 kodunu atıyorum ss değerine.
Ardından gelen ss kodunu değerlendirerek (hiçbir sensör görmezken) son olan ss değerine göre işlem yapmak istiyorum ancak kod her seferinde (ilk ss=2 bile olsa) ss=1'e dönüyor ve sanıyorum ki kod daha yukarıda olduğu için.
Kod şu şekilde. Sensör değeri >150 ise görülmesi anlamına geliyor.
#include
//Servo 90=78 (Sapmayı Ortadan Kaldırmak İçin)
//Servo Input
#include
Servo servo;
int pos;
char sensor;
int last;
//Sensor Data Input
#define NUM_SENSORS 3 // number of sensors used
#define TIMEOUT 2500 // waits for 2500 microseconds for sensor outputs to go low
#define NO_EMITTER_PIN 2 // emitter is controlled by digital pin 2
QTRSensorsRC qtrrc((unsigned char[]) {8,9,10},
NUM_SENSORS, TIMEOUT, QTR_NO_EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];
//Motor Data Input
int in1=3;
int in2=4;
int in3=5;
int in4=6;
int en1=2;
int en2=7;
//Servo Inputs
int left_2=108;
int left_1=81;
int mid=78;
int right_1=75;
int right_2=48;
int ss;
//Servo Code
void servoMoveTo(int angle){
if(pos < angle)
{
for(pos=pos; pos<=angle; pos+=5)
{
servo.write(pos);
delayMicroseconds(2335);
}
}
if(pos>=angle)
{
for(pos=pos; pos>=angle; pos-=5)
{
servo.write(pos);
delayMicroseconds(2335);
}
}
}
//Servo Code End
void setup() {
// Motor Driver Card Setup
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(en1,OUTPUT);
pinMode(en2,OUTPUT);
servo.attach(12);
servoMoveTo(mid);
//Sensor Setup
Serial.begin(9600);
delayMicroseconds(50);
}
void loop() {
if (Serial.available() > 0) {
sensor = Serial.read();
}
Serial.println(sensor);
//Motor Driver Card Loop
analogWrite(en1,40);
analogWrite(en2,65);
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
//Sensor Loop
qtrrc.read(sensorValues);
for (unsigned char i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sensorValues[i]);
Serial.print('\t');
}
Serial.println();
Serial.print("Sensor0 ");Serial.println(sensorValues[0]);
Serial.print("Sensor1 ");Serial.println(sensorValues[1]);
Serial.print("Sensor2 ");Serial.println(sensorValues[2]);
//Servo Control Code
if(sensorValues[0]>150 && sensorValues[1]<150 && sensorValues[2]<150)
{servoMoveTo(left_2);ss=1;delayMicroseconds(1);Serial.print("Only 0");}
else if(sensorValues[0]>150 && sensorValues[1]>150 && sensorValues[2]<150)
{servoMoveTo(left_1);delayMicroseconds(1);Serial.print("0 and 1");}
else if(sensorValues[1]>150 && sensorValues[0]<150 && sensorValues[2]<150)
{servoMoveTo(mid);delayMicroseconds(1);Serial.print("Only 1");}
else if(sensorValues[1]>150 && sensorValues[2]>150 && sensorValues[0]<150)
{servoMoveTo(right_1);delayMicroseconds(1);Serial.print("1 and 2");}
else if(sensorValues[2]>150 && sensorValues[0]<150 && sensorValues[1]<150)
{servoMoveTo(right_2);ss=2;delayMicroseconds(1);Serial.print("Only 2");}
else if(sensorValues[0]>150 && sensorValues[1]>150 && sensorValues[2]>150)
{servoMoveTo(mid);delayMicroseconds(1);Serial.print("0 and 1 and 2");}
else if(sensorValues[0] && sensorValues[1] && sensorValues[2]<150)
{Serial.print("SS=");Serial.println(ss); if(ss=1)
{Serial.println("SS=1");
}
else if(ss=2)
{Serial.println("SS=2");
}
delayMicroseconds(1);}
//delayMicroseconds(1);
delay(1500);}