#define ECHO_PIN 2
#define TRIG_PIN 3
#include <stdio.h>
#include <math.h>
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
//A4988引脚接线
pinMode(8, OUTPUT);//右侧转向,0=逆时针,1=顺时针
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);//左侧转向,0=逆时针,1=顺时针
pinMode(11, OUTPUT);
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
long i = 0;
void loop() {
//超声波
float distance = readDistanceCM();
bool isNearby = distance < 50;
digitalWrite(LED_BUILTIN, isNearby);
Serial.print("Measured distance: ");
Serial.println(readDistanceCM());
Serial.println( i );
delay(1);
//电机控制
bool run = isNearby ;
if ( 0==run ) { //前进
if ( i != 0 ){
double runResult = 50 / (2.1352 * cos( i * 1.475 ));
int b = runResult + 10 ;
for ( ;b != 0 ; b--){
digitalWrite(8,1) ; digitalWrite(10,0);//前进
delay(10);
digitalWrite(9,LOW) ; digitalWrite(11,HIGH);
delay(10);
digitalWrite(11,LOW) ; digitalWrite(9,HIGH);
}
}
else{
digitalWrite(8,1) ; digitalWrite(10,0);//前进
delay(10);
digitalWrite(9,LOW) ; digitalWrite(11,HIGH);
delay(10);
digitalWrite(11,LOW) ; digitalWrite(9,HIGH);};
for ( ; i != 0 ; i--)//检测是否旋转过
{
float distance = readDistanceCM();
bool isNearby = distance < 50;
Serial.print("Measured distance: ");
Serial.println(readDistanceCM());
Serial.println( i );
delay(1);
digitalWrite(8,LOW) ; digitalWrite(10,LOW);//左转
delay(10);digitalWrite(9,LOW) ; delay(10); digitalWrite(9,HIGH);//2步
delay(10);digitalWrite(11,LOW) ; delay(10); digitalWrite(11,HIGH);
};
}
else //转向
{
if ( run ) {
digitalWrite(8,HIGH) ; digitalWrite(10,HIGH);//左转
delay(10);digitalWrite(9,LOW) ; delay(10); digitalWrite(9,HIGH);//2步,约转向1.5度
delay(10);digitalWrite(11,LOW) ; delay(10); digitalWrite(11,HIGH);
i++;
}
else ;
};
};