Сервопривод

Велимир
Offline
Зарегистрирован: 29.04.2017

Я хочу сделать сервопривод на 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:;
}
Подскажите, это будет работать (если подкалибровать цифры) или нет? Если нет, подскажите пожалуйста что нужно сделать.
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Нет, это не будет работать.

А сделать нужно много чего. Нужно не "накидать программу", а сначала изучить язык, а потом написать.

Пока же, там слишком много чего... ну. например, что по Вашему делает вот такая конструкция?

        if(D = 0)
        {
            digitalWrite(motor1, LOW);
            digitalWrite(motor2, LOW);
            delay(1);
        }

Сильно подозреваю, что вовсе не то, что Вы предполагали.

И да, кстати, вставляёте пожалуйста код как положено. Даже если бы я захотел порокомментировать все замеченные ошибки. я бы не смог - у Вас элементарно номеров строк нет.

Araris
Offline
Зарегистрирован: 09.11.2012

Ну как бы переехала тема в http://arduino.ru/forum/proekty/servoprivod-svoimi-rukami