Re: LSM303DLHC 3D Compass e Accelerometro Carrier con regolatore di tensione,

Salve a tutti, Sono gennaro nuovo utente, da giorni Pochi, siccome Sono RIMASTO bloccato per This accelerometro, chiedevo se con Estrema cortesia se mi potete aiutare.dopo Aver Caricato Nella libreria Arduino Uno versione 1.6.4, ho Caricato sul mio Arduino Uno This skech, tutto okey caricamento Completato, ma al visualizzare nulla non visualizzo, ho provato e riprovato il classico programmino di Esempio "ciao Wold" ed e un posto leggo la scritta Ma Quando Carico lo skech of this modello di accelerometro non visualizzo piu niente. Certi della Vostra cortese Collaborazione vi ringrazio anticipatamente.
qui sotto ho copiato lo skech Che ho scaricato da Polou.
Questo e il tipo di accelerometro Che ho acquistato.

Arduino uno;
lcd keypad shield;
accelerometro lsc303dlhc

libreria lcd4bit.h

libreria lsm303.h

... Gennaro, attenzione, perché, da regolamento, il Croos-Posting è vietato e ... mi sembra che ci siano altri tuoi post in giro sempre relativi allo stesso argomento :wink:

Comunque ... continuiamo qui e vediamo di capire ...

La prima cosa da fare è far funzionare SOLO Arduino UNO e lo shield LCD. Riuscito a fare questo e capito come funziona, si può passare ad aggiungere altro hardware ed a complicare il codice.

Quindi ... comincia come ho detto e pubblica qui un programmino che funzioni correttamente con lo shield LCD (... mi raccomando, racchiudilo nei tag CODE come descritto nel regolamento al punto 7) che poi lo modifichiamo ... :wink:

Guglielmo

P.S. : Cortesemente, di qualunque cosa, NON mettere "accelerometro lsc303dlhc" o "libreria lsm303.h" ... ma metti il link esatto com cui uno può recuperare le informazioni. Già il tempo è poco, se puoi uno si deve mettere a fare le ricerche, con il rischio di trovare un oggetto simile ma non lo stesso ... capisci che diventa difficile ... :roll_eyes:

ciao Guglielmo e grazie per la tua attenzione, mi scuso per i pasticci che ho combinato sul sito, ma ancora devo prendere dimestichezza,pian paino sto capendo come funziona, ho insrito diversi post perchè pensavo di non averli pubblicati ma invece...
per quanto riguarda il mio progetto, ho arduino uno ed un lcd shield keypad 16,2
qui ho trovato la libreria e funziona http://www.hobbyist.co.nz/sites/default/files/ArduinoLibraries/LCD4Bit_mod.zip
per l'accelerometro ho trovato qui la libreria(https://codeload.github.com/pololu/lsm303-arduino/zip/master) leggo sul monitor seriale tutti i valori che ovviamente dovrò calibrare.
Il mio problema e trasferire i valori dell'accelerometro sul display.
Certo della tua disponibilità anticipatamente ti ringrazio.

Come ti ho già detto, magari comincia a mettere qui il codice che scrive sul LCD "Ciao Gennaro" e ... vediamo come lo fai, che ad aggiungere l'accelerometro c'è tempo ...

Guglielmo

P.S. : ... mi raccomando, il codice racchiuso nei tag CODE come descritto nel regolamento al punto 7

scusate, dimenticavo, il display è come questo nel link:
http://www.ebay.it/itm/KEYPAD-SHIELD-PER-ARDUINO-/251954599108?pt=LH_DefaultDomain_101&hash=item3aa9aa14c4

ciao gugliemo, ieri ho fatto tardi, oggi ti invio come da te richiesto la scdritta di Ciao Gennaro, compreso un saluto anche
#include <LiquidCrystal.h>

LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0,0);
lcd.print("ciao Gennaro");
lcd.setCursor(0,1);
lcd.print("ciao Guglielmo");}

Ok e ... già da quest'esempio che hai messo salta fuori un bel problema ...

