LOCODUINO

Aide
Forum de discussion
Dépôt GIT Locoduino
Flux RSS

vendredi 26 avril 2024

Visiteurs connectés : 76

Affichage publicitaire avec Arduino (2)

Affichage publicitaire vertical

. Par : catplus, Christian

Si vous n’avez pas encore lu l’article Affichage publicitaire avec Arduino (1), c’est le moment de le faire car nous y ferons souvent référence, histoire de ne pas répéter ce que nous avons déjà dit. Vous y trouverez ce qui caractérise un écran et comment celui-ci doit être connecté à une carte Arduino. Pour réaliser notre affichage vertical, (...)

Retourner à l'article

Vous répondez à :

Affichage publicitaire avec Arduino (2) 28 avril 2023 18:50, par Besseyre guy

bonjour Christian
J’ai réalisé l’application décrite dans l’article (figure 7), après avoir approvisionné l’écran chez
Aliexpress ,conforme a la photo n°5, ainsi que le lecteur de micro-sd, pilotage par Arduino Nano ;
l’écran s’allume mais aucune image n’apparait ; essai sur un deuxième montage ,même chose
je ne vois pas ou est l’erreur, ci-joint le sketch ;
bon week-end
// Diaporama_demo_80x160.ino
// -------------------------

#include <Adafruit_GFX.h> // Bibliotheque graphique - Core graphics library
#include <Adafruit_ST7735.h> // Bibliotheque specifique ST7735 - Hardware-specific library for ST7735
#include <SPI.h>
#include <SD.h>

#define dureeAffichage 7500 // Duree d’affichage
#define TFT_RST 9 // Ligne de Reset - Reset line for TFT
#define TFT_CS 10 // Selection de l’ecran - Chip select line for TFT display
#define TFT_DC 8 // Commande donnees pour ecran - Data/command line for TFT
#define SD_CS 4 // Selection du lecteur carte SD - Chip select line for SD card
//D11 -> MOSI SD + SDA TFT
//D12 -> MISO SD
//D13 -> SCK SD + SCL TFT

// Ecran 0.96" controleur ST7735 - For 0.96" TFT with ST7735 use
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST) ;

void setup(void)
Serial.begin(9600) ;

while (!Serial)
delay(10) ; // wait for serial console

pinMode(TFT_CS, OUTPUT) ;
digitalWrite(TFT_CS, HIGH) ;
pinMode(SD_CS, OUTPUT) ;
digitalWrite(SD_CS, HIGH) ;

// Initialisation de l’ecran 0.96" 160x80 TFT
tft.initR(INITR_MINI160x80) ;

tft.fillScreen(ST77XX_RED) ; // En fait, affichera jaune
delay(3000) ;

Serial.print("Initializing SD card...") ;
if (!SD.begin(SD_CS))
Serial.println("failed !") ;
return ;

Serial.println("OK !") ;

File root = SD.open("/") ;
printDirectory(root, 0) ;
root.close() ;

void loop()
// Affichage
// Changer les noms des fichiers - change the names here !
bmpDraw("RN80x160.BMP", 0, 0) ;
delay(dureeAffichage) ;
bmpDraw("Defense.BMP", 0, 0) ;
delay(dureeAffichage) ;
bmpDraw("AirFranc.BMP", 0, 0) ;
delay(dureeAffichage) ;
bmpDraw("Locoduin.BMP", 0, 0) ;
delay(dureeAffichage) ;

// This function opens a Windows Bitmap (BMP) file and
// displays it at the given coordinates. It’s sped up
// by reading many pixels worth of data at a time
// (rather than pixel by pixel). Increasing the buffer
// size takes more of the Arduino’s precious RAM but
// makes loading a little faster. 20 pixels seems a
// good balance.

#define BUFFPIXEL 20

void bmpDraw(char *filename, uint8_t x, uint16_t y)

