Джойстик

Тема в разделе "Микроконтроллеры AVR", создана пользователем Беженарь Миша, 29 янв 2015.

  1. Пожалйста расскажите как работает джойстик. ( как можно проще )
    Приведите пример кода (простой и чтобы было объяснение кода) связанный с джойстком,и покажите схему
    Зараннее благодарен.:)
     
  2. geher

    geher Гуру

    Какой именно джойстик?
    Примерно такой?
    Или тот, что к компьютеру (или приставке) подключается?

    Если брать общее, то обычно это делается так: две оси, на каждой по потенциометру, данные с потенциометров формируют аналоговый сигнал, показывающий отклонение джойстика.

    Еще иногда джойстиком называют устройство из четырех кнопок, но кнопки - они кнопки и есть.
     
  3. geher

    geher Гуру

    Если джойстик как в Амперке, то могу предложить такой пример.
    Он по изменению положения джойстика формирует команду для передачи по последовательному порту и выводит передаваемые значения на дисплей от телефона Nokia.

    Код (Text):

    //Изменение положения джойстика по оси "вперед-назад", на который реагирует скетч
    #define STOPZONE_SPEED 12
    //Изменение положения джойстика по оси "влево-вправо", на который реагирует скетч
    #define STOPZONE_DIR 12

    #include <PCD8544.h>

    signed int speedM; //передаваемое значение скорости
    signed int diff;         // передаваемое значение разницы в скорости между правым и левым моторами
    static PCD8544 lcd(3,9,10,11);

    void setup()
    {
      Serial1.begin(57600);
      lcd.begin(84, 48);
      delay(1000);
      lcd.setCursor(0, 0);
      lcd.print("Speed: ");
    }

    void loop()
    {
      signed int newspeedM = analogRead(A1)-512; // превращаем положение джойстика в скорость
      signed int newdiff = 512-analogRead(A0); // превращаем положение джойстика в разность скоростей
    // если положение джойстика  изменилось больше чем на пороговое значение
      if ((abs(newspeedM-speedM)>STOPZONE_SPEED)||
          (abs(newdiff-diff)>STOPZONE_DIR))
      {
        speedM=newspeedM; // запоминаем новую скорость
        diff=newdiff;  // запоминаем новую разницу скоростей
        // формируется команда в последовательный порт
        Serial1.print("C");
        Serial1.print(speedM,DEC);
        Serial1.print(",");
        Serial1.print(diff,DEC);
        Serial1.print(",");
        // данные выводятся на дисплей
        lcd.setCursor(0, 0);
        lcd.print("Speed: ");
        lcd.setCursor(52, 0);
        lcd.print(speedM);
        lcd.print("    ");
        lcd.setCursor(0, 1);
        lcd.print("Diff:  ");
        lcd.setCursor(52, 1);
        lcd.print(diff);
        lcd.print("    ");
        delay(50);
      }
    }
    Подключается джойстик к двум аналоговым пинам (в этом случае A0 - влево-вправо и A1 - вперед-назад)
    Еще у этого джойстика есть кнопка, но я ее не задействовал. Но она просто кнопка и есть. Цепляется к любому цифровому пину.
     
    Беженарь Миша нравится это.