#include <Arduino.h>
#include <FastLED.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
/// VERFIIFER LE PIN DU RUBANLED
#define NUM_LEDS 6
CRGB leds[NUM_LEDS]; // nécessaire pour faire fonctionner la librairie FastLed
const int RUBANLED = 25; // Pin Ruban Led à définir. A VERIFIER
const int LEDROUGE = 13; // Pin Led Rouge // La led RGB est à cathode commune (- sur la longue broche)
const int LEDVERTE = 12; // Pin Led Verte
const int LEDBLEUE = 14; // Pin Led Bleu
const int TEMPERATUREMOTEUR = 34; //Pin qui simule la température moteur
const int SIMULATIONACCELERATEUR = 35; // Pin du potar
const int BUZZER = 26; // Pin du BUZZER
int i = 0;
//---------------------------------------------------Variables globales
int valeurAccelerateur;
int valeurTemperature;
int messageRpmValeurNumerique = 0; // valeur numérique de messageRpm
int messageBipValeurNumerique = 6900; // valeur numerique de messageBiprpm
String messageRpm; // permet de récupérer la valeur du serveur pour les rpm
// String messageBip; // permet de récupérer la valeur du serveur pour les rpmbip
bool etatBuzzer = 1; // sert d'interrupteur pour allumer ou eteindre le buzzer
int valeurLuminosite = 255; // Par défaut sur le mode Soleil
//---------------------------------------------------Fonctions
void playShiftSound()
{
tone(BUZZER,2300);
delay(100);
noTone(BUZZER);
delay(750);
}
void EcranOLED()
{
display.clearDisplay();
display.setTextSize(2); // taille du texte
display.setTextColor(WHITE);
display.setCursor(56, 0); // position du curseur colonne / ligne
display.println("IP");
display.setTextSize(1);
display.println();
display.display();
delay(400);
display.setTextSize(1);
display.println("168.192.10.1");
display.println(" Connexion...");
display.display();
delay(400);
display.clearDisplay();
for (int j = 0; j <= 5; j++) {
i = j; // Assurez-vous que i prend la valeur de j à chaque itération
display.display();
delay(100);
display.setCursor(45, 13);
display.setTextSize(7);
display.println(i);
display.println("");
display.display();
delay(400);
display.clearDisplay();
}
}
void GestionTemperatureMoteur(int valeurTemperature)
{
if (valeurTemperature < 85)
{
digitalWrite(LEDBLEUE, HIGH); // Moteur Froid
digitalWrite(LEDROUGE,LOW);
digitalWrite(LEDVERTE,LOW);
delay(5);
}
else if (valeurTemperature > 85 && valeurTemperature < 95)
{
digitalWrite(LEDBLEUE, LOW);
digitalWrite(LEDROUGE,LOW);
digitalWrite(LEDVERTE,HIGH); // Moteur en température optimale
delay(5);
}
else if (valeurTemperature > 95)
{
digitalWrite(LEDBLEUE, LOW);
digitalWrite(LEDROUGE,HIGH); // Moteur en surchauffe
digitalWrite(LEDVERTE,LOW);
delay(5);
}
}
void setup()
{
Serial.begin(115200);
Serial.println("\n");
//----------------------------------------------------Serial
//----------------------------------------------------GPIO
pinMode(LEDROUGE, OUTPUT);
digitalWrite(LEDROUGE, LOW);
pinMode(LEDVERTE, OUTPUT);
digitalWrite(LEDVERTE, LOW);
pinMode(LEDBLEUE, OUTPUT);
digitalWrite(LEDBLEUE, LOW);
pinMode(TEMPERATUREMOTEUR, INPUT);
pinMode(SIMULATIONACCELERATEUR, INPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
FastLED.addLeds<NEOPIXEL, RUBANLED>(leds, NUM_LEDS);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
{
Serial.println(F("SSD1306 allocation failed"));
for (;;)
; // Don't proceed, loop forever
}
display.display();
delay(50); // Pause for 2 seconds
}
void loop()
{
EcranOLED();
valeurAccelerateur = analogRead(SIMULATIONACCELERATEUR); // valeur qui lit le potar pour simuler le régime moteur
int valeurTemperature = analogRead(TEMPERATUREMOTEUR); // stocke la valeur lue par le potar
float multiplicateur = 1.70898; // permet de passer de 4096 valeurs à 7000
int regime = multiplicateur *valeurAccelerateur;
//manageLedRGB();
if (regime >= messageBipValeurNumerique-25 && regime <= messageBipValeurNumerique+25)
{
Serial.println("Bip actif");
playShiftSound();
}
GestionTemperatureMoteur(valeurTemperature);
Serial.print(" La valeur de valeurTemperature est : ");
Serial.println(valeurTemperature);
Serial.print(" La valeur de regime est : ");
Serial.println(regime);
delay(5);
}