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