1

Тема: Приставка из Ардуины

Всем доброго времени суток.

Сразу предупреждаю, что до покупки ардуины паяльник в руках держал всего пару раз, потому и буду сейчас задавать глупые вопросы.

Собственно, хочу сделать приставку CHIP-8. Почитать про нее можно на википедии и хабре.

Чтобы сделать джойстик решил "усовершенствовать" базовый пример с кнопкой. Для 2х кнопок это будет выглядеть следующим образом:
http://blanco.ucoz.ru/Box/2b.png

Соответственно, если я хочу, чтобы на джойстике было 6 кнопок, а не 2, то от него будет идти 6 проводов на каждый пин + 1 на GND + 1 на 5V итого 8. Многовато. + тратим на такую мелкую функцию как нажатие кнопки целый пин.

Возникает вопрос: как сделать все по-человечески?

2

Re: Приставка из Ардуины

Примерно так:
http://mogalkov.ath.cx/button.jpg

Таким способом можно на 1 вывод очень много кнопок повесить (вроде analogRead понимает от 0 до 1024) но для большего количества нужно смотреть с резисторами. Номиналы резисторов совершенно не обязательно такие.
Нажатие кнопки проще не высчитывать а определить тестовым скетчем:

int buttpin0 =2; //номер входа
int buttval0 =0; //результат значения входа
void setup(){Serial.begin(9600);} //включаем порт

void loop(){
buttval0 = analogRead(buttpin0); //снимаем значение со входа
Serial.println(buttval0); //отправляем значение в терминал
delay(3000); //ждем
}

Собственно смотришь в терминале у какой кнопки какое значение buttval0 .

Недостаток у метода 1: одновременное нажатие нескольких кнопок воспринимается как отдельная кнопка (собственно если планируется одновременное нажатие то его также можно протестировать). протестировать

3

Re: Приставка из Ардуины

mogalkov, спасибо :) Если я правильно понял, суть та же, только аналоговый позволяет "различить" сигналы.
Думаю, одновременное нажатие кнопок можно сделать по степеням двойки.

Еще вопрос: из каких соображений выбирается сопротивление R1?

4

Re: Приставка из Ардуины

R1 должен быть больше любого другого. Основная его задача создавать разницу. По сути вся эта конструкция (R1 - S - Rs) это как потенциометр, только не переменный (делитель напряжения).
Если напряжение между землей и аналог_ин = 0 - то значение со входа 0,
Если напряжение между землей и аналог_ин = 5 - то значение со входа 1024.

Проще как я сказал чтобы не считать, если только не хочешь действительно 1024 кнопки ставить, поставить  где то от 10К-100К R1 и подберать остальные с шагом в 1K.

Одновременное нажатие 2х клавиш это как нажатие другой клавиши с резистором Rд где 1/Rд=1/R1+1/R2 (паралельное включение резисторов) по этому если клавиш не очень много, то проще все варианты одновременного нажатия либо перебрать на тесте и использовать, либо просто игнорировать (нажато несколько = не нажато ни одной).

5

Re: Приставка из Ардуины

mogalkov, именно то, что мне нужно. Спасибище :D

6

Re: Приставка из Ардуины

mogalkov пишет:

Недостаток у метода 1: одновременное нажатие нескольких кнопок воспринимается как отдельная кнопка (собственно если планируется одновременное нажатие то его также можно протестировать).

Номиналы резисторов нужно выбирать по степеням 2: 1K, 2K, 4K, 8K, 16K, 32K...
А ещё проще - собрать как бы анти-ЦАП по схеме R/2R.
Тогда нажатие нескольких клавиш одновременно можно будет различать как битовый код.

7

Re: Приставка из Ардуины

Vanyamba,

stasundr пишет:

Думаю, одновременное нажатие кнопок можно сделать по степеням двойки.

Так и сделано :)