В первый день отпуска собрал для сына простейшего робота, двигающегося по полосе.
Код пока наипростейший
#define PWMA 9
#define AIN1 7
#define AIN2 8
#define PWMB 3
#define BIN1 5
#define BIN2 4
#define STBY 6
int analogPin0 = 14;
int analogPin1 = 15;
int val0 = 0; // переменная для хранения считываемого значения
int val1 = 0;
void setup() {
/* Настроить все 7 выводов на выходы, идущие к драйверу TB6612FNG */
pinMode(PWMA,OUTPUT);
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWMB,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(STBY,OUTPUT);
digitalWrite(STBY,HIGH);
}
void loop() {
val0 = analogRead(analogPin0); // считываем значение
val1 = analogRead(analogPin1);
if (val0 < 100 && val1 < 100) { goForward(); }
if (val0 > 100 && val1 < 100) { rotateLeft(); }
if (val0 < 100 && val1 > 100) { rotateRight(); }
}
void goForward ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,LOW);
analogWrite(PWMA,150);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,LOW);
analogWrite(PWMB,150);
}
void rotateRight ()
{
digitalWrite (AIN1,HIGH);
digitalWrite (AIN2,LOW);
analogWrite(PWMA,100);
digitalWrite (BIN1,LOW);
digitalWrite (BIN2,HIGH);
analogWrite(PWMB,200);
}
void rotateLeft ()
{
digitalWrite (AIN1,LOW);
digitalWrite (AIN2,HIGH);
analogWrite(PWMA,200);
digitalWrite (BIN1,HIGH);
digitalWrite (BIN2,LOW);
analogWrite(PWMB,100);
}
Видео