Bonjour à tous,
Je débute avec une Arduino Uno, j'arrive déjà à compiler quelques programmes, mais là je butte sur quelque chose.
Je veux exploiter le capteur Bosch BMP085, dans le but d'en faire un altimètre précis.
Pour récupérer les infos du BMP085 et les afficher en SerialPrint ou sur l'écran LCD du starter kit Arduino pas de problème.
Je voudrai pour avoir plus d'espace afficher les infos sur un écran TFT, j'ai donc acheté l'écran suivant : http://imall.iteadstudio.com/display/im120419001.html
Version en série pouvant se brancher directement sans passer par une carte tierce.
Mon souci vient de la taille du programme.
Mon code de départ affichant sur le lcd 2 x 16 est le suivant, sa taille est de 11312 octets
- il reste encore à programmer quelques boutons pour modifier les bases QNH
- les Serial.print sont là pour vérifier mes constantes, dans le cas du tft elle peuvent disparaitre.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#include <LiquidCrystal.h>
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
// BS E D4 D5 D6 D7
LiquidCrystal lcd( 7, 8, 9, 10, 11, 12);
void setup()
{
lcd.begin(16, 2);
/* Initialise the sensor */
if(!bmp.begin())
{
/* There was a problem detecting the BMP085 ... check your connections */
Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");
lcd.print("No BMP085 Wired");
while(1);
}
}
void loop()
{
/* Get a new sensor event */
sensors_event_t event;
bmp.getEvent(&event);
/* Display the results (barometric pressure is measure in hPa) */
if (event.pressure)
{
float temperature;
bmp.getTemperature(&temperature);
Serial.begin(9600);
// ----------------
Serial.print("Temperature :");
Serial.print(temperature);
Serial.print(" C; ");
/* Display atmospheric pressue in hPa */
Serial.print("Pressure :");
Serial.print(event.pressure);
Serial.print(" hPa; ");
float seaLevelPressure = 1026.00;
float altitudem;
float altitudeft;
altitudem = bmp.pressureToAltitude(seaLevelPressure,event.pressure,temperature);
altitudeft = altitudem/0.3048;
Serial.print("Altitude :");
Serial.print(altitudem);
Serial.print(" m; ");
Serial.print("Altitude :");
Serial.print(altitudeft);
Serial.println(" ft");
lcd.setCursor(0, 0);
// ----------------
lcd.print("Alt: ft");
lcd.setCursor(5, 0);
lcd.print(altitudeft);
lcd.setCursor(0, 1);
// ----------------
lcd.print("QNH: hPa");
lcd.setCursor(5, 1);
lcd.print(seaLevelPressure);
}
else
{
lcd.print("Sensor error");
}
delay(1000);
}
Si je veux exploiter le TFT, juste avec la fonction d'initialisation j'arrive à 33600 octets... avec le code suivant :
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#include <UTFT.h>
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
// Declare which fonts we will be using
extern uint8_t SmallFont[];
// Usage: myGLCD(<model code>, SDA, SCL, CS, RST[, RS]);
UTFT myGLCD(ITDB18SP,11,10,9,13,12);
void setup()
{
// Setup the LCD
myGLCD.InitLCD();
myGLCD.setFont(SmallFont);
/* Initialise the sensor */
if(!bmp.begin())
{
/* There was a problem detecting the BMP085 ... check your connections */
Serial.print("No BMP085 detected");
while(1);
}
}
void loop()
{
/* Get a new sensor event */
sensors_event_t event;
bmp.getEvent(&event);
/* Display the results (barometric pressure is measure in hPa) */
if (event.pressure)
{
float temperature;
bmp.getTemperature(&temperature);
Serial.begin(9600);
// ----------------
Serial.print("Temperature :");
Serial.print(temperature);
Serial.print(" C; ");
/* Display atmospheric pressue in hPa */
Serial.print("Pressure :");
Serial.print(event.pressure);
Serial.print(" hPa; ");
float seaLevelPressure = 1026.00;
float altitudem;
float altitudeft;
altitudem = bmp.pressureToAltitude(seaLevelPressure,event.pressure,temperature);
altitudeft = altitudem/0.3048;
Serial.print("Altitude :");
Serial.print(altitudem);
Serial.print(" m; ");
Serial.print("Altitude :");
Serial.print(altitudeft);
Serial.print(" ft");
Serial.print("QNH :");
Serial.println(seaLevelPressure);
}
else
{
Serial.print("Sensor error");
}
delay(1000);
}
Ma question est, est-ce que l'Arduino Uno peut exploiter cet écran TFT, si oui est que je pourrai y ajouter un capteur et l'exploiter ?
Ou ai-je fais une programmation qui peut être amélioré pour gagner de la place ?
Merci de vos lumières!