11. Получение показаний датчиков

Датчики на NXT могут быть аналоговыми или цифровыми.

Для аналоговых датчиков, один из входных контактов передает аналоговые значения, представляющие значение датчика.

Цифровые датчики являются более интеллектуальными и обычно содержат микропроцессор. Датчик общается с NXT используя I2C последовательный протокол связи.
Датчик может быть сконфигурирован как цифровой или аналоговый. Есть интегрированный драйвер устройства для LEGO. Если вы хотите обеспечить свои собственные драйверы устройств для любой существующего или нового датчика, важно установить тип датчика, чтобы не было никаких конфликтов между встроенной системой и драйвером устройств.
Есть четыре типа датчиков, которые являются допустимыми для применения, как цифровые датчики NXT. К ним относятся:
sensorI2CCustomStd

Указывает, что датчик передает показания около 1 байта в миллисекунду.
sensorI2CCustomStd9V

Указывает уровень передаваемого напряжение на датчик.
sensorI2CCustomFast
Указывает повышенный стандарт передачи данных. До сих пор все новые датчики третьей партии, которые были протестированы совместимы с повышенной скоростью обмена, исключение датчик LEGO Sonar, он требует использования стандартной скорости передачи данных.

sensorI2CCustomFast9V

Указывает повышенный уровень передаваемого напряжение на датчик.
При реализации своего драйвера датчика лучше начать с постоянной отправки сообщения I2C для периодического опроса датчика и сохранения результата. В пользовательских приложениях он должен просто получить последний опрос значение.. RobotC делает это очень легко , позволяя пользователю писать программы , а также читать значения «SensorValue«. «SensorValue«-массив используемый для получения значения датчика от внутренних драйверов устройств. Массив показаний необходим, чтобы исключить ошибки датчика.
Указывает количество байт подаваемых в очереди

nI2CBytesReady[i2cScanPort] = 1;

2. Указывает количество повторных попыток опроса датчика

nI2CRetries = 2;
Ссылается на текущее состояние датчика

#define i2cScanPort S1 //указывается порт датчика
TI2CStatus nStatus; //Переменная статуса
byte replyMsg[10];
nStatus = nI2CStatus[i2cScanPort]; //сохраняет состояние датчика на порте S1
if(nStatus != NO_ERR)
{
return false;
}
readI2CReply(i2cScanPort, replyMsg[0], 8); // запрос на 8 байт показаний
if(replyMsg[0] == 0x00)
{
return false;
}
Отправить I2C сообщение на указанный порт датчика.

sendI2CMsg(i2cScanPort, i2cScanDeviceMsg[0], 8);
1/14