• Любая программа, которая успешно прошла тестирование, уже морально устарела.

Ввод текста на блоке Lego EV3

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

Экран блока Lewgo EV3

Вид экрана блока во время работы программы

Вы можете скопировать указанный ниже код в IDE MS Small Basic с установленной библиотекой EV3 и подключенным блоком Lego EV3 и запустить:

 

mytext=""

LCD.Clear()

LCD.Text(1, 0, 3, 1, "<= Backspace => Enter")

line[1] = "0123456789."

line[2] = "ABCDEFGHIJK"

line[3] = "LMNOPQRSTUV"

line[4] = "WXYZ - < >"

LCD.Text(1, 0, 16, 2, line[1])

LCD.Text(1, 0, 38, 2, line[2])

LCD.Text(1, 0, 60, 2, line[3])

LCD.Text(1, 0, 82, 2, line[4])

LCD.Rect(1, 0, 103, 178, 25) ' рисуем прямоугольник

col = 6 ' текущий столбец

row = 2 ' текущая строка

x = 81 'x координата выделенного символа 'F'

y = 35 'y координата выделенного символа 'F'

LCD.InverseRect(x, y, 16, 22) 'инвертируем символ 'F'

loop = "True" ' цикл, пока переменная истинна

While loop

Buttons.Wait()

Button = Buttons.GetClicks()

LCD.InverseRect(x, y, 16, 22) ' очистить инверсию символа

If Button = "R" Then

col = 1 + Math.Remainder(col, 11) ' прыжок из столбца 11 к 1

ElseIf Button = "L" Then

col = 11 - Math.Remainder(12 - col, 11) 'прыжок из столбца 1 к 11

ElseIf Button = "U" Then

row = 4 - Math.Remainder(5 - row, 4) ' прыжок со строки 4 к 1

ElseIf Button = "D" Then

row = 1 + Math.Remainder(row, 4) ' прыжок со строки 1 к 4

ElseIf Button = "E" Then

If row = 4 and col > 6 Then

If col = 9 then 'backspace

If mytext <> "" Then

' удалить последний символ из mytext

mytext = Text.GetSubText(mytext, 1, Text.GetLength(mytext) - 1)

Else ' нечего удалять

Speaker.Tone(100, 1000, 1000)

EndIf

ElseIf col = 11 Then 'Enter

Loop = "False" ' не повторять цикл

Else 'col=7,8 или 10 не доступны с строке 4

Speaker.Tone(100, 1000, 1000)

EndIf

Else 'средняя кнопка нажата

If Text.GetLength(mytext) <> 11 Then

mytext = mytext + Text.GetSubText(line[row], col, 1)

Else ' уже введено 11 символов

Speaker.Tone(100, 1000, 1000)

EndIf

EndIf

EndIf

x = -15 + col * 16 ' рассчитать координату x символа для подсвечивания

y = -9 +row*22 ' рассчитать координату y символа для подсвечивания

LCD.InverseRect(x,y,16,22)

LCD.Text(1,1,107,2," ") ' очистить текстовую строку

LCD.Text(1,1,107,2,mytext)

EndWhile

LCD.Clear()

LCD.Text(1,0,16,2,"Here is")

LCD.Text(1,0,38,2,"your text:")

LCD.Text(1,0,82,2,mytext)

Program.Delay(8000) ' отображаем в течении 8 секунд


Поделиться: