Я пытаюсь создать функцию обратного вызова и отобразить параметры в функции цикла без инициализации глобальной переменной.
#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);
}
}
Я не могу получить свои значения для функции цикла из-за неправильной реализации функции.Мне нужно ваше предложение, чтобы сделать такое решение или любой другой способ, который будет полезен для создания функции обратного вызова.