Программирование гексапода

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем Dan Dan, 2 янв 2020.

  1. Dan Dan

    Dan Dan Нерд

    Здравствуйте! Возникла проблема с программированием ноги гексапода .
    Код (C++):
    #include <Servo.h>
    int Jx = A0;
    int Jy = A1;
    Servo h;
    Servo vo;
    Servo vt;
    void setup()
    {
    h.attach(2);
    vo.attach(3);
    vt.attach(4);
    pinMode(Jx,INPUT);
    pinMode(Jy,INPUT);
    Serial.begin(9600);
    }
    void loop()
    {
    int xx = analogRead(Jx);
    int yy = analogRead(Jy);
    xx = map(xx,0,1023,0,180);
    yy = map(yy,0,1023,0,180);
    Serial.println(yy);
    if(yy > 140)
    {
    for(int y = 10;y < 180; y++)
    {
    h.write(y);
    vo.write(y);
    vt.write(y);    
    Serial.println(yy);
    if(yy > 40 && yy < 140)
    {
    break;
    h.write(y);
    vo.write(y);
    vt.write(y);
    }
    delay(6);
    }
    }
    if(yy < 40)
    {  
    for (int y = 180;y > 10; y--)
    {
    h.write (y);
    vo.write (y);
    vt.write (y);

    Serial.println (yy);
    if(yy > 40 && yy < 140)
    {
    break;
    h.write (y);
    vo.write (y);
    vt.write (y);
    }
    delay(6);
    }
    }
    }
    Хочу, чтобы все сервоприводы останавливались в тот момент, когда джойстик выдает значения в диапазоне от 40 до 140, и с этого же положения продолжили свое движение, когда джойстик выдает какое либо иное значение, но я сделал что-то не правильно , а что именно - не понимаю. Прошу помочь мне понять мою ошибку.
    ЗЫ Значения считываются с джойстика пока только по оси У
     
  2. Daniil

    Daniil Гуру

    Мне кажется вы запутались с фигурными скобками.
    У вас проверка на диапазон от 40 до 140 находится внутри проверки 140/40, т.е. это условие никода не выполняется.
    И еще, у вас есть break, после него разве будет выполняться код?
    Иными словами, yy изменяется только в начале лупа, если мы попали в один из двух ифов, то значит ваше подозрительное условие точно НЕ выполняется.
     
  3. Dan Dan

    Dan Dan Нерд

    Понял свою ошибку! Спасибо вам!