File bmpFile ;
int bmpWidth, bmpHeight ; // W+H in pixels
uint8_t bmpDepth ; // Bit depth (currently must be 24)
uint32_t bmpImageoffset ; // Start of image data in file
uint32_t rowSize ; // Not always = bmpWidth ; may have padding
uint8_t sdbuffer[3*BUFFPIXEL] ; // pixel buffer (R+G+B per pixel)
uint8_t buffidx = sizeof(sdbuffer) ; // Current position in sdbuffer
boolean goodBmp = false ; // Set to true on valid header parse
boolean flip = true ; // BMP is stored bottom-to-top
int w, h, row, col ;
uint8_t r, g, b ;
uint32_t pos = 0, startTime = millis() ;

if((x >= tft.width()) || (y >= tft.height())) return ;

Serial.println() ;
Serial.print(F("Loading image ’")) ;
Serial.print(filename) ;
Serial.println(’\’’) ;

// Open requested file on SD card
if ((bmpFile = SD.open(filename)) == NULL)
Serial.print(F("File not found")) ;
return ;

// Parse BMP header
if(read16(bmpFile) == 0x4D42) // BMP signature
Serial.print(F("File size : ")) ; Serial.println(read32(bmpFile)) ;
(void)read32(bmpFile) ; // Read & ignore creator bytes
bmpImageoffset = read32(bmpFile) ; // Start of image data
Serial.print(F("Image Offset : ")) ; Serial.println(bmpImageoffset, DEC) ;
// Read DIB header
Serial.print(F("Header size : ")) ; Serial.println(read32(bmpFile)) ;
bmpWidth = read32(bmpFile) ;
bmpHeight = read32(bmpFile) ;
if(read16(bmpFile) == 1) // # planes — must be ’1’
bmpDepth = read16(bmpFile) ; // bits per pixel
Serial.print(F("Bit Depth : ")) ; Serial.println(bmpDepth) ;
if((bmpDepth == 24) && (read32(bmpFile) == 0)) // 0 = uncompressed

goodBmp = true ; // Supported BMP format — proceed !
Serial.print(F("Image size : ")) ;
Serial.print(bmpWidth) ;
Serial.print(’x’) ;
Serial.println(bmpHeight) ;

// BMP rows are padded (if needed) to 4-byte boundary
rowSize = (bmpWidth * 3 + 3) & 3 ;

// If bmpHeight is negative, image is in top-down order.
// This is not canon but has been observed in the wild.
if(bmpHeight < 0)
bmpHeight = -bmpHeight ;
flip = false ;

// Crop area to be loaded
w = bmpWidth ;
h = bmpHeight ;
if((x+w-1) >= tft.width()) w = tft.width() - x ;
if((y+h-1) >= tft.height()) h = tft.height() - y ;

// Set TFT address window to clipped image bounds
tft.setAddrWindow(x, y, x+w-1, y+h-1) ;

for (row=0 ; row<h ; row++) // For each scanline...

// Seek to start of scan line. It might seem labor-
// intensive to be doing this on every line, but this
// method covers a lot of gritty details like cropping
// and scanline padding. Also, the seek only takes
// place if the file position actually needs to change
// (avoids a lot of cluster math in SD library).
if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize ;
else // Bitmap is stored top-to-bottom
pos = bmpImageoffset + row * rowSize ;
if(bmpFile.position() != pos) // Need seek ?
bmpFile.seek(pos) ;
buffidx = sizeof(sdbuffer) ; // Force buffer reload

