int red_led = 11; volatile int proximity[8] ; unsigned char analogPin[8] = {A0,A1,A2,A3,A4,A5,A6,A7}; int PWM_left = 6; int left_dir = 7; int PWM_right = 5; int right_dir = 2; volatile int base_speed = 12;

void setup() { // put your setup code here, to run once: pinMode(red_led,OUTPUT); Serial.begin(57600); }

void loop() { // put your main code here, to run repeatedly: // 检测左侧是否有墙 if(digitalRead(5) == HIGH || digitalRead(6) == HIGH || digitalRead(7) == HIGH){ // 左侧有墙,按照沿墙代码进行运动 int distance1 = readProximityDistance(7); int distance2 = readProximityDistance(5); Serial.print("distance1:"); Serial.println(distance1); Serial.print("distance2:");
Serial.println(distance2); if((distance1>=15 && distance1<20)&&(distance2>=15 && distance2<20) ) { leftMotorForward(base_speed+2); rightMotorForward(base_speed); } else if(distance1>=20 && distance2<20) { leftMotorForward(base_speed); rightMotorForward(base_speed+1); } else if(distance1>=20 && distance2>=20){ leftMotorForward(base_speed); rightMotorForward(base_speed+3); } else if(distance1<15 && distance2>15){ leftMotorForward(base_speed+3); rightMotorForward(base_speed); } else if (distance1<15 && distance2<15){ leftMotorForward(base_speed+5); rightMotorForward(base_speed); } }else{ // 左侧无墙,检测前方是否有障碍物 int distance0 = readProximityDistance(0); int distance2 = readProximityDistance(2); if(distance0 < 15 && distance2 > 15){ // 前方有障碍物且右侧无障碍物,右转 rightTurn(); }else{ // 没有障碍物,继续沿左侧墙运动 int distance1 = readProximityDistance(7); int distance2 = readProximityDistance(5); Serial.print("distance1:"); Serial.println(distance1); Serial.print("distance2:");
Serial.println(distance2); if((distance1>=15 && distance1<20)&&(distance2>=15 && distance2<20) ) { leftMotorForward(base_speed+2); rightMotorForward(base_speed); } else if(distance1>=20 && distance2<20) { leftMotorForward(base_speed); rightMotorForward(base_speed+1); } else if(distance1>=20 && distance2>=20){ leftMotorForward(base_speed); rightMotorForward(base_speed+3); } else if(distance1<15 && distance2>15){ leftMotorForward(base_speed+3); rightMotorForward(base_speed); } else if (distance1<15 && distance2<15){ leftMotorForward(base_speed+5); rightMotorForward(base_speed); } } } }

void initIRLED(){ DDRA |= B11111111; PORTA &= B00000000; }

void proxLEDon(unsigned char proxIndex){ PORTA |= 1<<proxIndex; }

void proxLEDoff(unsigned char proxIndex){ PORTA &= ~(1<<proxIndex); }

int readProximityDistance(unsigned char proxIndex){ int distance; proxLEDon(proxIndex); delay(1);
proximity[proxIndex] = analogRead(analogPin[proxIndex]); // Serial.print("Sensor "); // Serial.print("proxIndex :"); // Serial.println(proximity[proxIndex]); // Serial.print("Sensor "); // Serial.print("proxIndex :"); // Serial.print("proximity distance:"); distance = 3.425pow(2.7182,0.0026proximity[proxIndex]); // Serial.print(distance); //y = a*x +b parametera and b are obtained through execl data fitting // Serial.println("mm"); proxLEDoff(proxIndex); return distance; }

void MotorStop(){ digitalWrite(right_dir, HIGH); digitalWrite(PWM_right, HIGH);

digitalWrite(left_dir, HIGH); digitalWrite(PWM_left, HIGH); }

void leftMotorForward(float duty){ int dutyInt = duty; int dutyVal = map(dutyInt,0,100,0,100);

analogWrite(PWM_left, dutyVal); analogWrite(left_dir, 0); }

void rightMotorForward(float duty){ int dutyInt = duty; int dutyVal = map(dutyInt,0,100,0,100); analogWrite(PWM_right, dutyVal); analogWrite(right_dir, 0); }

void leftMotorBackward(float duty){ int dutyInt = duty; int dutyVal = map(dutyInt,0,100,0,80);
analogWrite(PWM_left, 0); analogWrite(left_dir, dutyVal); }

void rightMotorBackward(float duty){ int dutyInt = duty; int dutyVal = map(dutyInt,0,100,0,80); analogWrite(PWM_right, 0); analogWrite(right_dir, dutyVal); }

void rightTurn(){ // 右转代码 leftMotorForward(base_speed+3); rightMotorBackward(base_speed+3); delay(1000); MotorStop();

这是关于沿墙的代码:int red_led = 11;volatile int proximity8 ;unsigned char analogPin8 = A0A1A2A3A4A5A6A7;int PWM_left = 6;int left_dir = 7;int PWM_right = 5;int right_dir = 2;volatile int base_speed = 12;void

原文地址: http://www.cveoy.top/t/topic/fHX7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录