Примеры кода можно редактировать прямо на странице, для переноса интересующего фрагмента в CLEV3R просто выделите и скопируйте его. Чтобы выделить весь код, поставьте курсор в любую строку и нажмите комбинацию Ctrl+A. Содержание интерактивное — жмёте на нужный пункт и добрый джинн перенесет вас куда надо 😉
Содержание:
- Набор функция для эмуляции двумерного массива
- Работа с датчиком HiTechnic Color Sensor V2
- Конвертация цветового пространства 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)