Примеры кода на Basic Plus

Примеры кода можно редактировать прямо на странице, для переноса интересующего фрагмента в CLEV3R просто выделите и скопируйте его. Чтобы выделить весь код, поставьте курсор в любую строку и нажмите комбинацию Ctrl+A. Содержание интерактивное — жмёте на нужный пункт и добрый джинн перенесет вас куда надо 😉

Содержание:

  1. Набор функция для эмуляции двумерного массива
  2. Работа с датчиком HiTechnic Color Sensor V2
  3. Конвертация цветового пространства RGB — HSV

Набор функция для эмуляции двумерного массива
' !!! В ДАННОМ ПРИМЕРЕ ОТСУТСТВУЮТ КАКИЕ-ЛИБО ПРОВЕРКИ НА ПРЕДМЕТ ВЫХОДА ЗА ПРЕДЕЛЫ МАССИВА !!!
matrix = -1

' Создаём эмулятор двумерного массива
Matrix_Create(35, 4, 1, matrix)

' Для проверкиа запишем во вторую строку 4-е элемента
Matrix_Write(matrix, 1, 0, 100500)
Matrix_Write(matrix, 1, 1, 100501)
Matrix_Write(matrix, 1, 2, 100502)
Matrix_Write(matrix, 1, 3, 100503)

' Теперь запишем третью строку целиком
a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 4
Matrix_WriteRow(matrix, 2, a)

' Прочитаем в переменную size размер одной строки
Matrix_OneRowSize(matrix, size)

' Прочитаем вторую строку целиком в массив arr
Matrix_ReadRow(matrix, 1, arr)

' Выведем на экран элементы второй строки
Matrix_OneRowSize(matrix, size)
LCD.Clear()
For i = 0 To size - 1 Step 1
  LCD.Text(1, 20, 20 * i, 2, arr[i])
EndFor
LCD.Update()
Program.Delay(5000)

' Прочитаем третью строку целиком в массив arr
Matrix_ReadRow(matrix, 2, arr)

' Выведем на экран элементы третьей строки
LCD.Clear()
For i = 0 To size - 1 Step 1
  LCD.Text(1, 20, 20 * i, 2, arr[i])
EndFor
LCD.Update()
Program.Delay(5000)

' Запишем значение в индекс [10,3]
Matrix_Write(matrix, 10, 3, 103)

' Прочитаем в переменную value единичное значение из индекса [10,3]
Matrix_Read(matrix, 10, 3, value)

' Выведем на экран значение из индекса [10,3]
LCD.Clear()
LCD.Text(1, 20, 20, 2, value)
LCD.Update()
Program.Delay(5000)

Function Matrix_Create (in number rows, in number columns, in number value, out number handle)
  size = rows * columns + 2
  handle = Row.Init(size, value)
  Row.Write(handle, 0, rows)
  Row.Write(handle, 1, columns)
EndFunction

Function Matrix_Read (in number handle, in number r, in number c, out number value)
  rowSize = Row.Read(handle, 1)
  value = Row.Read(handle, rowSize * r + c + 2)
EndFunction

Function Matrix_Write (in number handle, in number r, in number c, in number value)
  rowSize = Row.Read(handle, 1)
  Row.Write(handle, rowSize * r + c + 2, value)
EndFunction

Function Matrix_ReadRow (in number handle, in number r, out number[] arr)
  rowSize = Row.Read(handle, 1)
  For i = 0 To rowSize - 1 Step 1
    arr[i] = Row.Read(handle, rowSize * r + i + 2)
  EndFor
EndFunction

Function Matrix_WriteRow (in number handle, in number r, in number[] arr)
  rowSize = Row.Read(handle, 1)
  For i = 0 To rowSize - 1 Step 1
    Row.Write(handle, rowSize * r + i + 2, arr[i])
  EndFor
EndFunction

Function Matrix_OneRowSize (in number handle, out number rowSize)
  rowSize = Row.Read(handle, 1)
EndFunction

Function Matrix_RowsCount (in number handle, out number rowsCount)
  rowsCount = Row.Read(handle, 0)
EndFunction
Работа с датчиком HiTechnic Color Sensor V2
'2020 © ATOMo, http://atomorobotics.ru
'Reading RGB from HT Color Sensor V2

'включаем режим WBGR для HiTechnic Color Sensor V2, порт 1
Sensor.SetMode(1,5) 
Program.Delay(100)

'считываем массив из 4-х цветных компонент
WBGR=Sensor.ReadRaw(1,4)

'выводим результат замера на экран
LCD.Clear()
LCD.Write(10,0,WBGR[0]+" white") 
LCD.Write(10,10,WBGR[1]+" blue") 
LCD.Write(10,20,WBGR[2]+" green") 
LCD.Write(10,30,WBGR[3]+" red") 
Buttons.Wait()
Конвертация цветового пространства RGB — HSV
'2020 © ATOMo, http://atomorobotics.ru
'RGB to HSV conversion

'инициализация компонент R, G и B (вместо 255 подставьте требуемые значения из диапазона 0-255)
r=255
g=255
b=255

if r>255 then
r=255
elseif g>255 then
g=255
elseif b>255 then  
b=255  
endif
hue=0
sat=0
val=0

max=math.max(r,g)
max=math.max(max,b)
min=0
val=max/2.56
if val=0 then
hue=-1
sat=-1
endif

r=r/max
g=g/max
b=b/max
max=math.max(r,g)
max=math.max(max,b)
min=math.min(r,g)
min=math.min(min,b)
sat=(max-min)*100
if sat=0 then
hue=-1
endif

r=(r-min)/(max-min)
g=(g-min)/(max-min)
b=(b-min)/(max-min)
max=math.max(r,g)
max=math.max(max,b)
min=math.min(r,g)
min=math.min(min,b)

if max=r then
hue=0.0+60.0*(g-b)
if hue<0.0 then
hue=hue+360.0
endif
elseif max=g then
hue=120.0+60.0*(b-r)
else
hue=240.0+60.0*(r-g)
endif

'итоговые значения H, S и V
h=math.round(hue)
s=math.round(sat)
v=math.round(val)