Pages: [1]   Go Down
Author Topic: Aiuto interfacciale display 2 linee con BMP085  (Read 723 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aiuto ho provato a interfacciare il display due linee con la libreria LiquidCrystal settandolo così:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
e con il sensore Bmp085
ma non c'è verso di falo funzionare, sulla libreria del sensore riporta questo:
  These displays use I2C to communicate, 2 pins are required to   interface
ma che significa?
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11993
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sulla libreria del sensore o del display????
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

questo è il codice per provare il sensore, la seconda riga

Code:
// I2Cdev library collection - BMP085 basic Arduino example sketch
// Based on register information stored in the I2Cdevlib internal database
// 2012-06-28 by Jeff Rowberg <jeff@rowberg.net>
// Updates should (hopefully) always be available at https://github.com/jrowberg/i2cdevlib
//
// Changelog:
//     2012-06-28 - initial release, dynamically built

/* ============================================
I2Cdev device library code is placed under the MIT license
Copyright (c) 2012 Jeff Rowberg

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
===============================================
*/

// Arduino Wire library is required if I2Cdev I2CDEV_ARDUINO_WIRE implementation
// is used in I2Cdev.h
#include "Wire.h"

// I2Cdev and BMP085 must be installed as libraries, or else the .cpp/.h files
// for both classes must be in the include path of your project
#include "I2Cdev.h"
#include "BMP085.h"

// class default I2C address is 0x77
// specific I2C addresses may be passed as a parameter here
// (though the BMP085 supports only one address)
BMP085 barometer;

float temperature;
float pressure;
float altitude;
int32_t lastMicros;

#define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6)
bool blinkState = false;

void setup() {
    // join I2C bus (I2Cdev library doesn't do this automatically)
    Wire.begin();

    // initialize serial communication
    // (38400 chosen because it works as well at 8MHz as it does at 16MHz, but
    // it's really up to you depending on your project)
    Serial.begin(38400);

    // initialize device
    Serial.println("Initializing I2C devices...");
    barometer.initialize();

    // verify connection
    Serial.println("Testing device connections...");
    Serial.println(barometer.testConnection() ? "BMP085 connection successful" : "BMP085 connection failed");

    // configure LED pin for activity indication
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // request temperature
    barometer.setControl(BMP085_MODE_TEMPERATURE);
   
    // wait appropriate time for conversion (4.5ms delay)
    lastMicros = micros();
    while (micros() - lastMicros < barometer.getMeasureDelayMicroseconds());

    // read calibrated temperature value in degrees Celsius
    temperature = barometer.getTemperatureC();

    // request pressure (3x oversampling mode, high detail, 23.5ms delay)
    barometer.setControl(BMP085_MODE_PRESSURE_3);
    while (micros() - lastMicros < barometer.getMeasureDelayMicroseconds());

    // read calibrated pressure value in Pascals (Pa)
    pressure = barometer.getPressure();

    // calculate absolute altitude in meters based on known pressure
    // (may pass a second "sea level pressure" parameter here,
    // otherwise uses the standard value of 101325 Pa)
    altitude = barometer.getAltitude(pressure);

    // display measured values if appropriate
    Serial.print("T/P/A\t");
    Serial.print(temperature); Serial.print("\t");
    Serial.print(pressure); Serial.print("\t");
    Serial.print(altitude);
    Serial.println("");

    // blink LED to indicate activity
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
   
    // delay 100 msec to allow visually parsing blink and any serial output
    delay(100);
}
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11993
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora, vorrei capire bene, mi pareva di aver capito nel tuo altro Topic, che questo sensore lo stai già facendo funzionare, visto che ti ponevi un problema di conversione dati, no?
Ora anche il dispaly che stai usando è un I2C? Direi di no, visti i collegamenti che hai fatto.
Quindi la prima cosa è capire se stai riuscendo a far funzionare il sensore e poi si può vedere la parte display; se sei ancora al primo stadio, lascia stare il display e usa il Serial Monitor.
Riguardo l'I2C le problematiche in genere sono due: un errore nella dichiarazione dell'indirizzo del dispositivo o la mancanza delle resistenze di pull-up sulle due linee dati.
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ai ragione mi spiego meglio, il sensore lo ho provato con un codice preso da un sito dove posso vedere che funziona sulla seriale.
Ma è un codice chilometrico con tantissime variabili che sinceramente non capisco (anche se ci sto rpovando).
Mentre il codice sopra riportato, non riesco a vederlo funzionare neanche sulla seriale, eppure questo è il codice riportato come esempio per tale sensore, questo codice mi sembra molto più facile da capire per i miei limiti.
Ma quando lo provo sulla seriale mi esce solo una serie di geroglifici in continuo eppure uso i collegamenti specificati dal programma,alimento il sensore a 3,3V poi per il traffico dati uso la connessione A4 e A5 dove il I2C dovrebbe funzionare (così mi sembra di aver capito).
Ma il resto è solo geroglifici e niente altro.

Per quanto riguarda il titolo della richiesta era per interfacciare il display anche con il secondo codice che funziona dove non uso un display I2C (dopo vari tentativi sono riuscito a farlo funzionare) ma ora comunque come dicevo sopra il codice mi risulta poco comprensibile e vorrei usare quello che ho riportato, ma non riesco a farlo funzionare neanche da seriale smiley-eek-blue
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11993
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

devi collegare anche i GND e 5V tra loro, inoltre devi controllare l'impostazione di velocità (normalmente 9600bps)
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

devi collegare anche i GND e 5V tra loro, inoltre devi controllare l'impostazione di velocità (normalmente 9600bps)

In che senso devo gollegare il 5V e GND fra loro?
Ho 4 cavi dal sensore dove è specificato che va collegato a 3.3V e non 5 e i collegamenti che ho fatto sono 3.3V arduino a 3.3 del sensore, GND arduino a GND sensore, A4 arduino a SDA sensore, A5 arduino a SCL sensore, niente di più.

Risolto era sbagliata la velocità di comunicazione della porta, grazie
« Last Edit: February 25, 2013, 06:30:09 am by parapaolo » Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 415
Posts: 11993
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Intendevo dire ovviamente che dovevi collegare anche l'alimentazione (5V o 3,3V che fosse) oltre ai due segnali, ma poiché hai risolto con i baud evidentemente erano collegati correttamente. OTTIMO! metti [RISOLTO] al titolo del topic
Logged

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intendevo dire ovviamente che dovevi collegare anche l'alimentazione (5V o 3,3V che fosse) oltre ai due segnali, ma poiché hai risolto con i baud evidentemente erano collegati correttamente. OTTIMO! metti [RISOLTO] al titolo del topic

Ok ma non ho risolto, ora il problema è il titolo del topic, ossia interfacciarci il display con la libreria LiquidCrystal, ho aggiunto la libreia, e ho definito i pin.

Ma sia usando un display con i tasti che un display normale configurati nei seguenti modi:

Con tasti LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
che stò usando con l'altro programma LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

ma in entrambi i casi alla compilazione ricevo questi errori una infinità metto solo i primi
Quote
LiquidCrystal\LiquidCrystal.cpp.o: In function `LiquidCrystal::pulseEnable()':
E:\DATI\ARDUINO\arduino-1.0.3\libraries\LiquidCrystal/LiquidCrystal.cpp:285: multiple definition of `LiquidCrystal::pulseEnable()'
Adafruit_BMP085\LiquidCrystal.cpp.o:E:\DATI\ARDUINO\arduino-1.0.3\libraries\Adafruit_BMP085/LiquidCrystal.cpp:285: first defined here
LiquidCrystal\LiquidCrystal.cpp.o: In function `LiquidCrystal::write8bits(unsigned char)':
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21648
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra che tu stia includendo due volte la libreria.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 36
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra che tu stia includendo due volte la libreria.

No intendo dire che metto o una  o l'altra, non le metto entrambi insieme
Logged

Pages: [1]   Go Up
Jump to: