Problém s Arduinem - výškoměr
- Liptoor86
- Příspěvky: 127
- Registrován: pon 22.08.2011 18:55
- Bydliště: Praha 5 Nové Butovice
- Kontaktovat uživatele:
Problém s Arduinem - výškoměr
Dobrý den. mám problém s arduinem. Sestavil jsem výškoměr s modulem BMP180 a zápisem na Micro SD card modul. Po přeinstalaci vývojového prostředí mi po zkompilování programu vypíše problém s chybějící knihovnou, když knihovnu nakopíruju do složky s knihovnami, vývojové prostředí i po zkompilování vypíše problém s nedostatkem operační paměti. Na jiném PC problém zmizel, ale objevil se problém s chybějící knihovnou n SD kartu. Prosím o rady, předem děkuji za odpovědi.
Auta: HPI E10 Drift ED, Mini Inferno, Mad Truck
Quadry: QAV250, F450
Quadry: QAV250, F450
Re: Problém s Arduinem - výškoměr
Jaky OS, jaky sketch tam do toho cpes? Jine sketche jdou do dane desky nahrat normalne? Treba blikani ledkou? Sel bych na to vylucovaci metodou.
DX8, DX6i || T-rex 600ESP, 500ESP FL, 450PRO, 450S || Algol, MaxiSwift
- Liptoor86
- Příspěvky: 127
- Registrován: pon 22.08.2011 18:55
- Bydliště: Praha 5 Nové Butovice
- Kontaktovat uživatele:
Re: Problém s Arduinem - výškoměr
OS Windows 7 64bt. sketch je napsaný v pořádku, ale jen v těch knihovnách a nedostatku paměti je problém
(Proram je psaný na Win XP)
#include <SD.h>
/*
* SD card pripojena na SPI:
** MOSI - pin 11
** MISO - pin 12
** CS - pin 4
**SCK pin 13
*/
#include <SD.h>
#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 BMP180;
int CS = 4; // chipselect SD karty
double vyska;
double teplota;
double ZakladniTlak;
double tlak;
char Soubor[]="DATALOG.ARD"; // Nazev souboru na karte
File myFile;
int led = 13;
int pocitadlo;
void setup()
{
pinMode(led, OUTPUT);
pinMode(CS, OUTPUT);
digitalWrite(CS,LOW);
Wire.begin(); // Inicializace TWI
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
// wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
// pinMode(10, OUTPUT);
//++++++++++++++++++++++++++++++++++++++++Inicializace SD
if (!SD.begin(CS)) {
digitalWrite(led, HIGH);
Serial.println("initialization failed!");
return;
}
//Serial.println("initialization done.");
if (!SD.exists(Soubor)) {
//Serial.println("DataLog.ard Neexists.");
// zaloyit soubor
//Serial.println("Creating DataLog.ard...");
myFile = SD.open(Soubor, FILE_WRITE);
myFile.close();
}
// Check to see if the file exists:
if (!SD.exists(Soubor)) {
Serial.println("Soubor se nepodarilo zalozit");
return;
}
//++++++++++++++++++++++++++++++++++++++++ konec Inicializace SD
//++++++++++++++++++++++++++++++++++++++++Inicializace BMP180
myFile = SD.open(Soubor, FILE_WRITE);
if (BMP180.begin())
//Serial.println("BMP180 init success");
myFile.println("Zápis proběhl v pořádku");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
Serial.println("BMP180 init fail (disconnected?)\n\n");
while(1); // Pause forever.
}
// Get the baseline pressure:
getBMP180();
ZakladniTlak = tlak; //Tlak pri zapnuti cidla - bude povazovan za vysku 0m
myFile.print("Základní tlak: ");
myFile.print(tlak,1);
myFile.println(" mb");
myFile.println("Čas Tlak Teplota Výška");
myFile.close();
//++++++++++++++++++++++++++++++++++++++++konec Inicializace ¨BMP 180
}
void loop()
{
pocitadlo++;
getBMP180();
myFile = SD.open(Soubor, FILE_WRITE);
myFile.print(pocitadlo);
myFile.print(" s ");
myFile.print(tlak,2);
myFile.print(" mb ");
myFile.print(teplota,2);
myFile.print(" ºC ");
myFile.print(vyska,1);
myFile.println(" m");
myFile.close();
delay (1000);
}
void getBMP180()
{
char status;
status = BMP180.startTemperature();
if (status != 0)
{
// Ceka na konec mereni
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable Teplota.
// Function returns 1 if successful, 0 if failure.
status = BMP180.getTemperature(teplota);
if (status != 0)
{
// Print out the measurement:
Serial.print("temperature: ");
Serial.print(teplota,2);
Serial.println(" deg C, ");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = BMP180.startPressure(3);
if (status != 0)
{
// Ceka na konec mereni
delay(status);
// Zacatek mereni tlaku
// Vysledek ulozen v promenne tlak
// Mereni vyzaduje predchozi mereni teploty
// Function returns 1 if successful, 0 if failure.
status = BMP180.getPressure(tlak,teplota);
if (status != 0)
{
// Print out the measurement:
Serial.print("absolute pressure: ");
Serial.print(tlak,2);
Serial.print(" mb, ");
/*
// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb
p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
Serial.print("relative (sea-level) pressure: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.0295333727,2);
Serial.println(" inHg");
*/
// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.
vyska = BMP180.altitude(tlak,ZakladniTlak);
Serial.print("relativni vyska: ");
Serial.print(vyska,1);
Serial.print(" meters, ");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
}
(Proram je psaný na Win XP)
#include <SD.h>
/*
* SD card pripojena na SPI:
** MOSI - pin 11
** MISO - pin 12
** CS - pin 4
**SCK pin 13
*/
#include <SD.h>
#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 BMP180;
int CS = 4; // chipselect SD karty
double vyska;
double teplota;
double ZakladniTlak;
double tlak;
char Soubor[]="DATALOG.ARD"; // Nazev souboru na karte
File myFile;
int led = 13;
int pocitadlo;
void setup()
{
pinMode(led, OUTPUT);
pinMode(CS, OUTPUT);
digitalWrite(CS,LOW);
Wire.begin(); // Inicializace TWI
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
// wait for serial port to connect. Needed for Leonardo only
}
Serial.print("Initializing SD card...");
// On the Ethernet Shield, CS is pin 4. It's set as an output by default.
// Note that even if it's not used as the CS pin, the hardware SS pin
// (10 on most Arduino boards, 53 on the Mega) must be left as an output
// or the SD library functions will not work.
// pinMode(10, OUTPUT);
//++++++++++++++++++++++++++++++++++++++++Inicializace SD
if (!SD.begin(CS)) {
digitalWrite(led, HIGH);
Serial.println("initialization failed!");
return;
}
//Serial.println("initialization done.");
if (!SD.exists(Soubor)) {
//Serial.println("DataLog.ard Neexists.");
// zaloyit soubor
//Serial.println("Creating DataLog.ard...");
myFile = SD.open(Soubor, FILE_WRITE);
myFile.close();
}
// Check to see if the file exists:
if (!SD.exists(Soubor)) {
Serial.println("Soubor se nepodarilo zalozit");
return;
}
//++++++++++++++++++++++++++++++++++++++++ konec Inicializace SD
//++++++++++++++++++++++++++++++++++++++++Inicializace BMP180
myFile = SD.open(Soubor, FILE_WRITE);
if (BMP180.begin())
//Serial.println("BMP180 init success");
myFile.println("Zápis proběhl v pořádku");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
Serial.println("BMP180 init fail (disconnected?)\n\n");
while(1); // Pause forever.
}
// Get the baseline pressure:
getBMP180();
ZakladniTlak = tlak; //Tlak pri zapnuti cidla - bude povazovan za vysku 0m
myFile.print("Základní tlak: ");
myFile.print(tlak,1);
myFile.println(" mb");
myFile.println("Čas Tlak Teplota Výška");
myFile.close();
//++++++++++++++++++++++++++++++++++++++++konec Inicializace ¨BMP 180
}
void loop()
{
pocitadlo++;
getBMP180();
myFile = SD.open(Soubor, FILE_WRITE);
myFile.print(pocitadlo);
myFile.print(" s ");
myFile.print(tlak,2);
myFile.print(" mb ");
myFile.print(teplota,2);
myFile.print(" ºC ");
myFile.print(vyska,1);
myFile.println(" m");
myFile.close();
delay (1000);
}
void getBMP180()
{
char status;
status = BMP180.startTemperature();
if (status != 0)
{
// Ceka na konec mereni
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable Teplota.
// Function returns 1 if successful, 0 if failure.
status = BMP180.getTemperature(teplota);
if (status != 0)
{
// Print out the measurement:
Serial.print("temperature: ");
Serial.print(teplota,2);
Serial.println(" deg C, ");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = BMP180.startPressure(3);
if (status != 0)
{
// Ceka na konec mereni
delay(status);
// Zacatek mereni tlaku
// Vysledek ulozen v promenne tlak
// Mereni vyzaduje predchozi mereni teploty
// Function returns 1 if successful, 0 if failure.
status = BMP180.getPressure(tlak,teplota);
if (status != 0)
{
// Print out the measurement:
Serial.print("absolute pressure: ");
Serial.print(tlak,2);
Serial.print(" mb, ");
/*
// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb
p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
Serial.print("relative (sea-level) pressure: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.0295333727,2);
Serial.println(" inHg");
*/
// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.
vyska = BMP180.altitude(tlak,ZakladniTlak);
Serial.print("relativni vyska: ");
Serial.print(vyska,1);
Serial.print(" meters, ");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
}
Auta: HPI E10 Drift ED, Mini Inferno, Mad Truck
Quadry: QAV250, F450
Quadry: QAV250, F450
Re: Problém s Arduinem - výškoměr
Jeste uved, jake je to arduino, s jakym procesorem, SD knihovna je docela slusne narocna na pamet. Ten nedostatek pameti ti to hlasi kde? Pamet RAM pocitace, nebo procesoru arduina? Nejak to z toho popisu nemuzu zjistit 
DX8, DX6i || T-rex 600ESP, 500ESP FL, 450PRO, 450S || Algol, MaxiSwift
- Liptoor86
- Příspěvky: 127
- Registrován: pon 22.08.2011 18:55
- Bydliště: Praha 5 Nové Butovice
- Kontaktovat uživatele:
Re: Problém s Arduinem - výškoměr
Arduino Nano ATmega 328. Vypisuje to problém s PC operační pamětí, ale je to divné protože činí 8 Gb. Problém s nedostatkem RAM je jen po přidání knihovny BMP180
Auta: HPI E10 Drift ED, Mini Inferno, Mad Truck
Quadry: QAV250, F450
Quadry: QAV250, F450
Re: Problém s Arduinem - výškoměr
OK, to meni situaci. Na jinem PC to teda bezi? Mas posledni ide? spravne zvoleny typ desky? Odkud mas tu knihovnu? Je nejaky odkaz? Mas ji umistenou spravne? To proste vypada, ze se podela IDE, kdyz to kompilujes.
Kde se vypise ta chybejici pamet? Ta aplikace pri tom zhavaruje, nebo se to objevi ve stavovem okne?
Kde se vypise ta chybejici pamet? Ta aplikace pri tom zhavaruje, nebo se to objevi ve stavovem okne?
DX8, DX6i || T-rex 600ESP, 500ESP FL, 450PRO, 450S || Algol, MaxiSwift
- Liptoor86
- Příspěvky: 127
- Registrován: pon 22.08.2011 18:55
- Bydliště: Praha 5 Nové Butovice
- Kontaktovat uživatele:
Re: Problém s Arduinem - výškoměr
Chyba se vypíše dole ve stavovem okne jakmile nechám zkontrolovat ,jinak je již 2 nainstalona znova a program pouze vypíše error a program normálně funguje knihovna je stažena
https://learn.sparkfun.com/tutorials/bm ... no-library
Deska je navolena správně na xp se to nahrálo do arduina normálně ale ted to nejsem schopný upravit .
https://learn.sparkfun.com/tutorials/bm ... no-library
Deska je navolena správně na xp se to nahrálo do arduina normálně ale ted to nejsem schopný upravit .
Auta: HPI E10 Drift ED, Mini Inferno, Mad Truck
Quadry: QAV250, F450
Quadry: QAV250, F450
Re: Problém s Arduinem - výškoměr
Posli screenshot nebo to vykopiruj at vime o jakou chybu se jedna
coptery@FrSky X9E, 3.4m Go-3,EPP Spartan,SkySurfX8,SE.5,MPX Extra 300s@Jeti DC-16
- Liptoor86
- Příspěvky: 127
- Registrován: pon 22.08.2011 18:55
- Bydliště: Praha 5 Nové Butovice
- Kontaktovat uživatele:
Re: Problém s Arduinem - výškoměr
]tady
Auta: HPI E10 Drift ED, Mini Inferno, Mad Truck
Quadry: QAV250, F450
Quadry: QAV250, F450
- Liptoor86
- Příspěvky: 127
- Registrován: pon 22.08.2011 18:55
- Bydliště: Praha 5 Nové Butovice
- Kontaktovat uživatele:
Re: Problém s Arduinem - výškoměr
Screen je špatně čitelný ,tady chybové hlášení
Mereni Vysky_cas.ino:11:24:fatal error:SFE_180.h:No such file or directory
compilation terminated
Chyba kompilace
Mereni Vysky_cas.ino:11:24:fatal error:SFE_180.h:No such file or directory
compilation terminated
Chyba kompilace
Auta: HPI E10 Drift ED, Mini Inferno, Mad Truck
Quadry: QAV250, F450
Quadry: QAV250, F450
Re: Problém s Arduinem - výškoměr
Podle mne tam mas neco nekam spatne nakopirovane. To mereni vysky je nejaky sketch, co jsi stahnul, nebo jsi to psal ty podle nejakeho clanku nekde?
Obvykle byva ke sketchi vsechno pribaleno, vcetne knihoven.
Obvykle byva ke sketchi vsechno pribaleno, vcetne knihoven.
DX8, DX6i || T-rex 600ESP, 500ESP FL, 450PRO, 450S || Algol, MaxiSwift
Re: Problém s Arduinem - výškoměr
petrfm píše:Podle mne tam mas neco nekam spatne nakopirovane.
Přesně tak.
V adresáří kde je nainstalované vývojové prostředí pro Arduino má být podadresář libraries (pozn. neplést s podadresářem lib, protože ten je na něco jiného). V podadresáři libraries má být podadresář SFE_BMP180 a v něm soubory SFE_BMP180.h ke stažení viz tento odkaz, SFE_BMP180.cpp ke stažení viz tento odkaz a keywords.txt ke stažení viz tento odkaz.
Ve Windows 7 adresář kde je to nainstalováno obvykle nebývá běžně dostupný pro zápis dokonce ani když má uživatel práva admina a k zápisu bývá potřeba vyšší stupeň oprávnění tzv. super admin. Pro správné oprávnění by měl být jednak přihlášen k účtu s oprávněním administrátora a navíc spustit souborový manažer např. Průzkumníka výběrem položky "Spustit jako správce" ze zobrazeného plovoucího menu přes pravé tlačítko myši po kliknutí na ikoně Průzkumníka. Teprve pak by měl mít Průzkumník právo "super admin", při kterém by mělo jít kopírovat soubory do zmíněného podadresáře. Tu knihovnu se tam nejspíš pokoušel doplňovat s nevhodným oprávněním k zápisu a pak je možné, že se to tam vůbec nezapsalo.
Navíc v tom opisu hlášení se zřejmě spletl. Předpokládám, že namísto "fatal error:SFE_180.h" to vypisuje "fatal error:SFE_BMP180.h", protože SFE_180.h nikde ve zdrojáku deklarováno nemá.
- ross4435897
- Příspěvky: 328
- Registrován: ned 24.10.2010 0:00
- Bydliště: Brno
Re: Problém s Arduinem - výškoměr
podle me spatne nakopcena knihovna ...
Re: Problém s Arduinem - výškoměr
k libraries - je zminim ze cesta na Libraries se da menit, je to v preferences a napr. u navodu na build MegaPirate se to pouzivalo. Proste se Arduino poslalo do Libraries kde byly veci nutne pro MegaPirate.
Proto je vhodne zkontrolovat kam IDE smeruje.
Dalsi moznost je proste naimportovat knihovnu znova podle navodu zde : http://arduino.cc/en/Guide/Libraries
Proto je vhodne zkontrolovat kam IDE smeruje.
Dalsi moznost je proste naimportovat knihovnu znova podle navodu zde : http://arduino.cc/en/Guide/Libraries
coptery@FrSky X9E, 3.4m Go-3,EPP Spartan,SkySurfX8,SE.5,MPX Extra 300s@Jeti DC-16
Re: Problém s Arduinem - výškoměr
Ten program je kompilovateľný, len máš asi zlú knižnicu pre BMP180 v libraries - tá z tvojho programu má mať názov SFE_BMP180 a nie napr. BMP180.
Knižnicu prikladám, u mňa na win7 je v adresári
c:\Users\<win_user>\Documents\Arduino\libraries\SFE_BMP180
svoju cestu "c:\Users\<win_user>\Documents\Arduino" máš v menu -> File -> Preferences -> Sketchbook location
Knižnicu prikladám, u mňa na win7 je v adresári
c:\Users\<win_user>\Documents\Arduino\libraries\SFE_BMP180
svoju cestu "c:\Users\<win_user>\Documents\Arduino" máš v menu -> File -> Preferences -> Sketchbook location
- Přílohy
-
- SFE_BMP180.ZIP
- (10.42 KiB) Staženo 138 x