arduino ldc1000部分源代码
- 格式:docx
- 大小:19.14 KB
- 文档页数:6
#ifndef LDC1000_CMD_H_#define LDC1000_CMD_H_// LDC COMMANDS#define LDC1000_CMD_REVID 0x00 #define LDC1000_CMD_RPMAX 0x01 #define LDC1000_CMD_RPMIN 0x02 #define LDC1000_CMD_SENSORFREQ 0x03 #define LDC1000_CMD_LDCCONFIG 0x04 #define LDC1000_CMD_CLKCONFIG 0x05 #define LDC1000_CMD_THRESHILSB 0x06 #define LDC1000_CMD_THRESHIMSB 0x07 #define LDC1000_CMD_THRESLOLSB 0x08 #define LDC1000_CMD_THRESLOMSB 0x09 #define LDC1000_CMD_INTCONFIG 0x0A #define LDC1000_CMD_PWRCONFIG 0x0B #define LDC1000_CMD_STATUS0x20 #define LDC1000_CMD_PROXLSB 0x21 #define LDC1000_CMD_PROXMSB 0x22 #define LDC1000_CMD_FREQCTRLSB0x23 #define LDC1000_CMD_FREQCTRMID0x24 #define LDC1000_CMD_FREQCTRMSB0x25// LDC BITMASKS#define LDC1000_BIT_AMPLITUDE 0x18 #define LDC1000_BIT_RESPTIME 0x07 #define LDC1000_BIT_CLKSEL 0x02 #define LDC1000_BIT_CLKPD 0x01 #define LDC1000_BIT_INTMODE 0x07 #define LDC1000_BIT_PWRMODE 0x01 #define LDC1000_BIT_STATUSOSC 0x80 #define LDC1000_BIT_STATUSDRDYB 0x40 #define LDC1000_BIT_STATUSWAKEUP 0x20 #define LDC1000_BIT_STATUSCOMP 0x10#endif /* LDC1000_CMD_H_ */#define RPMAX 0x13 //21.547#define RPMIN 0x3A //3.078//byte proximtyData[2];//byte frequencyData[3];//int proximtyDataMIN=0;//int frequencyDataMIN=0;////unsigned int proximtyDataMAX=0;//unsigned int frequencyDataMAX=0;//float proximtyDataTEMP=0;//float frequencyDataTEMP=0;////float proximty=0;//float frequency=0;//unsigned float RP;//unsigned float L;//float RP;//float L;//float Fext=8000000;const int Response[8]={192,192,192,384,768,1536,3072,6144};void ldcinit(){pinMode(ss,OUTPUT);SPI.begin();SPI.setBitOrder(MSBFIRST);SPI.setDataMode(SPI_MODE0);SPI.setClockDivider(SPI_CLOCK_DIV8);LDC_writeByte(LDC1000_CMD_RPMAX, RPMAX); LDC_writeByte(LDC1000_CMD_RPMIN, RPMIN);LDC_writeByte(LDC1000_CMD_SENSORFREQ,0x94 );LDC_writeByte(LDC1000_CMD_LDCCONFIG, 0x17 );LDC_writeByte(LDC1000_CMD_CLKCONFIG, 0x02 );LDC_writeByte(LDC1000_CMD_INTCONFIG, 0x02 );LDC_writeByte(LDC1000_CMD_THRESHILSB,0x50 );LDC_writeByte(LDC1000_CMD_THRESHIMSB,0x14 );LDC_writeByte(LDC1000_CMD_THRESLOLSB,0xC0 ); LDC_writeByte(LDC1000_CMD_THRESLOMSB,0x12 ); LDC_writeByte(LDC1000_CMD_PWRCONFIG, 0x01 ); // SPI.transfer(0xFF);}byte LDC_readByte(byte dz){byte data;digitalWrite(ss,LOW);dz|=(0x80); //将地址最高位赋1SPI.transfer(dz);data=SPI.transfer(0x00);digitalWrite(ss,HIGH);return(data);}void LDC_readBytes(byte dz,byte *date,int jg){digitalWrite(ss,LOW);dz|=(0x80); //将地址最高位赋1SPI.transfer(dz);for(;jg>0;jg--){*date++=SPI.transfer(0x00);}digitalWrite(ss,HIGH);}void LDC_writeByte(byte dz,byte value){digitalWrite(ss,LOW);dz&=~(0x80); //将地址最高位赋0SPI.transfer(dz);SPI.transfer(value);digitalWrite(ss,HIGH);}void LDC_writeBytes(byte dz,byte *value,int jg){digitalWrite(ss,LOW);dz&=~(0x80); //将地址最高位赋0SPI.transfer(dz);for(;jg>0;jg--)SPI.transfer(*value++);digitalWrite(ss,HIGH);}void LDC_computRPL(){// LDC_readBytes(LDC1000_CMD_PROXLSB,&proximtyData[0],2);// LDC_readBytes(LDC1000_CMD_FREQCTRLSB,&frequencyData[0],3);// proximtyDataMAX = ((unsigned char) proximtyData[1]<<8) | proximtyData [0]; // frequencyDataMAX = ((unsigned char)frequencyData[1]<<8) | frequencyData[0]; // Serial.print("proximtyDataMAX=");// Serial.print(proximtyDataMAX,HEX );// Serial.println(" ");// Serial.print("frequencyDataMAX=");// Serial.print(frequencyDataMAX ,HEX);// Serial.println(" ");// for(int i=0;i<2;i++)// {// Serial.print("pr");// Serial.print(i);// Serial.print("=");// Serial.print(proximtyData[i],HEX);// Serial.print(" ");// }// Serial.println(" ");// for(int i=0;i<3;i++)// {// Serial.print("f");// Serial.print(i);// Serial.print("=");// Serial.print(frequencyData[i],HEX);// Serial.print(" ");// }// Serial.println(" ");byte resptime;byte proximtyData[2];byte frequencyData[3];float RP_MAX=21.547;float RP_MIN=3.078;float Fext=8000000;int c=100; //pfunsigned long frequencyDataTEMP=0,proximtyDataTEMP=0,fsensor=0;float proximty=0, frequency=0,y=0,RP=0,L=0;for (int i=0;i<20;i++){LDC_readBytes(LDC1000_CMD_PROXLSB,&proximtyData[0],2);LDC_readBytes(LDC1000_CMD_FREQCTRLSB,&frequencyData[0],3);proximtyDataTEMP += ((unsigned char)proximtyData[1]<<8) + proximtyData [0];frequencyDataTEMP +=((unsigned char)frequencyData[1]<<8)+ frequencyData[0];// frequencyDataTEMP += ((float)frequencyData[2]<<16(unsigned char)frequencyData[1]<<8) + frequencyData[0];}proximty=proximtyDataTEMP/20;frequency=frequencyDataTEMP/20;// Serial.print("proximty=");// Serial.print(proximty );// Serial.print(" ");Serial.print("frequency=");Serial.print(frequency );Serial.println(" ");// if (proximtyDataTEMP < proximtyDataMIN)// proximtyDataMIN = proximtyDataTEMP;// if (frequencyDataTEMP < frequencyDataMIN)// frequencyDataMIN = frequencyDataTEMP;//// if (proximtyDataTEMP > proximtyDataMAX)// proximtyDataMAX = proximtyDataTEMP;// if (frequencyDataTEMP > frequencyDataMAX)// frequencyDataMAX = frequencyDataTEMP;resptime=LDC_readByte(LDC1000_CMD_LDCCONFIG);resptime&=0x07;y=proximty/32768;// Serial.print("y=");// Serial.print(y);// Serial.print(" ");// Serial.print("RPMAX*RPMIN=");// Serial.print(RPMAX*RPMIN);// Serial.println(" ");// Serial.print("(RP_MIN*(1-y)+RP_MAX*y)=");// Serial.print(RP_MIN*(1-y)+RP_MAX*y);// Serial.println(" ");RP=(RP_MAX*RP_MIN)/(RP_MIN*(1-y)+RP_MAX*y);fsensor=(Fext/frequency)*Response[resptime]/3.0;//计算的谐振频率(Hz) // fsensor/=10000;// L=(4*fsensor*fsensor)/10;//将PI的平方约为9.86// L=1000000/L-2;Serial.print("fsensor=");Serial.print(fsensor);Serial.print(" ");L=c*39.4384*fsensor*fsensor/1000000;L=L/1000000;L=1000000/L; //uhSerial.print("RP=");Serial.print(RP);Serial.print("k");Serial.print(" ");Serial.print("L=");Serial.print(L,10);Serial.print("uh");Serial.println(" ");delay(2000);}。