我想要一些问你们问题。
我正试图从覆盆子pi获取当前传感器'ina219'的数据。我试图用c ++获取数据,但是当我尝试使用python模块时,数据是不同的
这个数据是尝试的,以下是来自python脚本的数据
value:6912
value:10496
value:6912
value:6912
value:6912
value:10496
value:6912
value:3584
value:3584
value:-3329
value:0
value:14080
value:6912
value:6912
value:6912
value:3584
value:14080
value:14080
value:0
value:0
value:0
value:3584
value:3584
value:3584
value:6912
value:10496
value:10496
value:10496
value:10496
bus current:-0.695 mA
bus current:-0.598 mA
bus current:-0.598 mA
bus current:-0.598 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.598 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.598 mA
bus current:-0.598 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.598 mA
bus current:-0.598 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.695 mA
bus current:-0.598 mA
我无法想象这是什么问题。有没有人成功获得带有覆盆子pi的传感器数据作为C ++?如果有,请帮助我...以下代码是当前传感器的c ++代码
uint16_t cal, config;
float r_shunt,current_lsb,power_lsb;
void configure(int fd);
void calibrate(int fd,float shunt_val, float v_shunt_max, float v_bux_max, float i_max_expected);
int main(){
int fd;
int16_t result;
unsigned char buffer[100];
fd = wiringPiI2CSetup(0x40);
configure(fd);
calibrate(fd, 0.1 , 0.2 , 32, 2);
while(1){
result = wiringPiI2CReadReg16(fd, 0x04);//0x02);
if(result == -1)
cout<<"Error. Error is:"<<errno<<endl;
else
cout<<"value:"<<result<<endl;//*current_lsb<<endl;
}
return 0;
}
void configure(int fd){
config = 0;
//config |= (RANGE_32V<<BRNG | GAIN_8_320MV<<PG0 | ADC_12BIT << BADC1 | ADC_12BIT << SADC1 | CONT_SH_BUS);
config |= (1<<13 | 3<<11 | 3<<7 | 3 << 3 | 7);
int result = wiringPiI2CWriteReg16(fd, 0x00,config);
if(result == -1)
cout<<"Error, is :"<<errno<<endl;
}
void calibrate(int fd,float shunt_val, float v_shunt_max, float v_bux_max, float i_max_expected){
uint16_t digits;
float min_lsb,swap;
r_shunt = shunt_val;
min_lsb = i_max_expected / 32767;
current_lsb = min_lsb;
digits = 0;
while(current_lsb > 0.0){
if((uint16_t)current_lsb /1){
current_lsb = (uint16_t) current_lsb +1;
current_lsb /= pow(10,digits);
break;
}else{
digits++;
current_lsb *= 10.0;
}
};
swap = (0.04096)/(current_lsb*r_shunt);
cal = (uint16_t)swap;
power_lsb = current_lsb *20;
int result = wiringPiI2CWriteReg16(fd, 0x05,cal);
if(result == -1)
cout<<"Error, is:"<<errno<<endl;
}
我看到了几个可能的差异:
wiringPiI2CReadReg16(fd,0x00)
之前和之后使用configure(fd);
转储配置寄存器(地址0x00)以识别任何差异result = wiringPiI2CReadReg16(fd, 0x04);
。它是否在python脚本中以相同的方式完成?
在连续请求数据时识别传感器行为(是否重复相同的测量?)。您应该考虑以较低的速率请求数据。
如果采样率与python脚本不同,则由于信号可能有噪声而具有不同的测量值是正常的。