Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
Mam taki mały problem, o ile czujnik podłączony wszystko gra, ale jak odłączony (np.uszkodzony) zawiesza mi cały program i nie wiem czy to po stronie Wire.h czy Adafruit_BMP085.h (zmieniałem juz na SFE_BMP180) na pewno nie w moim kodzie bo przykłady to samo nie wiem jak to sprawdzić w której bibliotece jest błąd.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 71
Liczba wątków: 2
Dołączył: Oct 2018
Reputacja:
1
Pokaz kod.
Wysłane z mojego SM-G950F przy użyciu Tapatalka
Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
W bibliotekach Arduino to jest normalne zachowanie, szczególnie od Adafruit, ich biblioteki bardzo często to dema mające pokazać funkcjonalność sprzętu przez nich sprzedawanego. Można to bardzo łatwo naprawić, znajdź sobie I2C scanner, zobacz jak jest sprawdzana obecność "czegoś" pod danym adresem na I2C, za każdym razem zanim zapytasz czujnik sprawdź czy on w ogóle jest na magistrali. Poza tym biblioteka pewnie strzela requeset o dane i czeka sobie w nieskończoność na odpowiedź, to też powinieneś sobie oprogramować. Co prawda coś jest na magistrali więc pytasz, nie ma odpowiedzi w wyznaczonym czasie to wracasz do głównego programu i coś robisz z tą informacją.
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
16-02-2019, 19:38
(Ten post był ostatnio modyfikowany: 16-02-2019, 19:38 przez Jarewa0606.)
no np taki kod
Kod:
#include <Wire.h>
#include <Adafruit_BMP085.h>
/***************************************************
This is an example for the BMP085 Barometric Pressure & Temp Sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> https://www.adafruit.com/products/391
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
// Calculate altitude assuming 'standard' barometric
// pressure of 1013.25 millibar = 101325 Pascal
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
// you can get a more precise measurement of altitude
// if you know the current sea level pressure which will
// vary with weather and such. If it is 1015 millibars
// that is equal to 101500 Pascals.
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(101500));
Serial.println(" meters");
Serial.println();
delay(500);
}
A to problem
https://scr.hu/djjaKk7
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 880
Liczba wątków: 19
Dołączył: Jun 2018
Reputacja:
42
Tak ale nawet gdy usunę tą linijkę a dam samo bmp.begin() w setup... To później w loop każde odwołanie do tego czujnika kończy się tak samo... Resetem a nawet zawieszeniem. Wiec zrobie tak jak pisałeś wcześniej ic2 skaner komendą Wire.beginTransmission(address); adres juz znam mam nadzieje że adres się nie zmienia i jest stałą wartością.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Liczba postów: 2,368
Liczba wątków: 0
Dołączył: Oct 2017
Reputacja:
240
To zaproponowany pomysł jako metoda uniwersalna, ale z Twojego kodu jasno wynika, że wynik działania bmp.begin() zwraca 0 gdy nie zainicjuje tego czujnika, wartość z tej funkcji można przypisać do zmiennej JESTCZUJNIK i potem wszystko co związane z czujnikiem uzależnić if (JESTCZUJNIK) {to coś z tym dalej rób} else {zrób kod alternatywny gdy czujnika nie ma}. Może w tej bibliotece jest więcej zabezpieczeń, przejrzyj słowa kluczowe, plik nagłówkowy i ewentualnie same funkcje w *.cpp. Może też być tak, że w już w trakcie działania czujnik zniknie, to biblioteka się wyłoży i sposób ze sprawdzaniem po adresie zadziała lepiej, można też wtedy zrobić reset tym while(1) i po ponownym uruchomieniu funkcja begin już ustawi tak zmienną JESTCZUJNIK by się to nie wieszało.