L'LCD che hai collegato, stando alla tua chiamata di inizializzazione, "LiquidCrystal lcd(8,9,4,5,6,7);" usa i pin 4, 5, 6, 7, 8 e 9 ... peccato che i pin 4 e 5, su Arduino UNO, siano i pin SDA e SCL usati dalla comunicazione I2C che, immagino, sia la comunicazione che usa il tuo accelerometro :roll_eyes:

Se così è ... purtroppo non puoi fare nulla di semplice, visto che i pin del I2C sono fissi hardware ...

Le soluzioni che hai sono ...

... o vedere se puoi collegare l'LCD ad altri pin lasciando liberi il 4 e il 5, o usare un altro LCD (uno che funzioni attraverso I2C) o ... invece che usare l'I2C nativo di Arduino (quello HW) usare, con le dovute limitazioni, una libreria che lo "simuli" da software ... la "Software I2C", che trovi descritta QUI e che ti permette di definire, via software, due altri pin per SDA e SCL (simulati).

Vedi tu ... :roll_eyes:

Guglielmo

Edit : ... lascia sta' ... oggi confondo fischi per fiaschi ...

Guglielmo.....
non mi dire che il caldo ha colpito anche la Svizzera !!

... oggi 29° ... ho scritto qualche fregnaccia ? ? ? :grin: :grin: :grin:

Guglielmo

P.S. : Considera che NON uso LCD di quel tipo, ma solo LCD I2C ... quindi ... :smiley:

I2C = A4 SDA A5 SCL
Lui usa i D4 e D5

29°.. niente male

Azz ... oggi so rincoglio... :smiley: :smiley: :smiley: ... c'hai ragione ... :grin: :grin: :grin:

Genna' dimentica quello che ho scritto sopra :smiley: :smiley: :smiley:

...e vai avanti con un esempio che usa l'I2C con il tuo accelerometro e la seriale ... così, dopo, rincogl.... permettendo, uniamo i due programmi ... :grin:

Guglielmo

ciao Guglielmo, questo è lo skech che ho trovato e modificato, ottengo solo la bussola ma non riesco a leggere l'elevazione, mi potresti aiutare?

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);
#include <Wire.h>
#include <LSM303.h>
#define Z;
#define X;
#define Y;


 LSM303 compass;

void setup() {
 
  Serial.begin(9600);
  lcd.begin(16,2);              
  Wire.begin();
lcd.print("        ");
 pinMode (SDA,INPUT);
  pinMode (SCL,INPUT);
  pinMode(SDA,LOW);
  pinMode(SCL,LOW);
  
  compass.init();
  compass.enableDefault();
 compass.m_min = (LSM303::vector<int16_t>){-32767, -32767, -32767};
  compass.m_max = (LSM303::vector<int16_t>){+32767, +32767, +32767};
compass.heading((LSM303::vector<int>){0, 0, 1});
  
 
 
 /*
  Calibration values; the default values of +/-32767 for each axis
  lead to an assumed magnetometer bias of 0. Use the Calibrate example
  program to determine appropriate values for your particular unit.
  */
  
 
 





}

void loop() {
 (compass.heading((LSM303::vector<int>){0, 0, 1}));
compass.read();
 
  /*
  When given no arguments, the heading() function returns the angular
  difference in the horizontal plane between a default vector and
  north, in degrees.
  
  The default vector is chosen by the library to point along the
  surface of the PCB, in the direction of the top of the text on the
  silkscreen. This is the +X axis on the Pololu LSM303D carrier and
  the -Y axis on the Pololu LSM303DLHC, LSM303DLM, and LSM303DLH
  carriers.
  
  To use a different vector as a reference, use the version of heading()
  that takes a vector argument; for example, use
  
    compass.heading((LSM303::vector<int>){0, 0, 1});
  
  to use the +Z axis as a reference.
  */
  float heading = compass.heading();
  compass.read();

	
 Serial.begin(9600);
  lcd.begin(16,2);              
  Wire.begin();
 pinMode (SDA,INPUT);
  pinMode (SCL,INPUT);
  pinMode(SDA,LOW);
  pinMode(SCL,LOW);
  compass.init();
  compass.enableDefault();
compass.read();
 
lcd.print("Dir ");
lcd.print(heading);
  
 delay(500);
 
 
 }