• Программирование — это разбиение чего-то большого и невозможного на что-то маленькое и вполне реальное.

Ввод текста на блоке 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 секунд


Поделиться: