Donc nous allons utiliser l'IDE de chez Arduino fourni en freeware . Les commentaires étant relativement fournis, je n'apporterai que quelques remarques sur les lignes et ensembles de lignes du programme.
On commence par déclarer les sous-programmes des composants ( Puisqu'ils ont l'avantage d'exister on va les utiliser)!
// Bernard Leclerc 11/2017 Rev.:2
// Définition des pinuches de l'écran
#define TFT_PIN_CS 10 // Arduino-Pin an Display CS
#define TFT_PIN_DC 9 // Arduino-Pin an A0
#define TFT_PIN_RST 8 // Arduino Reset-Pin
#include "Arduino.h"
#include <SPI.h>
#include <Adafruit_ST7735.h> // Adafruit ST7735 Library
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_PIN_CS, TFT_PIN_DC, TFT_PIN_RST); // Display-Library Setup
Ci-dessous, nous allons affecter les entrées/sorties utilisées en fonction du schéma ! Attention toutes ne sont pas permutables; certaines ont des fonctions bien dédiées et ne peuvent pas être associées à autres choses .
Ici on va également déclarer les variables utilisées dans le sketch
// Declaration des entrees et des variables
int relay = 7;
int led = 5;
int sel = 2;
int sel2 = 3;
int m = 0;
int c = 0;
int d = 0;
int cm = 0;
int dm =0;
int n =200;
Et la dessous les commandes exécutées une seule fois au début : Pour nous ce sera l'auto-maintient de l'alimentation par le collage du relais et l'initialisation de l'écran !
void setup()
{
digitalWrite(relay, HIGH); // Automaintien de l'alimentation par le relais
tft.initR(INITR_BLACKTAB); // Initialisation ST7735-Chip
}
Dans la boucle on va y mettre tout le programme qui doit être exécuté jusqu'à l'arrêt, si arrêt il y a, sinon c'est advitam éternam .... Les première instructions créent la page d'accueil sur l'écan.
void loop()
{
tft.fillScreen(ST7735_BLACK);// couleur du fond d'ecran
delay(200); // 0,2 secondes d'attente
//Tracé de la ligne verte
tft.drawLine(10,135,118,135,ST7735_GREEN);// drawLine(x_start,y_start,x_end,y_end,couleur);
//Ecriture du Copyright
tft.setTextSize(1);// Réglage nouvelle grandeur de caracteres
tft.setTextColor(ST7735_GREEN);// Reglage Nouvelle couleur de text
tft.setCursor(18,140);// Position du nouveau texte
tft.print("bernard.leclerc");// Ecriture du texte première ligne
tft.setCursor(30,148);// Position du nouveau texte seconde ligne
tft.print("@wanadoo.fr");// Ecriture du texte seconde ligne
analogWrite(led, 200);// Allume l'écran en PWM a 80%
//Ecriture du titre
tft.setTextSize(2); // reglage grandeur de caracteres
tft.setCursor(20,4); // Définir la position du texte
tft.setTextColor(ST7735_RED);// couleur du texte
tft.print("Choisir"); // texte ecrit
tft.setCursor(45,45); // Définir la position du texte
tft.setTextColor(ST7735_YELLOW);// couleur du texte
tft.print("Mon"); // texte ecrit
Sur cette partie là, on va s'inquiéter de l'état des boutons; sont-ils pressés et si oui, lequel; avec saut au sous programme si l'un ou l'autre est actif !
if (digitalRead(sel)){ //Si le bouton 1 est pressé => Sous-programme
goto cdchoice;
}
if (digitalRead(sel2)){ //Si le bouton 2 est pressé => Sous-programme
goto dvdchoice;
}
Premier s/programme choix du CD
cdchoice:
tft.setTextSize(4); // reglage grandeur de caracteres
tft.setCursor(35,80); // Définir la position du texte
tft.setTextColor(ST7735_WHITE);// couleur du texte
tft.print("CD"); // texte ecrit
delay(200); // 0,2 secondes d'attente
//Choix des positions
while (digitalRead(sel)) { // Boucle tant que le bouton 1 est pressé,
m = random(1,16); //generation de nombres aléatoires du meuble
if (m < 5) { // Configuration géographique du nombre de casiers par meuble
cm = 11;
dm = 11; // Configuration géographique du nombre de disquess par casier
}
else {
cm = 7; // Configuration géographique du nombre de casiers par meuble
dm = 26; // Configuration géographique du nombre de disquess par casier
}
c = random(1,cm); //generation de nombres aléatoires du casier
d = random(1,dm); //generation de nombres aléatoires du disque
}
//Ecriture du titre
tft.fillScreen(ST7735_BLACK);
tft.setTextSize(2); // reglage grandeur de caracteres
tft.setTextColor(ST7735_BLUE);// couleur du texte
tft.setCursor(25,4); // Définir la position du texte
tft.print("MEUBLE:"); // texte ecrit
tft.setCursor(50,25); // Définir la position du texte
tft.print(m); // texte ecrit
tft.setTextColor(ST7735_WHITE);// couleur du texte
tft.setCursor(30,50); // Définir la position du texte
tft.print("CASE:"); // texte ecrit
tft.setCursor(50,75); // Définir la position du texte
tft.print(c); // texte ecrit
tft.setCursor(25,100); // Définir la position du texte
tft.setTextColor(ST7735_RED);// couleur du texte
tft.print("DISQUE:"); // texte ecrit
tft.setCursor(50,125); // Définir la position du texte
tft.print(d); // texte ecrit
delay (5000);
goto arret;
Deuxième s/programme choix du DVD
dvdchoice:
tft.setTextSize(4); // reglage grandeur de caracteres
tft.setCursor(35,80); // Définir la position du texte
tft.setTextColor(ST7735_WHITE);// couleur du texte
tft.print("DVD"); // texte ecrit
delay(200); // 0,2 secondes d'attente
//Choix des positions
while (digitalRead(sel2)) {// Boucle tant que le bouton 2 est pressé,
m = random(1,3); //generation de nombres aléatoires du meuble
if (m < 2) {
cm = 7; // Configuration géographique du nombre de casiers par meuble
dm = 23; // Configuration géographique du nombre de DVD par casier
}
else {
cm = 5; // Configuration géographique du nombre de casiers par meuble
dm = 56; // Configuration géographique du nombre de DVD par casier
}
c = random(1,cm); //generation de nombres aléatoires du casier
d = random(1,dm); //generation de nombres aléatoires du DVD
}
//Ecriture du titre
tft.fillScreen(ST7735_BLACK);
tft.setTextSize(2); // reglage grandeur de caracteres
tft.setTextColor(ST7735_BLUE);// couleur du texte
tft.setCursor(25,4); // Définir la position du texte
tft.print("MEUBLE:"); // texte ecrit
tft.setCursor(50,25); // Définir la position du texte
tft.print(m); // texte ecrit
tft.setTextColor(ST7735_WHITE);// couleur du texte
tft.setCursor(30,50); // Définir la position du texte
tft.print("RANG:"); // texte ecrit
tft.setCursor(50,75); // Définir la position du texte
tft.print(c); // texte ecrit
tft.setCursor(35,100); // Définir la position du texte
tft.setTextColor(ST7735_RED);// couleur du texte
tft.print("DVD:"); // texte ecrit
tft.setCursor(50,125); // Définir la position du texte
tft.print(d); // texte ecrit
delay (5000);
goto arret;
?Arrêt progressif par diminution de l'éclairage et coupure de l'alimentation lorsque il est éteint .
arret:
delay (200);
analogWrite(led, n);// Allume l'écran en PWM a n%
n = n - 1; // extinction progressive
if (n < 2) { goto fini; } //Saute au final si pratiquement éteind
goto arret;
fini:
delay (5000);
digitalWrite(relay, LOW); // Coupure de l'alimentation
}
Dans le fichier zipé suivant, vous trouverez tous les éléments décris plus haut, pour reproduire ce montage; N'oubliez pas que le lecteur de carte est câblé et que la partie hardware peut faire plein d'autres choses !
M me (26.65 Ko)
