سلام این برنامه دستور (int main(void رو تداره اضافه که میکنم اررور میده . باید کدوم قسمت این دستور رو اضافه کنم؟؟
کد:
#include "BMP180.h"
extern volatile uint8_t I2C_MasterBuffer[I2C_PORT_NUM][I2C_BUFSIZE];
extern volatile uint8_t I2C_SlaveBuffer[I2C_PORT_NUM][I2C_BUFSIZE];
extern volatile uint32_t I2C_WriteLength[I2C_PORT_NUM];
extern volatile uint32_t I2C_ReadLength[I2C_PORT_NUM];
int AC1,AC2,AC3,VB1,VB2,MB,MC,MD;
unsigned int AC4,AC5,AC6;
double c5,c6,mc,md,x0,x1,x2,Y0,Y1,Y2,p0,p1,p2;
char BMP180_Init(void) {
double c3,c4,b1;
if (BMP180_I2C_PORT_NUM == 0) {
I2C0_Init(FALSE);
} else if (BMP180_I2C_PORT_NUM == 1) {
I2C1_Init(FALSE);
} else {
I2C2_Init();
}
if (BMP180_I2C_ReadRegister(BMP180_ID_REGISTER) == BMP180_ID) {
if (BMP180_ReadInt(0xAA, &AC1) &&
BMP180_ReadInt(0xAC, &AC2) &&
BMP180_ReadInt(0xAE, &AC3) &&
BMP180_ReadUInt(0xB0, &AC4) &&
BMP180_ReadUInt(0xB2, &AC5) &&
BMP180_ReadUInt(0xB4, &AC6) &&
BMP180_ReadInt(0xB6, &VB1) &&
BMP180_ReadInt(0xB8, &VB2) &&
BMP180_ReadInt(0xBA, &MB) &&
BMP180_ReadInt(0xBC, &MC) &&
BMP180_ReadInt(0xBE, &MD)) {
// All reads completed successfully!
// Compute floating-point polynominals
c3 = 160.0 * pow(2,-15) * AC3;
c4 = pow(10,-3) * pow(2,-15) * AC4;
b1 = pow(160,2) * pow(2,-30) * VB1;
c5 = (pow(2,-15) / 160) * AC5;
c6 = AC6;
mc = (pow(2,11) / pow(160,2)) * MC;
md = MD / 160.0;
x0 = AC1;
x1 = 160.0 * pow(2,-13) * AC2;
x2 = pow(160,2) * pow(2,-25) * VB2;
Y0 = c4 * pow(2,15);
Y1 = c4 * c3;
Y2 = c4 * b1;
p0 = (3791.0 - 8.0) / 1600.0;
p1 = 1.0 - 7357.0 * pow(2,-20);
p2 = 3038.0 * 100.0 * pow(2,-36);
return 1;
}
}
return 0;
}
char BMP180_StartTemperature(void) {
unsigned char data[2], result;
data[0] = BMP180_REG_CONTROL;
data[1] = BMP180_COMMAND_TEMPERATURE;
result = BMP180_I2C_WriteBytes(data, 2);
if (result) {
return 1;
} else {
return 0; // or return 0 if there was a problem communicating with the BMP
}
}
char BMP180_GetTemperature(double *T) {
char result;
double tu, a;
result = BMP180_I2C_ReadBytes(BMP180_REG_RESULT, 2);
if (result) {
tu = (I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][0] * 256.0) + I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][1];
a = c5 * (tu - c6);
*T = a + (mc / (a + md));
}
return result;
}
char BMP180_StartPressure(char oversampling) {
unsigned char data[2], result, delay;
data[0] = BMP180_REG_CONTROL;
switch (oversampling) {
case 1:
data[1] = BMP180_COMMAND_PRESSURE1;
delay = 20;
break;
case 2:
data[1] = BMP180_COMMAND_PRESSURE2;
delay = 30;
break;
case 3:
data[1] = BMP180_COMMAND_PRESSURE3;
delay = 40;
break;
default:
data[1] = BMP180_COMMAND_PRESSURE0;
delay = 10;
break;
}
result = BMP180_I2C_WriteBytes(data, 2);
if (result == I2C_OK)
return delay;
else
return 0; // or return 0 if there was a problem communicating with the BMP
}
char BMP180_GetPressure(double *P, double T) {
char result;
double pu,s,x,y,z;
result = BMP180_I2C_ReadBytes(BMP180_REG_RESULT, 3);
if (result) {
pu = (I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][0] * 256.0) + I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][1] + (I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][2]/256.0);
s = T - 25.0;
x = (x2 * pow(s,2)) + (x1 * s) + x0;
y = (Y2 * pow(s,2)) + (Y1 * s) + Y0;
z = (pu - x) / y;
*P = (p2 * pow(z,2)) + (p1 * z) + p0;
}
return result;
}
double BMP180_Sealevel(double P, double A) {
return (P/pow(1-(A/44330.0),5.255));
}
double BMP180_Altitude(double P, double P0) {
return (44330.0*(1-pow(P/P0,1/5.255)));
}
char BMP180_ReadUInt(unsigned char address, unsigned int *value) {
if (BMP180_I2C_ReadBytes(address, 2) == I2C_OK) {
*value = (((unsigned int)I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][0]<<8) | (unsigned int)I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][1]);
return 1;
}
value = 0;
return 0;
}
char BMP180_ReadInt(unsigned char address, int *value) {
if (BMP180_I2C_ReadBytes(address, 2) == I2C_OK) {
*value = (((int)I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][0]<<8) | (int)I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][1]);
if (*value & 0x8000) *value |= 0xFFFF0000; // sign extend if negative
return 1;
}
value = 0;
return 0;
}
unsigned int BMP180_I2C_WriteRegister(char regAdd, char value) {
I2C_WriteLength[BMP180_I2C_PORT_NUM] = 3;
I2C_ReadLength[BMP180_I2C_PORT_NUM] = 0;
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][0] = BMP180_ADDRESS; // I2C Address
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][1] = regAdd; // Register
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][2] = value; // Configuration port
return I2C_Engine(BMP180_I2C_PORT_NUM);
}
char BMP180_I2C_ReadRegister(char regAdd) {
I2C_WriteLength[BMP180_I2C_PORT_NUM] = 2;
I2C_ReadLength[BMP180_I2C_PORT_NUM] = 0;
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][0] = BMP180_ADDRESS; // I2C Address
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][1] = regAdd; // Register
I2C_Engine(BMP180_I2C_PORT_NUM);
I2C_WriteLength[BMP180_I2C_PORT_NUM] = 1;
I2C_ReadLength[BMP180_I2C_PORT_NUM] = 1;
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][0] = (BMP180_ADDRESS | I2C_READ_BIT); // I2C Address
I2C_Engine(BMP180_I2C_PORT_NUM);
return (char)I2C_SlaveBuffer[BMP180_I2C_PORT_NUM][0];
}
unsigned int BMP180_I2C_WriteBytes(unsigned char *values, char length) {
int i=0;
I2C_WriteLength[BMP180_I2C_PORT_NUM] = (length + 1);
I2C_ReadLength[BMP180_I2C_PORT_NUM] = 0;
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][0] = BMP180_ADDRESS; // I2C Address
for(i=0; i<length; i++) {
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][i+1] = values[i];
}
I2C_Engine(BMP180_I2C_PORT_NUM);
return I2C_Engine(BMP180_I2C_PORT_NUM);
}
unsigned int BMP180_I2C_ReadBytes(char regAdd, char number) {
I2C_WriteLength[BMP180_I2C_PORT_NUM] = 2;
I2C_ReadLength[BMP180_I2C_PORT_NUM] = 0;
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][0] = BMP180_ADDRESS; // I2C Address
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][1] = regAdd; // Register
I2C_Engine(BMP180_I2C_PORT_NUM);
I2C_WriteLength[BMP180_I2C_PORT_NUM] = 1;
I2C_ReadLength[BMP180_I2C_PORT_NUM] = number;
I2C_MasterBuffer[BMP180_I2C_PORT_NUM][0] = (BMP180_ADDRESS | I2C_READ_BIT); // I2C Address
return I2C_Engine(BMP180_I2C_PORT_NUM);
}
/****************************************************************************
End Of File
****************************************************************************/





دیدگاه