Добрый вечер(утро/день/ночь), уважаемые участники форума. Столкнулся с такой проблей, суть которой заключается в отказе работы драйвера tb6612f в одном скетче, но с полной его отдачей в другом. Если проще, то задумал сделать машинку с псевдо "искусственным интелектом", которая будет останавливаться перед препятствиями, "смотреть" по сторонам с помощью сервопривода и выбирать наиболее доступную по данным ультразвукового датчика расстояния. Сначала написал код под сервопривод и выбор наибольшей стороны. Все работает отлично. После написал код с обычной ездой самой машинки. Все работает отлично. Но совместив код и создав некоторые условия работы драйвера, он отказался сотрудничать и ушел в свободное плавание. Прошу ткнуть пальцем на ошибку и дать подзатыльник, если она глупая. Код:
Мотор:
#define LD1 6
#define LD2 7
#define STBY 5
#define PWMA 10
#define PD1 4
#define PD2 3
#define PWMB 9
int mt = 150;
int a = 5;
void setup() {
Serial.begin(9600);
pinMode(PD1, OUTPUT);
pinMode(PD2, OUTPUT);
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT);
digitalWrite(STBY, HIGH);
pinMode(LD1, OUTPUT);
pinMode(LD2, OUTPUT);
pinMode(PWMB, OUTPUT);
}
void loop() {
analogWrite(PWMA, 75);
digitalWrite (LD1, LOW);
digitalWrite (LD2, HIGH);
analogWrite(PWMB, 75);
digitalWrite (PD1, HIGH);
digitalWrite (PD2, LOW);
delay(4000);
digitalWrite (LD1, LOW);
digitalWrite (LD2, LOW);
digitalWrite (PD1, LOW);
digitalWrite (PD2, LOW);
delay(1500);
}
Сервопривод с датчиком:
#include <Servo.h>
Servo sv;
#define echo = 12;
#define trig = 13;
int duration, cm, l, r, pos;
void setup() {
sv.attach(11);
sv.write(90);
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
Serial.begin(9600);
}
void loop() {
scan();
if(cm<50){
eyes();
if (l>r) {
Serial.println("big is l:");
}
if (l<r) {
Serial.println("big is r:");
}
delay(3000);
}
}
void eyes () {
for(pos = 90; pos <= 180; pos ++){
sv.write(pos);
delay(10);
}
scan();
l = cm;
Serial.println(l);
delay(1000);
for(pos <= 180; pos >= 0; pos -=1){
sv.write(pos);
delay(10);
}
scan();
r = cm;
Serial.println(r);
delay(1000);
for(pos >= 0; pos <= 90; pos ++){
sv.write(pos);
delay(10);
}
}
void scan (){
digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
cm = (duration / 2) / 29.1;
Serial.print("Расстояние до объекта: ");
Serial.print(cm);
Serial.println(" см.");
delay(250);
}
Совмещенный код:
#include <Servo.h>
Servo sv;
#define echo 12
#define trig 13
int duration, cm, l, r, pos;
#define LD1 6
#define LD2 7
#define STBY 5
#define PWMA 10
#define PD1 4
#define PD2 3
#define PWMB 9
int mt = 75;
void setup() {
sv.attach(11);
sv.write(90);
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
Serial.begin(9600);
pinMode(PD1, OUTPUT);
pinMode(PD2, OUTPUT);
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT);
digitalWrite(STBY, HIGH);
pinMode(LD1, OUTPUT);
pinMode(LD2, OUTPUT);
pinMode(PWMB, OUTPUT);
}
void loop() {
scan();
if(cm<50){
eyes();
if (l>r) {
// Serial.println("big is l:");
analogWrite(PWMA, 75);
digitalWrite (LD1, LOW);
digitalWrite (LD2, HIGH);
analogWrite(PWMB, 75);
digitalWrite (PD1, HIGH);
digitalWrite (PD2, LOW);
delay(2000);
digitalWrite (LD1, LOW);
digitalWrite (LD2, LOW);
digitalWrite (PD1, LOW);
digitalWrite (PD2, LOW);
delay(1500);
}
if (l<r) {
// Serial.println("big is r:");
digitalWrite (LD1, HIGH);
digitalWrite (LD2, LOW);
digitalWrite (PD1, LOW);
digitalWrite (PD2, HIGH);
analogWrite(PWMA, mt);
analogWrite(PWMB, mt);
delay(2000);
digitalWrite (LD1, LOW);
digitalWrite (LD2, LOW);
digitalWrite (PD1, LOW);
digitalWrite (PD2, LOW);
delay(1500);
}
delay(3000);
}
}
void scan (){
digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
cm = (duration / 2) / 29.1;
Serial.print("Расстояние до объекта: ");
Serial.print(cm);
Serial.println(" см.");
delay(250);
}
void eyes () {
for(pos = 90; pos <= 180; pos ++){
sv.write(pos);
delayMicroseconds(100);
}
scan();
l = cm;
Serial.println(l);
delay(1000);
for(pos <= 180; pos >= 0; pos -=1){
sv.write(pos);
delayMicroseconds(100);
}
scan();
r = cm;
Serial.println(r);
delay(1000);
for(pos >= 0; pos <= 90; pos ++){
sv.write(pos);
delayMicroseconds(100);
}
}
Изменено: