Скетч для Робота 2w -полная херня или я чайник, а скорее всего и то и другое
- Войдите на сайт для отправки комментариев
Втр, 18/10/2016 - 00:49
ПОМОГИТЕ РАЗОБРАТЬСЯ В СКЕТЧЕ. Скачал из Интернета но какая-то шняга получается / Armuino (GF) --- Smart Robot Car --- // Playlist: https://www.youtube.com/playlist?list=PLRFnGJH1nJiJxoO0woBW6vl_8URTQPhfL // Smart Robot Car: Part 6 - Obstacle Avoidance Prototype Program Test // Video Demo: https://www.youtube.com/watch?v=_XRHTeurU34 #include <Servo.h> #include "NewPing.h" // Pins on the Arduino Sensor Shield v5.0 #define SONAR_SERVO_PIN 3 #define TRIGGER_PIN A0 #define ECHO_PIN A1 #define MAX_DISTANCE 30 // ЧТО ЭТО И ДЛЯ ЧЕГО ЭТО?? NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); Servo myServo; // Motor A [Right Side] const int enA = 10; const int in1 = 9; const int in2 = 8; // Motor B [Left Side] const int enB = 5; const int in3 = 7; const int in4 = 6; const int triggerDistance = 20; // Variables unsigned int time; // to store how long it takes for the ultrasonic wave to come back int distance; // to store the distance calculated from the sensor int fDistance; // to store the distance in front of the robot int lDistance; // to store the distance on the left side of the robot int rDistance; // to store the distance on the right side of the robot char dist[3]; // ЧТО ЭТО ТАКОЕ? И 3 СТРОКИ НИЖЕ char rot[3]; int rotation = 0; String output = "";// ЧТО ЭТО ЗА ЧУДО void setup() { pinMode (TRIGGER_PIN, OUTPUT); pinMode (ECHO_PIN, INPUT); myServo.attach(SONAR_SERVO_PIN); // Attaches the Servo to the Servo Object // set all the motor control pins to outputs pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() { scan(); //Get the distance retrieved fDistance = distance; if(fDistance < triggerDistance){ moveBackwards(255); delay(1000); moveRight(255); delay(300); moveStop(); scan(); rDistance = distance; moveLeft(255); delay(500); moveStop(); scan(); lDistance = distance; if(lDistance < rDistance){ moveRight(255); delay(1000); moveForward(255); } else{ moveForward(255); } } else{ moveForward(255); } } void scan() { int deg = 90; myServo.write(deg); delay(10); time = sonar.ping(); // ЧТО ЭТО ФУНКЦИЯ , ЕСЛИ ДА ТО ГДЕ ОНА ОБЪЯВЛЕНА? И ДЛЯ ЧЕГО ОНА? Предположительно чтение датчика расстояния. Но где параметры ? distance = time / US_ROUNDTRIP_CM;// ГДЕ ОБЪЯВЛЕНА ПЕРЕМЕННАЯ US_ROU...? delay(10); if(distance <= 0){ //НЕ ПОЙМУ что мне даст сравнение переменной с нулем??? distance = triggerDistance; } delay(30); } ПОЛУЧАЕТСЯ, ЧТО ЭТА ФУНКЦИЯ (scan) ВЫПОЛНЯЕТ СЛЕДУЮЩИЕ ДЕЙСТВИЯ : ПОВЕРНУТЬ СЕРВО НА 90 градусов. Вызвать непонятную функцию, ПЕРЕВЕСТИ ДАННЫЕ В САНТИМЕТРЫ. НО Я НЕ ПОЙМУ ГДЕ ДРУГИЕ ДЕЙСТВИЯ ( сканирование соевой стороны , сканирование с правой стороны от робота ) И как я предполагаю для этого нужна функция millis(); void moveForward(int speed) { // turn on motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // turn on motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enA, speed);// где переменная speed? analogWrite(enB, speed); } void moveBackwards(int speed) { // turn on motor A digitalWrite(in1, LOW); digitalWrite(in2, HIGH); // turn on motor B digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enA, speed); analogWrite(enB, speed); } void moveRight(int speed) { // turn on motor A digitalWrite(in1, LOW); digitalWrite(in2, LOW); // turn off motor B digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enA, speed); analogWrite(enB, speed); } void moveLeft(int speed) { // turn on motor A digitalWrite(in1, HIGH); digitalWrite(in2, LOW); // turn off motor B digitalWrite(in3, LOW); digitalWrite(in4, LOW); analogWrite(enA, speed); analogWrite(enB, speed); } void moveStop() { digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); delay(100)
}
}
Ну, скетч, чувствуется, либо сильно недописан, лрбо слегка недопеределан из скетча для другого робота.
У этого, вероятно, сонар стоит на серве, и он может в принципе "крутить головой", но не делает этого: 90 градусов - это "прямо вперед".
А первоначально скетч был написан для робота, у которого сонар прикреплялся жестко к корпусу. Поэтому справа и слева он смотрит не поворотом сонара, а поворотом всего корпуса (строки 62-75).
А объявления недостающих функций ищите в тех файлах, которые подключаете к проекту директивой #include.
Спасибо буду разбираться. А насчёт функций, которые объявлены директивой include , вы имеете ввиду в библиотеке посмотреть?
Спасибо буду разбираться. А насчёт функций, которые объявлены директивой include , вы имеете ввиду в библиотеке посмотреть?
Не важно где, главное - чтобы имя файла совпадало.