гайз, ай нид юр хелп!!

Тема в разделе "Arduino & Shields", создана пользователем Lesha, 6 мар 2016.

  1. Lesha

    Lesha Нуб

    Здравствуйте.
    Хочу запилить управление движком от джойстика. слепил код из скетча управления машинкой через nrf24l01. Но не работает
    И не пойму где ошибка. подскажите в чем проблема и как решить)

    Код (C++):

    const int in1 = 7 ;
    const int in2 = 6;
    const int ena = 5;
    const int X_pin = 0; //джой ось Х
    const int Y_pin = 1; // джой ось Y
    const int button = 2; //джой кнопка

    int msg[1];
    int data; //память
    int fspeed; //переменная скорости вперед
    int bspeed; //переменная скорости назад
    int znach_X_pin; //переменная для записи данных с X_pin;
    int znach_Y_pin; //переменная для записи данных с Y_pin;

    void setup() {
    pinMode(in1, OUTPUT);
    pinMode(in2, OUTPUT);
    pinMode(ena, OUTPUT);
    pinMode(button, OUTPUT);
      digitalWrite(button, HIGH);
      Serial.begin(115200);
    }

    void loop() {

    joy();
    //val_1 = analogRead(X_pin),val_1 = map(val_1, 0, 1023, 0, 127),msg[0] = val_1,radio.write(msg, 1);
    znach_Y_pin = analogRead(Y_pin),znach_Y_pin = map(Y_pin, 0, 1023, 0, 255), msg[0] = znach_Y_pin;

    if (msg[0] >=128 && msg[0] <=189)data = msg[0], bspeed = map(data, 255, 201, 0, 255), backward(bspeed);
      if (msg[0] >=201 && msg[0] <=255)data = msg[0], fspeed = map(data, 189, 128, 0, 255), forward(fspeed);
      if (msg[0] >190 && msg[0] <200)data = msg[0], stop();
    }

    void stop()
    {
      analogWrite(ena, 0);
      digitalWrite(in1, LOW);
      digitalWrite(in2, LOW);
      }

    void forward(int fspeed)
    {

      digitalWrite(in1, HIGH);
      digitalWrite(in2, LOW);
      analogWrite(ena, fspeed);
    }

    void backward(int bspeed)
    {

      digitalWrite(in1, LOW);
      digitalWrite(in2, HIGH);
      analogWrite(ena, bspeed);
    }

    void joy()
    {
        Serial.print("switch:  ");
      Serial.print(digitalRead(button));
      Serial.print("\n  ");
      Serial.print("X-axis:   ");
      Serial.print(analogRead(X_pin));
      Serial.print("\n  ");
      Serial.print("Y-axis:   ");
      Serial.print(analogRead(Y_pin));

      Serial.print("\n  ");
      Serial.print("\n  ");
      delay(500);
    }
     
    джой работает, в сериале все окей. но когда двигаешь джой по оси, не отвечает мотор-редуктор. двиг проверял на другом скетче, тоже все окей.

    [​IMG]
     
    Последнее редактирование: 7 мар 2016
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Никогда не пишите операторы через запятую и тем более не показывайте такой код людям.
    map(Y_pin, 0, 1023, 0, 255) - это что?
     
  3. Lesha

    Lesha Нуб

    map(value, fromLow, fromHigh, toLow, toHigh)
    Функция пропорционально переносит значение (value) из текущего диапазона значений (fromLow .. fromHigh) в новый диапазон (toLow .. toHigh), заданный параметрами.
    Y_pin - переменная, в которую записываем положение джойстика по оси ординат, и эту же переменную будем "маштабировать"
    0 - минимальное значение;(джой вниз)
    1023 - максимальное значение;(джой вверх)
    0 - минимальное значение, для двигла;(скорость вращение, т.е не крутится)
    255 - отмаштабированное 1023, тоже для двигла( максимальная скорость вращения двигла)
     
  4. Sindbad

    Sindbad Гик

    И?
    Вы номер пина масштабируете, неужели не увидели после прямой подсказки?
     
  5. Lesha

    Lesha Нуб

    Спасибо) уже мозги не варили, вот и не заметил)
    все работает) но чуть не так) тут уже будет дело с маштабированием)