1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| // 센서 int left2 = A2; int left1 = A3; int right1 = A4; int right2 = A5;
int l2 = 0; int l1 = 0; int r1 = 0; int r2 = 0; //모드 int mode=0; int r = 1;
int straight=255; int rotateH=255; int rotateL=180;
void setup() { pinMode(left2,INPUT); pinMode(left1,INPUT); pinMode(right1,INPUT); pinMode(right2,INPUT); pinMode(4, OUTPUT); // 방향 HIGH, LOW +,- pinMode(5, OUTPUT); // PWM pinMode(6, OUTPUT); // PWM pinMode(7, OUTPUT); // 방향 HIGH, LOW +,- Serial.begin(9600); }
void loop() { // put your main code here, to run repeatedly l2 = analogRead(left2);// leftstate값 확인필요!, 흰색 = 750, 검은색 = 0 l1 = analogRead(left1); //rightstate 확인필요!, 흰색 = 750, 검은색 = 0 r1 = analogRead(right1); r2 = analogRead(right2); Serial.print(l2); Serial.print("/"); Serial.print(l1); Serial.print("/"); Serial.print(r1); Serial.print("/"); Serial.print(r2); Serial.print("/"); Serial.println(mode);
r = r + 1; if(r>10){ r = 1; } mode_selector(); switch(mode){ case 0: digitalWrite(4,0); analogWrite(5,straight); analogWrite(6,straight); digitalWrite(7,0); break; case -1: digitalWrite(4,0); // 좌회전 analogWrite(5,rotateL); analogWrite(6,rotateH); digitalWrite(7,0); break; case -2: digitalWrite(4,0); // 좌강회전 analogWrite(5,0); analogWrite(6,rotateH); digitalWrite(7,0); break; case 1: digitalWrite(4,0); // 우회전 analogWrite(5,rotateH); analogWrite(6,rotateL); digitalWrite(7,0); break; case 2: digitalWrite(4,0); // 우강회전 analogWrite(5,rotateH); analogWrite(6,0); digitalWrite(7,0); break; case 5: digitalWrite(4,0); // 정지 analogWrite(5,0); analogWrite(6,0); digitalWrite(7,0); break; case -5: digitalWrite(4,1); // 후진 analogWrite(5,180); analogWrite(6,180); digitalWrite(7,1); break; } delay(10); } void mode_selector(){ if(l2>200 && r2>200){ mode=0; //0**0 직진 if(l1>200 && r1>200){ mode=-5; //0000 후진 } if(l1<200 && r1 >200){mode=-1;} //0100 좌 if(r1<200 && l1 >200){mode=1;} //0010 우 } if(l2<200){mode=-2;} //1000 좌강 if(r2<200){mode=2;} //0001 우강 if(l2<200 && r2<200){pow(-1,r);} //좌우 흔들어 줘서, 계속 앞 뒤로 움직이며 정체 된 것을 해결해 줌 }
|
Comments
shortname
for Disqus. Please set it in_config.yml
.