![]() |
![]() |
Hardware: Ввод-вывод и сенсоры
|
Hardware: Ввод-вывод и сенсоры
В этом разделе описываются классы, предназначенные для ввода вывода и использования стандартных сенсоров NXT. В NXT есть кнопки для ввода информации, жидко-кристаллический индикатор (ЖКИ, LCD) и маленький динамик для вывода звука. В leJOS NXJ есть необходимые компоненты для работы со всеми этими аппаратными блоками. ЖКИ(LCD)Класс LCD не имеет экземпляров(есть всего лишь один ЖКИ в нашем устройстве NXT), поэтому все методы - статические. ЖКИ может использоваться в текстовом или графическом режимах. Методы класса LCD предназначенные для работы с текстомВ качестве текстового дисплея ЖК-индикатор NXT может отображать 16 символов в ширину и 8 символов в высоту. Позиция задаётся через указание координат (x, y) следующим образом: ![]() x может изменяться от 0 до 15, и y от 0 до 7. Методы для записи в ЖКИ в текстовом режиме следующие:-
Пример:
Обратите внимание: можно также печатать текст на ЖКИ с помощью метода System.out.println(String str). Он прокручивает выведенный на дисплее текст на одну строчку вверх и печатает в самой нижней строке экрана. Также имейте в виду, что по умолчанию ЖКИ обновляется автоматически. Если вы хотите вручную контролировать момент, когда произойдёт обновление информации на ЖКИ, вы можете настроить такое поведение вызовом LCD.setAutoRefresh(0) и затем сами вызывать каждый раз метод LCD.refresh() когда вам нужно обновить содержимое дисплея. Методы класса LCD для вывода графикиВ качестве графического дисплея ЖКИ NXT имеет 100 пикселей (точек) в ширину и 64 пикселя в высоту. Он адресуется через указание координат (x, y) пикселя аналогично текстовым методам: ![]() x меняется от 0 до 99, y - от 0 до 63. Чтоб отобразить графику на ЖКИ, вы можете использовать класс Graphics из пакета javax.microedition.lcdui. Смотрите API класса Graphics (на английском). С помощью этого класса вы можете рисовать линии, прямоугольники, дуги и выводить строчки с возможностью указывать место вывода с точностью до пикселя. Пример:
КнопкиУ класса Button есть четыре эксемпляра (объекта), к которым можно получить доступ через статические поля:
Чтоб проверить, нажата ли кнопка, используйте метод:
Пример:
Чтоб дождаться, когда какая-либо конкретная кнопка будет нажата или отпущена, используйте метод:
Пример:
Чтобы дождаться нажатия любой кнопки, используйте:
button ENTER LEFT RIGHT ESCAPE Code 1 2 4 8 Чтоб указать слушателя для обработки событий какой-либо конкретной кнопки используйте метод:
Чтоб прочитать текущее состояние всех кнопок, используйте метод:
Класс Sound (Звук)Этот класс управляет единственным динамиком, поэтому у него нет экземпляров (объектов) и все его методы статические. Чтоб проиграть единичный тон, используйте
Пример:
Есть два способа проиграть системный звук, первый:
Смыслы кодов такие: code = 0 Короткий гудок Отдельные методы для проигрывания конкретных системных звуков (если вы не помните кодов):
Так же есть метод для того, чтоб воспроизвести отсутствие звука (период задаётся в милисекундах):
В leJOS NXJ также есть методы, которые могут проигрывать 8-битные WAV-файлы:
Возвращаемое значение - это время проигрывания файла в милисекундах или значение< 0 в случае ошибки. Чтоб проиграть музыкальную ноту, используйте метод:
класс BatteryЕсть два статических метода для того, чтоб узнать напряжение на батарее:
Пример:
СенсорыВ комплекте конструктора Lego Mindstorms вместе с "кирпичом" NXT идут четыре типа сенсоров: сенсоры касания, сенсор звука, сенсор света и ультразвуковой сенсор. В leJOS NXJ есть классы, позволяющие эффективно использовать все эти типы сенсоров и многие другие, поставляемыми отдельно от конструктора. Дальше по тексту сами устройства будут называться датчиками, а абстракции, связанные с ними (классы) - сенсорами Датчик должен быть подключен к порту и объект sensor должен знать, к какому порту подключен его датчик. Чтоб указать порт, передайте информацию о номере порта в конструктор сенсора при его создании. Возможные варианты: SensorPort.S1, S2, S3 или S4. Датчик касанияЧтоб использовать сенсор касания, создайте его экземпляр, используя конструктор:
Чтоб узнать, находится ли сенсор в состоянии срабатывания, используйте метод isPressed():
Пример:
Сенсор освещённостиЧтоб использовать сенсор света, создайте его экземпляр, используя конструктор:
Пример:
Датчик звукаЗвуковой сенсор поддерживает два режима: DB и DBA. Эти режимы имеют разную АЧХ (амплитудно-частотную характеристику), поэтому, если вы хотите сделать какое-нибудь предположение о частоте слышимого звука, может иметь смысл задействовать оба режима (переключаясь между ними). У этого класса есть два конструктора:
Можно переключаться между режимами:
Пример использования только режима DB: Этот пример графически показывает, как меняется звук в течение двухсекундного периода.
Датчик ультразвукаЧтоб создать экземпляр, используйте этот конструктор:
Сенсор может работать в двух режимах: непрерывном (обычно работает в этом режиме) и в режиме пинга. В непрерывном режиме сенсор посылает пинги (зондирующие сигналы) так часто, как это возможно, и самый последний результат измерения можно прочитать используя метод:
Пример:
В режиме "пинга" зондирующий сигнал посылается только при вызове метода:
Программа: множественные отраженияНапишите программу, которая показывает расстояния от нескольких отражений в колонку. Программа должна сделать четыре вызова ping(), и показать четыре колонки с результатами, затем дождаться нажатия кнопки и выйти, если была нажата кнопка ESCAPE. Решение |