| palagnyukvovan | Дата: Среда, 27.11.2013, 05:23 | Сообщение # 1 |
 1.5 Вольт
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
| Здраствуйте! Создал робота на 4 колесах + камера . К дуине подключена L298N Управление реализовано по Wi FI через роутер WR703N. Написал код на дуину, вьо работает. НО хотелось бы не так. 1 реализовать плавний пуск двигателей. 2 плавное управление камерой, а не рывками. и т.д. код: Код #include <Servo.h> Servo servo1; Servo servo2; const int SERVO1_PIN = 8; const int SERVO2_PIN = 9; const int MAX_POS = 1023; const int MAX_ANGLE = 180;
int incomingByte; void setup() { servo1.attach(SERVO1_PIN); servo2.attach(SERVO2_PIN);
pinMode(2, OUTPUT); // L298N pinMode(3, OUTPUT); // L298N pinMode(4, OUTPUT); // L298N pinMode(5, OUTPUT); // L298N pinMode(6, OUTPUT); // ШИМ pinMode(7, OUTPUT); // ШИМ pinMode(10, OUTPUT); // Сигнал pinMode(11, OUTPUT); // Фары Serial.begin(115200); }
void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); // Установка серво 1 в среднее положение if (incomingByte == '5') { servo1.write(90); } // Установка серво 2 в среднее положение if (incomingByte == '5') { servo2.write(90); } // При нажатой 8 повернуть серво 1 на 180 и при отсуствии возвратить в середину if (incomingByte == '8') { servo1.write(180); delay(150); servo1.write(90); } // При нажатой 2 повернуть серво 1 на 10 и при отсуствии возвратить в середину if (incomingByte == '2') { servo1.write(10); delay(150); servo1.write(90); } // При нажатой 4 повернуть серво 2 на 180 и при отсуствии возвратить в середину if (incomingByte == '4') { servo2.write(180); delay(150); servo2.write(90); } // При нажатой 6 повернуть серво 2 на 10 и при отсуствии возвратить в середину if (incomingByte == '6') { servo2.write(10); delay(150); servo2.write(90); } // При нажатой 7 повернуть серво 1 на 180 и при отсуствии возвратить в середину // При нажатой 7 повернуть серво 2 на 180 и при отсуствии возвратить в середину if (incomingByte == '7') { servo1.write(180); servo2.write(180); delay(150); servo1.write(90); servo2.write(90); } // При нажатой 9 повернуть серво 1 на 180 и при отсуствии возвратить в середину // При нажатой 9 повернуть серво 2 на 10 и при отсуствии возвратить в середину if (incomingByte == '9') { servo1.write(180); servo2.write(10); delay(150); servo1.write(90); servo2.write(90); } // При нажатой 1 повернуть серво 1 на 10 и при отсуствии возвратить в середину // При нажатой 1 повернуть серво 2 на 180 и при отсуствии возвратить в середину if (incomingByte == '1') { servo1.write(10); servo2.write(180); delay(150); servo1.write(90); servo2.write(90); } // При нажатой 3 повернуть серво 1 на 10 и при отсуствии возвратить в середину // При нажатой 3 повернуть серво 2 на 10 и при отсуствии возвратить в середину if (incomingByte == '3') { servo1.write(10); servo2.write(10); delay(150); servo1.write(90); servo2.write(90); } digitalWrite(6, HIGH);// ето в место ШИМ digitalWrite(7, HIGH);// еио в место ШИМ // При нажатой Q двигатся влево передним ходом if (incomingByte == 'Q') { digitalWrite(2, HIGH); digitalWrite(5, HIGH); delay(120); digitalWrite(2, LOW); digitalWrite(5, LOW); } // При нажатой W двигатся вперед if (incomingByte == 'W') { digitalWrite(2, HIGH); digitalWrite(3, HIGH); delay(120); digitalWrite(2, LOW); digitalWrite(3, LOW); } // При нажатой E двигатся вправопередним ходом if (incomingByte == 'E') { digitalWrite(3, HIGH); digitalWrite(4, HIGH); delay(120); digitalWrite(3, LOW); digitalWrite(4, LOW); } // При нажатой A двигатся влево задним ходом if (incomingByte == 'A') { digitalWrite(4, HIGH); digitalWrite(3, HIGH); delay(120); digitalWrite(4, LOW); digitalWrite(3, LOW); } // При нажатой S двигатся назад if (incomingByte == 'S') { digitalWrite(4, HIGH); digitalWrite(5, HIGH); delay(120); digitalWrite(4, LOW); digitalWrite(5, LOW); } // При нажатой D двигатся вправо задним ходом if (incomingByte == 'D') { digitalWrite(5, HIGH); digitalWrite(2, HIGH); delay(120); digitalWrite(5, LOW); digitalWrite(2, LOW); } // При нажатой R посигналить if (incomingByte == 'R') { digitalWrite(10, HIGH); delay(120); digitalWrite(10, LOW); } // При нажатой F включить фари if (incomingByte == 'F') { digitalWrite(11, HIGH); } // При нажатой G виключить фари if (incomingByte == 'G') { digitalWrite(11, LOW); } } }
Добавлено (27.11.2013, 05:23) --------------------------------------------- Можно так реализовать ШИМ, но при отпускании кнопки моторы не останавливаются пока не достигнут значения 256. А надо чтоб останавливались при отпускании кнопки, тоисть надо чтоб был разгон тока тогда когда есть команда. Код void loop() { int value; for(value = 0; value <= 256; value+=5) { digitalWrite(M1,HIGH); digitalWrite(M2, HIGH); analogWrite(E1, value);//PWM Speed Control analogWrite(E2, value);//PWM Speed Control delay(30); } }
Сообщение отредактировал palagnyukvovan - Среда, 27.11.2013, 05:24 |
| |
| |
| Serg | Дата: Среда, 27.11.2013, 19:39 | Сообщение # 2 |
|
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| Ну, судя по программе, у Вас вообще нет кнопок, а все управление происходит с помощью чтения байтов с порта UART. Попробуйте ввести дополнительную переменную-флаг, которая будет сигнализировать о наличии управляющих байтов. Появились байты- установили флаг, прочитали байты. Запустили соответствующую функцию разгона двигателя ШИМ-ом. Как только сбросился флаг- запустили функцию остановки двигателя без ШИМ. Ну как-то так....
|
| |
| |
| palagnyukvovan | Дата: Четверг, 28.11.2013, 03:15 | Сообщение # 3 |
 1.5 Вольт
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
| Да управление идет по UART. Набросайте код а то мне тут ниче не понятно...
|
| |
| |
| Serg | Дата: Четверг, 28.11.2013, 18:05 | Сообщение # 4 |
|
Ампер
Группа: Модераторы
Сообщений: 510
Репутация: 28
Статус: Offline
| Код void loop() { if (Serial.available() > 0) { // если есть принятые байты- если нажата кнопка, то байты идут непрерывно incomingByte = Serial.read();// читаем эти байты и выполняем команды ////тут множество условий проверки байтов (букв A B W E Q R T) if if if ........... ........... ........... } else {// а если нет байтов, если кнопку отпустили ...........//// выполняем функцию торможения двигателей ........... } }
|
| |
| |
| palagnyukvovan | Дата: Пятница, 29.11.2013, 04:21 | Сообщение # 5 |
 1.5 Вольт
Группа: Пользователи
Сообщений: 3
Репутация: 0
Статус: Offline
| Ум.... Спасибо вам за помощь. Интегрируйте пожалуйста свою подсказку в мой код, а то я не справляюсь. Не получается. Спасибо!
|
| |
| |