Датчик 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.
И там есть и без библиотеки пример с описанием :
Спасибо !!!