首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Arduino IDE创建I2C光传感器的回调函数

使用Arduino IDE创建I2C光传感器的回调函数
EN

Stack Overflow用户
提问于 2019-03-04 02:07:23
回答 1查看 363关注 0票数 0

我正在尝试创建回调函数并在不初始化全局变量的情况下显示循环函数中的参数。

代码语言:javascript
复制
#include <Wire.h>
#define Addr 0x39

void setup() {
  Wire.begin();
  Serial.begin(115200);
}

void loop()
{

  tmg39931(green, red, blue, cdata, c);
  delay(100);
}

void tmg39931(float green, float red, float blue, float cdata, float c){

   // Start I2C Transmission
  Wire.beginTransmission(Addr);
  // Select Enable register
  Wire.write(0x80);
  // Power ON, ALS enable, Proximity enable, Wait enable
  Wire.write(0x0F);
  // Stop I2C transmission
  Wire.endTransmission();

  // Start I2C Transmission
  Wire.beginTransmission(Addr);
  // Select ADC integration time register
  Wire.write(0x81);
  // ATIME : 712ms, Max count = 65535 cycles
  Wire.write(0x00);
  // Stop I2C transmission
  Wire.endTransmission();

  // Start I2C Transmission
  Wire.beginTransmission(Addr);
  // Select Wait time register
  Wire.write(0x83);
  // WTIME : 2.78ms
  Wire.write(0xFF);
  // Stop I2C transmission
  Wire.endTransmission();

  // Start I2C Transmission
  Wire.beginTransmission(Addr);
  // Select control register
  Wire.write(0x8F);
  // AGAIN is 1x
  Wire.write(0x00);
  // Stop I2C transmission
  Wire.endTransmission();
  delay(300);

  //Reading the values 
  unsigned int data[9];

  // Start I2C Transmission
  Wire.beginTransmission(Addr);
  // Select data register
  Wire.write(0x94);
  // Stop I2C transmission
  Wire.endTransmission();

  // Request 9 bytes of data
  Wire.requestFrom(Addr, 9);

  // Read the 9 bytes of data
  // cData channel LSB, cData channel MSB, Red channel LSB, Red channel MSB
  // Green channel LSB, Green channel MSB, Blue channel LSB, Blue channel MSB, proximity
  if(Wire.available() == 9) 
  {
    data[0] = Wire.read();
    data[1] = Wire.read();
    data[2] = Wire.read();
    data[3] = Wire.read();
    data[4] = Wire.read();
    data[5] = Wire.read();
    data[6] = Wire.read();
    data[7] = Wire.read();
    data[8] = Wire.read();
   }

  // Convert the data
  float cData = data[1] * 256.0 + data[0];
  float red = data[3] * 256.0 + data[2];
  float green = data[5] * 256.0 + data[4];
  float blue = data[7] * 256.0 + data[6];

  float c = data[8];

 // Output data to serial monitor       
//  Serial.print("Green Color Luminance : ");
//  Serial.println(green);
//  Serial.print("Red Color Luminance : ");
//  Serial.println(red)  ;
//  Serial.print("Blue Color Luminance : ");
//  Serial.println(blue) ;
//  Serial.print("InfraRed Luminance : ");
//  Serial.println(cData) ;
//  Serial.print("Proximity of the device : ");
//  Serial.println(c);
  delay(500);
}

}

由于函数的错误实现,我无法接收循环函数的值。我需要你的建议,使这种解决方案或任何不同的方式,这将是有用的回调函数。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54972032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档