Официальный сайт компании Arduino по адресу arduino.cc
Сервопривод
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 21/05/2017 - 20:16
Я хочу сделать сервопривод на atmega8a-au. Накидал программу,
const int PWMin = 7;
const int encoder = A0;
const int motor1 = 5;
const int motor2 = 3;
int signal;
int digr;
const int center = 255;
int E;
int Eold = 0;
int D;
int digress;
int Errold = 0;
const int kD = 1;
void setup()
{
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
pinMode(encoder, INPUT);
pinMode(PWMin, INPUT);
}
void loop()
{
signal = pulseIn(PWMin, HIGH, 20);
if(signal = 0)
{
digr = analogRead(encoder);
E = digr-center;
D = (E - Eold)*kD;
Eold = E;
if(D > 0)
{
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
delay(1);
}
else
{
digitalWrite(motor1, LOW);
digitalWrite(motor2, HIGH);
delay(1);
}
if(D = 0)
{
digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);
delay(1);
}
}
else
{
digress = signal-900;
if(digress < 0)
{
goto end;
}
digress = map(digress, 0, 1199, 0, 511);
digr = analogRead(encoder);
E = digr-digress;
D = (E - Errold)*kD;
Errold = E;
if(D > 0)
{
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
delay(1);
}
if(D < 0)
{
digitalWrite(motor1, LOW);
digitalWrite(motor2, HIGH);
delay(1);
}
if(D = 0)
{
digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);
delay(1);
}
}
end:;
}
Подскажите, это будет работать (если подкалибровать цифры) или нет? Если нет, подскажите пожалуйста что нужно сделать.
Нет, это не будет работать.
А сделать нужно много чего. Нужно не "накидать программу", а сначала изучить язык, а потом написать.
Пока же, там слишком много чего... ну. например, что по Вашему делает вот такая конструкция?
Сильно подозреваю, что вовсе не то, что Вы предполагали.
И да, кстати, вставляёте пожалуйста код как положено. Даже если бы я захотел порокомментировать все замеченные ошибки. я бы не смог - у Вас элементарно номеров строк нет.
Ну как бы переехала тема в http://arduino.ru/forum/proekty/servoprivod-svoimi-rukami