Доброго времени суток, уважаемые робототехники! Требуется регулировать скорости 2 моторов, имея направление движения от -100 до 100. Вот код: Код (C++): void setup() { for (int p = 4; p < 8; p++) { pinMode(p, OUTPUT); } //объявляем пины MotorShield digitalWrite(7, HIGH); //левый мотор вперед digitalWrite(4, LOW); //правый мотор вперед int t = 100; //направление робота analogWrite(6, 112.5 + 2.55 * t); //левый мотор скорость = средн. скорость + шаг * направление analogWrite(5, 112.5 - 2.55 * t); //правый мотор скорость = средн. скорость + шаг * направление delay(5000); //ожидание analogWrite(6, 0); // выкл. левый мотор analogWrite(5, 0); //выкл. правый мотор } void loop() {} Но моторы вращаются с одинаковой скоростью! Помогите, пожалуйста. Заранее благодарю.
То есть, в середине Код (C++): analogWrite(6, 367.5); analogWrite(5, -142.5); Это именно то, что вы хотите там видеть?
Возможно, ардуино воспринимает только 1-ю часть выражения и ставит скорость 112.5 Я бы попробовал сделать переменные speed_1 и speed_2 и использовал их Кроме того, http://arduino.ru/Reference/AnalogWrite эти значения должны быть между 0 и 255
Она воспринимает именно усеченную часть от вычисленного, например при значении 367,5 в подпрограмму уйдет 111 Весь смысл автоматической кастрации: 1. 367.5 -> (uint16 DEC) 367 -> (uint16 HEX) 0x16F -> (uint8 HEX) 0x6F -> (uint8 DEC) 111 2. -142,5 -> (uint16 DEC) 65394-> (uint16 HEX) 0xFF72 -> (uint8 HEX) 0x72 -> (uint8 DEC) 114 Так что крутятся моторы все же с разной скоростью Причем, никакого обратного вращения быть не может. В вашем случае нужно менять полярность. Как это делать программно и схемотехнически - отдельный вопрос. Ищите тут http://forum.amperka.ru/threads/h-мост.2610/ Поэтому вот это analogWrite(6, 112.5+2.55* t), при изменении t от 0 до 100 должно быть максимум analogWrite(6, 2.55* t)