Ардуино скетч для проверки дозиметра
Ссылка на библиотеку датчика радиации
#include <wire.h> uint8_t data[19]; // Массив принятых данных float temp; // Временная переменная хранения данных uint32_t cnt; void setup() { Wire.begin(); // Инициализация I2C Serial.begin(115200); // Инициализация UART } void loop(){ //--------------------------------------------- Считывание данных ---------------------------------------------// Wire.beginTransmission(0x66); // Старт передачи данных к устройству с адресом 0x66 Wire.write(0x0); // Считывать данные начиная с 0x00 регистра Wire.endTransmission(false); // Перезапустить передачу Wire.requestFrom(0x66, 19); // Старт чтения 19-ти регистров устройства с адресом 0x66 data[0] = Wire.read(); // Чтение регистра №0 data[1] = Wire.read(); // Чтение регистра №1 data[2] = Wire.read(); // Чтение регистра №2 data[3] = Wire.read(); // Чтение регистра №3 data[4] = Wire.read(); // Чтение регистра №4 data[5] = Wire.read(); // Чтение регистра №5 data[6] = Wire.read(); // Чтение регистра №6 data[7] = Wire.read(); // Чтение регистра №7 data[8] = Wire.read(); // Чтение регистра №8 data[9] = Wire.read(); // Чтение регистра №9 data[10] = Wire.read(); // Чтение регистра №10 data[11] = Wire.read(); // Чтение регистра №11 data[12] = Wire.read(); // Чтение регистра №12 data[13] = Wire.read(); // Чтение регистра №13 data[14] = Wire.read(); // Чтение регистра №14 data[15] = Wire.read(); // Чтение регистра №15 data[16] = Wire.read(); // Чтение регистра №16 data[17] = Wire.read(); // Чтение регистра №17 data[18] = Wire.read(); // Чтение регистра №18 Serial.print("0x"); Serial.print(data[0], HEX); // Вывести в порт ID устройства Serial.print(" "); Serial.print(data[1], HEX); // Вывести в порт версию прошивки Serial.print("\t||\t"); temp = ((data[3] << 16)|(data[4] << 8)|data[5])/10.0; // Перевод значения интенсивности излучения (мкр\ч) без фильтрации, оптимально при частоте считывания показаний не более 123 мс Serial.print(temp, 1); // Вывод интенсивности Serial.print("\t"); temp = ((data[6] << 16)|(data[7] << 8)|data[8])/10.0; // Перевод значения интенсивности излучения (мкр\ч) с фильтрацией, оптимально при частоте считывания показаний более 500 мс Serial.print(temp, 1); // Вывод интенсивности Serial.print("\t"); if(data[0]==0x7D) cnt += (data[9] << 8) | data[10]; // Перевод количества импульсов Serial.print(cnt); // Вывод количества импульсов Serial.print("\t"); Serial.print("0x"); Serial.print(data[16], HEX); // Вывести адрес устройства Serial.print("-"); Serial.print(data[17]); // Вывести состояние HV (высоковольтного) генератора, при желании его можно отключать для снижения энерго потребления датчика Serial.print("-"); Serial.print(data[18]); // Вывести значение коэф. чувствительности (при желании настраивается под разный изотоп) Serial.print("\t"); Serial.print(data[12]); Serial.print("|"); Serial.print(data[13]); Serial.print("\t"); Serial.print("\n\r"); //--------------------------------------------- Изменение адреса ---------------------------------------------// if(Serial.available()) // Если по UART пришли данные { uint8_t c = Serial.read(); // Считывание первого принятого байта while(Serial.available()) Serial.read(); // Отбрасывание остальных (если пришли) if(c == '0') // Если принят символ "0" { Wire.beginTransmission(0x66); // Старт передачи данных к устройству с адресом 0x66 Wire.write(0x10); // Номер регистра 0x10 Wire.write(0x46); // Записать в регистр (адреса) 0x46 Wire.endTransmission(); // Завершить передачу } else if(c == '1') // иначе если принят символ "1" (пример включения HV генератора) { Wire.beginTransmission(0x66); // Старт передачи данных к устройству с адресом 0x66 Wire.write(0x11); // Номер регистра 0x11 Wire.write(1); // Записать в регистр 1 Wire.endTransmission(); // Завершить передачу } else if(c == '2') // иначе если принят символ "2" (пример отключения HV генератора) { Wire.beginTransmission(0x66); // Старт передачи данных к устройству с адресом 0x66 Wire.write(0x11); // Номер регистра 0x11 Wire.write(0); // Записать в регистр 0 Wire.endTransmission(); // Завершить передачу } else if(c == '3') // иначе если принят символ "3" (пример установки коэффициента 68) { Wire.beginTransmission(0x66); // Старт передачи данных к устройству с адресом 0x66 Wire.write(0x12); // Номер регистра 0x12 Wire.write(68); // Записать в регистр 68 Wire.endTransmission(); // Завершить передачу } else if(c == '4') // иначе если принят символ "4" (пример установки коэффициента 100) { Wire.beginTransmission(0x66); // Старт передачи данных к устройству с адресом 0x66 Wire.write(0x12); // Номер регистра 0x12 Wire.write(105); // Записать в регистр 105 Wire.endTransmission(); // Завершить передачу } else // иначе { Wire.beginTransmission(0x46); // Старт передачи данных к устройству с адресом 0x46 Wire.write(0x10); // Номер регистра 0x10 Wire.write(0x66); // Записать в регистр (адреса) 0x66 Wire.endTransmission(); // Завершить передачу } } delay(30); }</wire.h>