LeJOS: обробка натискань клавіш


Ще одна важлива річ стосовно програмування LeJOS (мабуть, настільки важлива, що її варто було згадати навіть перед обробкою сигналів із сенсорів) – обробка натискань клавіш на самому кубику Mindstorms.

Отже, всього клавіш 6: чотири клавіші напрямку (вгору, вниз, ліворуч, праворуч), ENTER та ESCAPE.  Натискання кожної клавіші генерує певний код; який саме описано у інтерфейсі lejos.hardware.Keys наступним чином:

	public static final int ID_UP = 0x1; //1
	public static final int ID_ENTER = 0x2; //2
	public static final int ID_DOWN = 0x4; //4
	public static final int ID_RIGHT = 0x8; //8
	public static final int ID_LEFT = 0x10; //16
	public static final int ID_ESCAPE = 0x20; //32

Коди натиснутих клавіш можна отримати кількома методами, різниці між якими я, наразі, не побачив: це статичні методи Button.getButtons() та Button.readButtons() – вони обидва повертають ціле число, яке є сумою кодів всіх натиснутих клавіш.

Існує також можливість перевірити чи було натиснуто\відпущено одну конкретну клавішу. Це робиться за допомогою визначених для кожної клавіші методів, які повертають булеве значення, наприклад Button.ESCAPE.isDown() – поверне значення true якщо було натиснуто клавішу ESCAPE.

Це зручно у тому випадку, якщо потрібно перемикати режими робота з клавіатури кубика, або якщо ви, скажімо, хочете написати якийсь тетріс для EV3 – жодних давачів, тільки кубик Mindstorms…

Також клас lejos.hardware.Button дозволяє отримати та задати параметри тонів, що відтворюються при натисканні клавіш. Можна змінювати, скажімо, частоту звуку, його тривалість чи гучність. Можна також керувати підсвіткою клавіатури (для цього застосовується метод Button.LEDPattern(int pattern), який отримує у якості аргументу номер шаблону підсвітки.

Далі невеличкий приклад програми:

import lejos.hardware.Button;

public class ButtonsTest {

	public static void main(String[] args) {
		System.out.println("EV3 Buttons test");
		int keys = 0;
		Button.LEDPattern(1);
		while (keys != 2) {
			Button.waitForAnyPress();
			keys = Button.readButtons();
			System.out.println("Key: " + keys);
			System.out.println("Tone: " + Button.getKeyClickTone(keys));
			Button.LEDPattern(2);
			Button.setKeyClickTone(keys, 1000 + keys * 100);
			if (Button.ESCAPE.isDown()) {
				System.out.println("Escape down!");
				Button.LEDPattern(3);
			}
		}
		System.out.println("Press and release ESCAPE");
		Button.ESCAPE.waitForPressAndRelease();
	}
}

Тут варто звертути увагу ще на одну групу методів, а саме Button.waitForAnyPress() та Button.ESCAPE.waitForPressAndRelease(). Неважко здогадатися що вони дозволяють відстежити натискання будь-якої клавіші, або ж певної клавіші, але при цьому вони призупиняють виконання програми до моменту настання бажаної події (працюють як repeat until keypressed у Turbo Pascal 🙂 ). Це корисно якщо хочете аби програма не закінчувалася мовчки, а видала якесь повідомлення на прощання 🙂

Почитайте ще оце:

Залиште коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *