Датчик BMP180 Работа без библиотеки
- Войдите на сайт для отправки комментариев
Ср, 14/09/2016 - 17:12
Пытаюсь поработать с датчиком без библиотек .
При компилировании выдает ошибку на readBytes ( неверное преобразование )
#include <Wire.h>
/* #define AC1 0xAA
#define AC2 0xAC
#define AC3 0xAE
#define AC4 0xB0
#define AC5 0xB2
#define AC6 0xB4
#define VB1 0xB6
#define VB2 0xB8
#define MB 0xBA
#define MC 0xBC
#define MD 0xBE */
#define ADDR 0x77
int16_t AC1,AC2,AC3,VB1,VB2,MB,MC,MD;
uint16_t AC4,AC5,AC6;
double c3,c4,b1;
double c5,c6,mc,md;
double x0,x1,x2,y0,y1,y2,p0,p1,p2;
char _error ;
void setup() {
Serial.begin(9600);
Wire.begin();
delay(1000);
}
void loop() {
readInt(0xAA,AC1);
readInt(0xAC,AC2);
readInt(0xAE,AC3);
readUInt(0xB0,AC4);
readUInt(0xB2,AC5);
readUInt(0xB4,AC6);
readInt(0xB6,VB1);
readInt(0xB8,VB2);
readInt(0xBA,MB);
readInt(0xBC,MC);
readInt(0xBE,MD);
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);
Serial.println();
Serial.print("c3: "); Serial.println(c3);
Serial.print("c4: "); Serial.println(c4);
Serial.print("c5: "); Serial.println(c5);
Serial.print("c6: "); Serial.println(c6);
Serial.print("b1: "); Serial.println(b1);
Serial.print("mc: "); Serial.println(mc);
Serial.print("md: "); Serial.println(md);
Serial.print("x0: "); Serial.println(x0);
Serial.print("x1: "); Serial.println(x1);
Serial.print("x2: "); Serial.println(x2);
Serial.print("y0: "); Serial.println(y0);
Serial.print("y1: "); Serial.println(y1);
Serial.print("y2: "); Serial.println(y2);
Serial.print("p0: "); Serial.println(p0);
Serial.print("p1: "); Serial.println(p1);
Serial.print("p2: "); Serial.println(p2);
Serial.print("AC1: "); Serial.println(AC1);
Serial.print("AC2: "); Serial.println(AC2);
Serial.print("AC3: "); Serial.println(AC3);
Serial.print("AC4: "); Serial.println(AC4);
Serial.print("AC5: "); Serial.println(AC5);
Serial.print("AC6: "); Serial.println(AC6);
Serial.print("VB1: "); Serial.println(VB1);
Serial.print("VB2: "); Serial.println(VB2);
Serial.print("MB: "); Serial.println(MB);
Serial.print("MC: "); Serial.println(MC);
Serial.print("MD: "); Serial.println(MD);
delay(1000);
}
void readInt(char address, int16_t &value)
{
unsigned char data[2];
data[0] = address;
if (readByte(data,2))
{
value = (int16_t)((data[0]<<8)|data[1]);
//if (*value & 0x8000) *value |= 0xFFFF0000; // sign extend if negative
return(1);
}
value = 0;
return(0);
}
void readUInt(char address, uint16_t &value)
{
unsigned char data[2];
data[0] = address;
if (readByte(data,2))
{
value = (((uint16_t)data[0]<<8)|(uint16_t)data[1]);
return(1);
}
value = 0;
return(0);
}
void readByte(unsigned char *values, char length){
char x;
Wire.beginTransmission(ADDR);
Wire.write(values[0]);
_error = Wire.endTransmission();
if (_error == 0)
{
Wire.requestFrom(ADDR,length);
while(Wire.available() != length) ;
for(x=0;x<length;x++)
{
values[x] = Wire.read();
}
return(1);
}
return(0);
}
Пытаюсь поработать с датчиком без библиотек .
При компилировании выдает ошибку на readBytes ( неверное преобразование )
Не понял, это Вы нас просто проиформировали? Или нуждаетесь в помощи? Если первое, то "принято к сведению", если второе - копипастите сообщение об ошибке - мы что её угадывать должны?
А так, вообще у Вас в 125 строке написано, что функция readByte является void (перевожу на русский - "не возвращает никакого грёбанного результата"), а в строке 116 Вы проверяеете является ли её результат истиной или ложью! Но, простите, какой результат? Она же void!
Так она у Вас ничего не возвращает или возвращает логическое значение? Вы уж определитесь, а потом пропишите это в программе.
Вот не плохо описано: https://www.sparkfun.com/tutorials/253.
И там есть и без библиотеки пример с описанием :
Спасибо !!!