for (col=0 ; col<w; col++) { // For each pixel...
// Time to read more pixel data?
if (buffidx >= sizeof(sdbuffer)) // Indeed
bmpFile.read(sdbuffer, sizeof(sdbuffer)) ;
buffidx = 0 ; // Set index to beginning

// Convert pixel from BMP to TFT format, push to display
b = sdbuffer[buffidx++] ;
g = sdbuffer[buffidx++] ;
r = sdbuffer[buffidx++] ;
// La ligne suivante a ete modifiee car probleme affichage de couleurs.
// (A l’origine, la ligne etait : tft.pushColor(tft.color565(r,g,b)) ;)
tft.pushColor(tft.color565( b, g, r)) ;
// end pixel
// end scanline
Serial.print(F("Loaded in ")) ;
Serial.print(millis() - startTime) ;
Serial.println(" ms") ;
// end goodBmp

bmpFile.close() ;
if(!goodBmp) Serial.println(F("BMP format not recognized.")) ;

// These read 16- and 32-bit types from the SD card file.
// BMP data is stored little-endian, Arduino is little-endian too.
// May need to reverse subscript order if porting elsewhere.

uint16_t read16(File f)
uint16_t result ;
((uint8_t *)&result)[0] = f.read() ; // LSB
((uint8_t *)&result)[1] = f.read() ; // MSB
return result ;

uint32_t read32(File f)
uint32_t result ;
((uint8_t *)&result)[0] = f.read() ; // LSB
((uint8_t *)&result)[1] = f.read() ;
((uint8_t *)&result)[2] = f.read() ;
((uint8_t *)&result)[3] = f.read() ; // MSB
return result ;

void printDirectory(File dir, int numTabs)
while (true)

File entry = dir.openNextFile() ;
if (! entry)
// no more files
break ;

for (uint8_t i = 0 ; i < numTabs ; i++)
Serial.print(’\t’) ;

Serial.print(entry.name()) ;
if (entry.isDirectory())
Serial.println("/") ;
printDirectory(entry, numTabs + 1) ;
else
// files have sizes, directories do not
Serial.print("\t\t") ;
Serial.println(entry.size(), DEC) ;

entry.close() ;

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

11 Messages

Rubrique Projets

LaBox, Une Centrale DCC polyvalente et abordable (1)

LaBox, Une Centrale DCC polyvalente et abordable (2)

LaBox, Une Centrale DCC polyvalente et abordable (3)

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Comment piloter trains et accessoires en DCC avec un Arduino (2)

Comment piloter trains et accessoires en DCC avec un Arduino (3)

Comment piloter trains et accessoires en DCC avec un Arduino (4)

SGDD : Système de Gestion DD (1)

SGDD : Système de Gestion DD (2)

SGDD : Système de Gestion DD (3)

La PWM : Qu’est-ce que c’est ? (1)

La PWM : Qu’est-ce que c’est ? (2)

La PWM : Qu’est-ce que c’est ? (3)

La PWM : Qu’est-ce que c’est ? (4)

Mise en oeuvre du Bus CAN entre modules Arduino (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

Un gestionnaire en C++ pour votre réseau (1)

Un gestionnaire en C++ pour votre réseau (2)

Un gestionnaire en C++ pour votre réseau (3)

Un gestionnaire en C++ pour votre réseau (4)

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)

Réalisation de centrales DCC avec le logiciel libre DCC++ (2)

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)

Contrôleur à télécommande infrarouge pour centrale DCC++

Gestion d’une gare cachée (1)

Gestion d’une gare cachée (2)

Gestion d’une gare cachée (3)

La carte Satellite V1 (1)

La carte Satellite V1 (2)

La carte Satellite V1 (3)

La carte Satellite V1 (4)

La carte Satellite V1 (5)

Block Automatique Lumineux à 8 cantons analogiques

Un décodeur DCC pour les plaques tournantes Fleischmann et Roco

Passage à niveau géré par Arduino (5)

Éclairer le réseau (3)

Éclairer le réseau (2)

Passage à niveau géré par Arduino (4)

Éclairer le réseau (1)

Une manette simple et autonome pour LaBox

Passage à niveau géré par Arduino (3)

Souris et centrale sans fil

Passage à niveau géré par Arduino (2)

Un programme pour régler facilement les servos moteurs avec un ESP32

Enseigne de magasin

Feux tricolores

