Bonjour,
Dans le cadre d'un projet étudiants nous souhaitons créer un système composé d'une carte Arduino Uno, d'un capteur de pression hydraulique, d'un écran "2.8" SPI TFT Module" (la partie tactile ne nous intéresse pas ici), et pourquoi pas quelques leds dans le futur. Notre but est d'afficher la pression du capteur ainsi que la profondeur correspondante.
Nous aimerons adapter le code suivant (fonctionnant sur écran I2C) afin qui soit fonctionnel sur notre écran "2.8" SPI TFT Module".
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Largeur de l'écran OLED en pixels
#define SCREEN_HEIGHT 64 // Hauteur de l'écran OLED en pixels
#define OLED_RESET -1 // Broche de réinitialisation # (ou -1 si elle partage la broche de réinitialisation de l'Arduino)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const float OffSet = 0.45 ;
int psensor = A0;
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
float V, P;
void setup()
{
Serial.begin(9600); // ouvrir le port série, définir le débit en bauds à 9600 bps
pinMode(psensor, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
Serial.println("/** Démo du capteur de pression d'eau **/");
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
delay(2000);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop()
{
// Connectez le capteur à l'Analogique 0
V = analogRead(psensor) * 5.00 / 1024; // Tension de sortie du capteur
P = (V - OffSet) * 250; // Calcul de la pression de l'eau
Serial.print("Tension :");
Serial.print(V, 3);
Serial.println("V");
Serial.print(" Pression :");
Serial.print(P, 1);
Serial.println(" kPa");
Serial.println();
display.clearDisplay();
display.setCursor(10, 0);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print("Valeur :");
display.setCursor(10, 30);
display.setTextSize(2);
display.print(P);
display.print(" kPa");
display.display();
if ((P > 0) && (P <= 10))
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
else if ((P > 10) && (P <= 20))
{
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
else if ((P > 20) && (P <= 40))
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
else if ((P > 40) && (P <= 60))
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
else if ((P > 60) && (P <= 80))
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
}
else if (P >= 95)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
delay(100);
}
(Pour les curieux le but est une aide à la plongée sous-marine afin que les plongeurs puissent connaitre leur profondeur en temps réel).
Merci d'avance pour votre aide !