這里是我從論壇里看到的主函數代碼,有什么方法可以讓測量的距離從50mm——1200mm變成測量0mm——1200mm
我修改了if(DeviceRangeStatusInternal3==11&&dist3>20&&dist3<1200)里的dist3>20改為dist3>0,測量還是不能從0開始,我有點不明白,希望大佬指點一下
#include "REG51.h"
#include "oled.h"
#include "bmp.h"
#include "intrins.h"
#include "VL53L0X.h"
#include "i2c.h"
#define uchar unsigned char
#define uint unsigned int
uchar gbuf3[16];
uint acnt3;
uint scnt3;
uint dist3;
uchar DeviceRangeStatusInternal3;
sbit K=P1^0;
int zx=0;
int op;
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void delay_ms(unsigned int time)
{
unsigned char
i;
for(i=1; i<=time; i++)
Delay1ms();
}
void date3()
{
uchar val = 0;
uchar vall;
int cnt = 0;
vl53l0x_send3(VL53L0X_REG_SYSRANGE_START, 0x01);
while (cnt < 100)
{
// 1 second waiting time max
delay_ms(10);
val = vl53l0x_read3(VL53L0X_REG_RESULT_RANGE_STATUS);
if (val & 0x01) break;
cnt++;
}
gbuf3[0]=vl53l0x_read3(0x14);
gbuf3[7]=vl53l0x_read3(0x14+7);
gbuf3[6]=vl53l0x_read3(0x14+6);
gbuf3[9]=vl53l0x_read3(0x14+9);
gbuf3[8]=vl53l0x_read3(0x14+8);
gbuf3[11]=vl53l0x_read3(0x14+11);
gbuf3[10]=vl53l0x_read3(0x14+10);
acnt3 = makeuint163(gbuf3[7], gbuf3[6]);
scnt3 = makeuint163(gbuf3[9], gbuf3[8]);
dist3 = makeuint163(gbuf3[11], gbuf3[10]);
DeviceRangeStatusInternal3 = ((gbuf3[0] & 0x78) >> 3);
if(DeviceRangeStatusInternal3==11&&dist3>0&&dist3<1200)
{
OLED_ShowNum(30, 6, dist3, 5, 16);
}
}
int main(void)
{
OLED_Init();
OLED_Clear();
// OLED_ShowCHinese(30,0,1);
// OLED_ShowCHinese(48,0,1);
K=0;
while(1)
{
if(K == 1)
{
zx++;
delay_ms(10);
while(K == 1){
delay_ms(10);
date3();
op=dist3;
OLED_ShowNum(90, 0, op, 4, 16);
}
}
}
}
|