В XOD каждый пин имеет тип данных. Значения данных передаются по линкам между нодами, что позволяет им работать вместе для выполнения задачи.
Это очень похоже на сигналы интегральных схем в электронике, хотя аппаратные сигналы довольно ограничены в отношении того, какие данные они могут переносить. Это просто напряжения со значением где-то между нулевым напряжением и несколькими вольтами. Различные трюки используются для выражения значимых значений, таких как числа. Например, вы можете сопоставить напряжение с величиной в логарифмической шкале, или вы можете интерпретировать напряжение как последовательность из 0 и 1, поступающих с заранее определенной скоростью, а затем преобразовать их в байты, сгруппировав их.
XOD имеет встроенную поддержку различных типов данных - не нужно использовать какие-либо трюки. Например, существуют типы данных, которые содержат произвольные числа, байты, логические значения или текстовые строки.
Возможно, вы знаете, что существуют языки со статической типизацией (C, C ++, Java, Haskell) и языки с динамической типизацией (JS, Python, Ruby). Идут жаркие споры, что лучше.
XOD находится в лагере статической типизации, то есть пин не может иметь сейчас числовое значение, а через пару секунд уже значение текстовой строки. Это позволяет IDE защитить вас от глупых ошибок.
Как упоминалось выше, тип данных является характеристикой пина. Вы можете сказать: «Нода foo
имеет выходной пин OUT
с типом данных Number». Это означает, что пин OUT
имеет числовое значение в каждой ноде foo
. Вы также можете сказать: «Нода foo
имеет входной пин IN1
типа Boolean». Это означает, что нода foo
всегда ожидает, что значение True или False связано с пином IN1
.
Как правило, вы можете связывать только входы и выходы одного и того же типа. Однако некоторые пары разных типов также могут быть связаны. Применяется правило преобразования, известное как casting. Чтобы узнать, какие типы могут быть неявно приведены к ним, см. Типы данных.
Числа повсюду. Тип Number данных используется для передачи показаний датчиков, установки скоростей двигателя, выполнения арифметических вычислений и сравнений и т.д.
Числовые значения в XOD могут быть целыми или дробными числами, положительной и отрицательной бесконечностью или специальным значением NaN (не числа).
Тип номера имеет ограниченную точность со следующими характеристиками:
Основным форматом для числовых значений является 32-битная IEEE 754 плавающая точка.
Вот некоторые ноды, которые вы будете использовать для работы с числами:
Многие ноды используют числа в диапазоне от 0 до 1. Это удобно, если значение обозначает какой-то процент. Например, нода потенциометра использует 0.0 для обозначения крайнего левого положения шайбы, 0,5 для обозначения среднего положения и 1.0 для обозначения крайнего правого положения.
Другим примером является нода светодиода. 0.0 используется для его отключения, 0,33 для испускания яркости 33% и 1,0 для включения его на максимальную яркость.
Некоторые ноды используют диапазоны от -1 до 1. Например, нода двигателя использует -1 для полного обратного хода, -0,2 для 20% назад, 0 для остановки и 1 для полного запуска вперед.
Диапазоны единиц измерения удобны в использовании, но полностью обычны. Нода должна решить, что делать, если входное значение выпадает из диапазона. Обычной практикой является, ограничение диапозона входного значения нод.
Булевы значения могут быть либо True, либо False. В качестве альтернативы вы можете думать о них как о выборе между один/ноль, да/нет, вкл/выкл, высоко/низко.
Логические значения являются вездесущими. Они подходят для применения в простых цифровых датчиках (кнопка нажата или нет?), управления простыми исполнительными механизмами (если реле закрыто?). И несут результаты логических операций (эта температура выше 25 °?).
Ниже приведен короткий список нод, которые вы будете использовать для работы с логическими значениями:
String представляют фрагменты текста, такие как “Hello World!”.
В отличие от некоторых языков, которые предоставляют специальную обработку строк, XOD считает их просто списком байтов. Таким образом, вам нужно управлять кодировкой текста. Вы можете выбрать ASCII, UTF-8 или старую школу CP-1252 для хранения. Лучший выбор зависит от аппаратных модулей и форматов передачи данных, с которыми вы работаете.
В действительности компьютеры не любят текст, но люди его используют. Вы будете использовать текст для синтаксического анализа ввода высокого уровня, например, SMS или твита, а также отображения значений для людей или отправки их через различные веб-службы.
Байты являются фундаментальными строительными блоками низкоуровневых вычислений. Многие аппаратные периферийные устройства посылают или потребляют последовательность байтов для взаимодействия с контроллером. По существу байт представляет собой группу из восьми бит, которые являются либо 0, либо 1.
В XOD байт представляет собой отдельный тип данных, который используется для выполнения операций низкого уровня. Он не может быть непосредственно заменен цифрами, как это происходит на C ++. Вы должны использовать явные ноды преобразования из стандартной xod/bits
библиотеки. Там предоставлены и другие побитовые операционные ноды.
Тип port используется для обозначения физических портов на плате. По историческим причинам термин “port” используется, а не “pin”, чтобы четко различать контакты нод XOD (программное обозначение) и пины проводов (аппаратное обозначение). Вы часто будете видеть пины типа port, когда ноды представляют из себя физические элементы, такие как светодиоды и кнопки.
Значения типа Port могут выглядеть A0
, A3
, D3
, D13
. Для примера, A3
означает порт платы с третьим аналоговым каналом на нем, который обычно печатается на плате, как:“A3”. D3
обозначение означает третий цифровой порт, который обычно печатается на плате , как “D3” или просто “3”.
Значения типа порта не должны менять значения во время выполнения: они должны оставаться постоянными. Другими словами, ваша кнопка не должна физически прыгать от D2
к D10
с момента старта программы. Хотя неизменяемость в настоящее время не проверяется, но она будет проверяться в будущих версиях.
Тип Pulse является особенным, поскольку он фактически не содержит никаких данных. Он используется только для обозначения того, что что-то произошло или что-то должно произойти прямо сейчас.
Импульсы похожи на сигналы синхронизации или прерывания в цифровой электронике, где все, что нас интересует, это моменты, когда сигнал поднимается до Vcc или падает на землю. Они не содержат никакой дополнительной полезной информации.
Импульсный сигнал может сообщить нам, что у нас есть новый TCP-пакет из сети, обнаружена карта NFC или какой-то временной интервал. Мы используем импульсный сигнал для запуска команды отправки SMS или сброса счетчика.
Импульсные сигналы часто сопровождаются другими типами значений на соседних пинах. Значения описывают “что”, в то время как импульс описывает “когда”.
Вот краткий список нод, которые вы часто будете использовать в сочетании с импульсами:
Когда встроенных типов недостаточно, для выражения какого-либо домена, вы можете добавить новые типы в систему типа XOD. Пользовательские типы могут быть композитами других типов или переносить классы C ++.
Учитывайте особые значения типа, такие как черные ящики, которые ничего не могут сделать сами по себе. Автор настраиваемого типа всегда будет помещать некоторые ноды, которые работают с такими значениями для выполнения значимых действий, запроса их данных и разрешения создания или обновления значений.
Прочитайте Определение пользовательских типов чтобы узнать, как вводить свои собственные типы…
Общие типы не являются конкретными типами сами по себе, а являются скорее временными, которые определяют конкретные типы при компиляции программы. У них есть имена t1
, t2
, and t3
.
Общие типы используются, когда нода выполняет операцию над значениями, и не имеет значения, каковы фактические типы. Например, if-else
выдает значения в зависимости от условия. Условие является логическим, но значения и вывод являются общими t1
поскольку нода работает одинаково независимо от фактического типа.
Дополнительные сведения об общих типах см. В разделе Общие ноды