Примеры кода можно редактировать прямо на странице, для переноса интересующего фрагмента в 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)