TCO Web interactif avec des ESP32 et des ESP8266 (5)

Multi-animations lumineuses

TCO Web interactif avec des ESP32 et des ESP8266 (4)

TCO Web interactif avec des ESP32 et des ESP8266 (3)

TCO Web interactif avec des ESP32 et des ESP8266 (2)

TCO Web interactif avec des ESP32 et des ESP8266 (1)

Affichage publicitaire avec Arduino (2)

Affichage publicitaire avec Arduino (1)

Éclairer le réseau (4)

Va-et-vient pour deux trains

Boitier 3D pour la station DCC minimale

Mon premier décodeur pour les aiguillages DCC

Ma première manette pour les aiguillages DCC

Banc de test pour les décodeurs DCC

CDM-Rail pour Ma première centrale DCC (2)

CDM-Rail pour Ma première centrale DCC (1)

Rocrail pour Ma première centrale DCC

JMRI pour Ma première centrale DCC

Éclairer le réseau (5)

Une horloge à échelle H0

Etude d’un passage à niveau multivoies

L’Arduino et le système de commande numérique DCC

Un décodeur d’accessoire DCC versatile basé sur Arduino

Un moniteur de signaux DCC

Identifier et localiser vos trains avec le RFID/NFC et un bus CAN.

Automatisation du pont FLEISCHMANN 6152 (HO) avec un ESP32 (1)

Un automatisme de Passage à Niveau

Simulateur de soudure à arc

La rétro-signalisation sur Arduino

La génèse d’un réseau 100% Arduino

Calcul de la vitesse d’un train miniature avec l’Arduino

L’Arduino au coeur des systèmes de pilotage analogiques ou numériques

Une animation sonore

Une barrière infrarouge

Un TCO xpressnet

Un capteur RFID

Passage à niveau géré par Arduino (1)

Décodeur pour aiguillage à solénoïdes sur Arduino

Un décodeur DCC pour les signaux à deux ou trois feux sur Arduino NANO/UNO

Etude d’un passage à niveau universel

Réalisation pratique d’un système de mesure de vitesse à l’échelle N

Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation

Un décodeur DCC pour 16 feux tricolores

Chenillard de DEL

Block Automatique Lumineux avec la carte shield "Arduino 4 relays"

Réalisation d’un affichage de gare ARRIVEE DEPART

Ménage à trois (Ordinateur, Arduino, réseau)

Réalisation d’un va-et-vient automatique et réaliste

Communications entre JMRI et Arduino

Annonces en gare avec la RFID

Une croix de pharmacie animée avec Arduino UNO

Réalisation d’un wagon de mesure (distance et vitesse)

Les derniers articles

LaBox, Une Centrale DCC polyvalente et abordable (3)


Thierry

LaBox, Une Centrale DCC polyvalente et abordable (1)


Thierry

LaBox, Une Centrale DCC polyvalente et abordable (2)


Dominique, msport, Thierry

Un programme pour régler facilement les servos moteurs avec un ESP32


bobyAndCo

TCO Web interactif avec des ESP32 et des ESP8266 (5)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (4)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (3)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (2)


utpeca

TCO Web interactif avec des ESP32 et des ESP8266 (1)


utpeca

Affichage publicitaire avec Arduino (2)


catplus, Christian

Les articles les plus lus

Réalisation de centrales DCC avec le logiciel libre DCC++ (3)

La PWM : Qu’est-ce que c’est ? (1)

Mise en oeuvre du Bus CAN entre modules Arduino (2)

La rétro-signalisation sur Arduino

Une Passerelle entre le bus S88 et le bus CAN pour la rétro signalisation

Comment piloter trains et accessoires en DCC avec un Arduino (1)

Chenillard de DEL

Réalisation de centrales DCC avec le logiciel libre DCC++ (1)

Block Automatique Lumineux à 8 cantons analogiques

Comment piloter trains et accessoires en DCC avec un Arduino (2)