Project Arduino
Voici le listing d’un petit logiciel qui m’occupe ces derniers jours… A la base c’etait pour tester un capteur de pression atmosphérique/température BMP280 et un petit écran OLED sur un microcontrôleur PIC en langage BASIC (sous ProtonIDE). Comme il existe des bibliothèques toutes prêtes sur Arduino j’ai utilisé un Arduino UNO et quelques fils sur une plaque d’essai pour mon montage. J’ai remarqué que la température était plus élevée de deux degrés que la valeur lue de mon thermomètre , j’ai aussi utilisé un capteur DS18B20 qui semble plus précis. Voici le listing du code et quelques photos du montage…
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697/** Arduino with SSD1306 OLED display (128x64 Pixel) and* BMP280 barometric pressure & temperature sensor.* Ajout capteur ds18B20 par Carlos Pires Serra*/#include <Wire.h> // include Arduino wire library (required for I2C devices)#include <Adafruit_SSD1306.h> // include Adafruit SSD1306 OLED display driver#include <Adafruit_BMP280.h> // include Adafruit BMP280 sensor library#include <OneWire.h> // bibliotheque OneWire#include <DS18B20.h> // bibliotheque DS18B20#define OLED_RESET 4 // define display reset pinAdafruit_SSD1306 display(OLED_RESET); // initialize Adafruit display library// define device I2C address: 0x76 or 0x77 (0x77 is library default address)#define BMP280_I2C_ADDRESS 0x76#define ONE_WIRE_BUS 2 // Pin D2 pour le bus onewireOneWire oneWire(ONE_WIRE_BUS); // initialisation desDS18B20 sensor(&oneWire); // bibliothequesAdafruit_BMP280 bmp280; // initialize Adafruit BMP280 libraryvoid setup(void){delay(1000); // wait a secondsensor.begin(); // Demarrage capteur ds18B20// initialize the SSD1306 OLED display with I2C address = 0x3Cdisplay.begin(SSD1306_SWITCHCAPVCC, 0x3C);// clear the display buffer.display.clearDisplay();display.setTextSize(1); // text size = 1display.setTextColor(WHITE, BLACK); // set text color to white and black backgrounddisplay.setCursor(0, 0); // move cursor to position (15, 0) pixel// display.println("BMP280 SENSOR");display.display(); // update the display// initialize the BMP280 sensorif( bmp280.begin(BMP280_I2C_ADDRESS) == 0 ){ // connection error or device address wrong!display.setTextSize(1); // text size = 1display.setCursor(0, 0);display.println("Connection");display.print("Error");display.display(); // update the displaywhile(1); // stay here}display.display(); // update the display}char _buffer[9];void loop(){display.clearDisplay();display.setCursor(0, 0);sensor.requestTemperatures();while (!sensor.isConversionComplete()); // wait until sensor is ready// get temperature and pressure from libraryfloat temp = bmp280.readTemperature(); // get temperaturefloat pressure = bmp280.readPressure(); // get pressure// print data on the LCD// 1: print temperatureif(temp < 0)sprintf(_buffer, "-%02u.%02u C", (int)abs(temp), (int)(abs(temp) * 100) % 100 );elsesprintf(_buffer, " %02u.%02u C", (int)temp, (int)(temp * 100) % 100 );display.print("Temperature:");display.println(_buffer);// 2: print pressuresprintf(_buffer, "%04u.%02u", (int)(pressure/100), (int)((uint32_t)pressure % 100));display.print("Pression: ");display.print(_buffer);display.println(" hPa");display.println();display.print("Temp_18B20 : "); // Affichage Temperature du DS18B20display.print(sensor.getTempC());display.println(" C");// update the displaydisplay.display();delay(2500); // Attente 2.5 secondes pour la prochaine lecture}Arduino Final 2ene Test 1er Test