6-контактный джойстик подключение
- Войдите на сайт для отправки комментариев
Ср, 17/08/2016 - 10:13
Доброго времени суток.
Приобрёл 6-канальный микро-джойстик для печатной платы, данный джойстик поддерживает 5 направлений (верх, них, право, лево, нажатие). Собственно вопрос, как его подключить и как считывать положение и нажатие ?
С двух сторон джойстик имеет по 3 контакта
Мультиметр имеется? Прозвоните ноги джойстика в разных положениях и будете знать. Если нет мультиметра, прозвоните "батарейкой с лампочкой". Но мультиметр лучше. Наверняка у джойстика есть промежуточные положения, там лучше сопротивление мерять.
нема там промежуточных. четыре контакта направление, один кнопка и один масса для всех.
Ну, тогда и батарейки с лампочкой хватит.
Проверил джойстик вольтметром с пищалкой, действительно - пять контактов это контакты положения, а шестой - земля. При изменении положения джойстика, земля и один их контактов замыкаются. Переключение джойстика происходит по диагонали (красные стрелки на рисунке).
Как теперь подключить этот джойстик к ардуине ? Если я не ошибаюсь, к обычной кнопке подводится 5 В, которые выдают высокий уровень на цифровом пине при нажатии, но в эом джойстике нет вывода для питания.
Нашел в интернете схему с резисторами, но мне бы что нибудь без них, готов задействовать любое количество выводов микросхемы
Как теперь подключить этот джойстик к ардуине ?
Ну, Вы же сами написали ...
пять контактов это контакты положения, а шестой - земля.
Если для Вас резисторы более ценный товар, чем пины, так нет ничего проще.
Выделяете пять пинов. Ставите им режим
и к этим пинам подключаете пиновые выводы джойстика.
Землю джойстика - на землю ардуины.
Когда направление не нажато - на пине HIGH, когда нажато - LOW.
Вот и всё.
Выделяете пять пинов. Ставите им режим
и к этим пинам подключаете пиновые выводы джойстика.
Землю джойстика - на землю ардуины.
Когда направление не нажато - на пине HIGH, когда нажато - LOW.
Вот и всё.
Попробовал просто подключить 5-й пин к земле и один пин положения к цифровому входу. Скетч такой:
void setup() { Serial.begin(9600); pinMode(8, INPUT); } void loop() { if(digitalRead(8) == 1) { Serial.println("HIGH"); } else if(digitalRead(8) == 0) { Serial.println("LOW"); } delay(500); }Выдает HIGH или LOW в случайном порядке вне зависимсти от нажатия
const byte colsPins = 5; const byte joyPins[colsPins] = {2, 3, 4, 5, 6}; // к этим пинам подключаются выводы 1-4,6 джойстика. Вывод №5 подключается к GND void setup() { Serial.begin(9600); for (byte i = 0; i < colsPins; i++) pinMode(joyPins[i], INPUT_PULLUP); // задаем подтяжку к внутренним резисторам. pinMode(LED_BUILTIN, OUTPUT); // активируем светодиод на 13-м пине } void loop() { byte keycode = joystick(); // сканируем джойстик и присваиваем переменной номер вектора направления. Если равно 0, то джойстик в центральном положении. digitalWrite(LED_BUILTIN, keycode); // если джойстик не в центральном положении, включаем светодиод if (keycode) Serial.println(keycode); // выводим вектор направления delay(200); } byte joystick() { byte state; for (byte i = 0; i < colsPins; i++) // поочередно смотрим состояния всех пинов из массива { state = !digitalRead(joyPins[i]); if (state > 0) return state; } return 0; }Выдает HIGH или LOW в случайном порядке вне зависимсти от нажатия
Так и должно быть.
Сравните свою строку 3 с той, что я Вам написал. Исправьте ошибку и всё заработает нормально.
Действительно, надо было программно задать подтяжку цифрового пина. Теперь все работает, спасибо!
void setup() { Serial.begin(9600); pinMode(8, INPUT_PULLUP); } void loop() { if(digitalRead(8) == 1) { Serial.println("HIGH"); } else if(digitalRead(8) == 0) { Serial.println("LOW"); } delay(500); }