• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
BMP180 Library zawiecza cały kod
#1
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ą. 
 
Odpowiedź
#2
Pokaz kod.

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#3
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ą.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
Photo 
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ą. 
 
Odpowiedź
#5
Pewnie uruchamiasz to na jakimś ESP, za reset pośrednio odpowiada ta linijka:
Kod:
if (!bmp.begin()) {
   Serial.println("Could not find a valid BMP085 sensor, check wiring!");
   while (1) {}
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
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ą. 
 
Odpowiedź
#7
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości