فهرست منبع

compatibility with XIAO

0hotpotman0 3 سال پیش
والد
کامیت
2b2ab1817a
1فایلهای تغییر یافته به همراه57 افزوده شده و 2 حذف شده
  1. 57 2
      Si115X.cpp

+ 57 - 2
Si115X.cpp

@@ -8,6 +8,7 @@
 /**
  * Configures a channel at a given index
  */
+
 void Si115X::config_channel(uint8_t index, uint8_t *conf){
     int len = sizeof(conf);
   
@@ -133,6 +134,7 @@ int Si115X::get_int_from_bytes(uint8_t *data, size_t len){
 
 bool Si115X::Begin(void){
     Wire.begin();
+    // Wire.setClock(400000);
     if (ReadByte(0x00) != 0x51) {
         return false;
     }
@@ -155,6 +157,9 @@ bool Si115X::Begin(void){
 
     uint8_t conf[4];
 
+
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
+
     conf[0] = 0B00000000;
     conf[1] = 0B00000010, 
     conf[2] = 0B00000001;
@@ -166,10 +171,60 @@ bool Si115X::Begin(void){
     conf[2] = 0B00000001;
     conf[3] = 0B11000001;
     Si115X::config_channel(3, conf);
+
+#endif
+
+#if defined(TARGET_RP2040)
+
+    conf[0] = 0B00000000;
+    conf[1] = 0B00000010,
+    conf[2] = 0B01111000;
+    conf[3] = 0B11000000;
+    Si115X::config_channel(1, conf);
+
+    conf[0] = 0B00000000;
+    conf[1] = 0B00000011,
+    conf[2] = 0B01000000;
+    conf[3] = 0B11000000;
+    Si115X::config_channel(3, conf);
+
+#endif
+
     return true;
 
 }
 
+#if defined(TARGET_RP2040)
+
+uint16_t Si115X::ReadHalfWord(void) {
+    Si115X::send_command(Si115X::FORCE);
+    uint8_t data[3];
+    data[1] = Si115X::read_register(Si115X::DEVICE_ADDRESS, Si115X::HOSTOUT_1, 1);
+    data[2] = Si115X::read_register(Si115X::DEVICE_ADDRESS, Si115X::HOSTOUT_2, 1);
+
+    return data[2] * 256 + data[1]; //* 256 + data[1];
+}
+
+float Si115X::ReadHalfWord_UV(void) {
+    Si115X::send_command(Si115X::FORCE);
+    uint8_t data[3];
+    data[1] = Si115X::read_register(Si115X::DEVICE_ADDRESS, Si115X::HOSTOUT_1, 1);
+    data[2] = Si115X::read_register(Si115X::DEVICE_ADDRESS, Si115X::HOSTOUT_2, 1);
+    return ((data[2] * 256 + data[1])/3)*0.0012;
+}
+
+uint16_t Si115X::ReadHalfWord_VISIBLE(void) {
+    Si115X::send_command(Si115X::FORCE);
+    uint8_t data[3];
+    data[1] = Si115X::read_register(Si115X::DEVICE_ADDRESS, Si115X::HOSTOUT_1, 1);
+    data[2] = Si115X::read_register(Si115X::DEVICE_ADDRESS, Si115X::HOSTOUT_2, 1);
+    return (data[2] * 256 + data[1])/3; 
+}
+
+#endif
+
+#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
+
 uint16_t Si115X::ReadHalfWord(void) {
     Si115X::send_command(Si115X::FORCE);
     uint8_t data[3];
@@ -196,6 +251,7 @@ uint16_t Si115X::ReadHalfWord_VISIBLE(void) {
     return (data[0] * 256 + data[1])/3; 
 }
 
+#endif
 
 uint8_t Si115X::ReadByte(uint8_t Reg) {
     Wire.beginTransmission(Si115X::DEVICE_ADDRESS);
@@ -203,5 +259,4 @@ uint8_t Si115X::ReadByte(uint8_t Reg) {
     Wire.endTransmission();
     Wire.requestFrom(Si115X::DEVICE_ADDRESS, 1);
     return Wire.read();
-}
-
+}