Jouer avec les écrans LCD : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
(Que faire avec cet écran ?)
Ligne 17 : Ligne 17 :
  
  
 +
==Afficher un logo Science Hack Day défilant==
 +
<code>
 +
/** modifs en cours.
 +
* The MIT License (MIT)
 +
*
 +
* Copyright (c) 2016 by Daniel Eichhorn
 +
*
 +
* Permission is hereby granted, free of charge, to any person obtaining a copy
 +
* of this software and associated documentation files (the "Software"), to deal
 +
* in the Software without restriction, including without limitation the rights
 +
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 +
* copies of the Software, and to permit persons to whom the Software is
 +
* furnished to do so, subject to the following conditions:
 +
*
 +
* The above copyright notice and this permission notice shall be included in all
 +
* copies or substantial portions of the Software.
 +
*
 +
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 +
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 +
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 +
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 +
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 +
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 +
* SOFTWARE.
 +
*
 +
*/
 +
/*
 +
///////////////////////////////////////////////////////////////////
 +
//                          BROCHAGE                            //
 +
//                      _________________                        //
 +
//                    /    D1 mini    \                      //
 +
//                -  |[ ]RST        TX[ ]| -                    //
 +
//                -  |[ ]A0        RX[ ]| -                    //
 +
//                -  |[ ]D0        D1[ ]| -                    //
 +
//            SCL -  |[X]D5        D2[ ]| -                    //
 +
//            SDA -  |[X]D6        D3[ ]| -                    //
 +
//                -  |[ ]D7        D4[ ]| LED_BUILTIN          //
 +
//                -  |[ ]D8        GND[X]| -                    //
 +
//                -  |[ ]3V3 .      5V[X]| -                    //
 +
//                    |      +---+      |                      //
 +
//                    |_______|USB|_______|                      //
 +
///////////////////////////////////////////////////////////////////                   
 +
*/
  
 +
// Include the correct display library
 +
// For a connection via I2C using Wire include
 +
#include <Wire.h>  // Only needed for Arduino 1.6.5 and earlier
 +
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
 +
// or #include "SH1106.h" alis for `#include "SH1106Wire.h"`
 +
// For a connection via I2C using brzo_i2c (must be installed) include
 +
// #include <brzo_i2c.h> // Only needed for Arduino 1.6.5 and earlier
 +
// #include "SSD1306Brzo.h"
 +
// #include "SH1106Brzo.h"
 +
// For a connection via SPI include
 +
// #include <SPI.h> // Only needed for Arduino 1.6.5 and earlier
 +
// #include "SSD1306Spi.h"
 +
// #include "SH1106SPi.h"
  
 +
// Include custom images
 +
#include "images.h"
 +
 +
// Initialize the OLED display using SPI
 +
// D5 -> CLK
 +
// D7 -> MOSI (DOUT)
 +
// D0 -> RES
 +
// D2 -> DC
 +
// D8 -> CS
 +
// SSD1306Spi        display(D0, D2, D8);
 +
// or
 +
// SH1106Spi        display(D0, D2);
 +
 +
// Initialize the OLED display using brzo_i2c
 +
// D3 -> SDA
 +
// D5 -> SCL
 +
// SSD1306Brzo display(0x3c, D3, D5);
 +
// or
 +
// SH1106Brzo  display(0x3c, D3, D5);
 +
 +
// Initialize the OLED display using Wire library
 +
SSD1306  display(0x3c, D6, D5);
 +
// SH1106 display(0x3c, D3, D5);
 +
 +
 +
#define DEMO_DURATION 3000
 +
typedef void (*Demo)(void);
 +
 +
int demoMode = 0;
 +
int counter = 1;
 +
int i =0;
 +
int a = 0;
 +
 +
void setup() {
 +
  Serial.begin(115200);
 +
  Serial.println();
 +
  Serial.println();
 +
 +
 +
  // Initialising the UI will init the display too.
 +
  display.init();
 +
 +
  display.flipScreenVertically();
 +
  display.setFont(ArialMT_Plain_10);
 +
 +
}
 +
 +
void drawFontFaceDemo() {
 +
    // Font Demo1
 +
    // create more fonts at http://oleddisplay.squix.ch/
 +
    display.setTextAlignment(TEXT_ALIGN_CENTER);
 +
    display.setFont(ArialMT_Plain_10);
 +
    display.drawString(0, 0, "SCIENCE HACK DAY");
 +
  //  display.setFont(ArialMT_Plain_24);
 +
  // display.drawString(62,16, "?=+");
 +
//    display.setFont(ArialMT_Plain_24);
 +
  //  display.drawString(0, 26, "Hello world");
 +
}
 +
 +
void drawTextFlowDemo() {
 +
    display.setFont(ArialMT_Plain_10);
 +
    display.setTextAlignment(TEXT_ALIGN_LEFT);
 +
    display.drawStringMaxWidth(0, 0, 128,
 +
      "Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore." );
 +
}
 +
 +
void drawTextAlignmentDemo() {
 +
    // Text alignment demo
 +
  display.setFont(ArialMT_Plain_10);
 +
 +
  // The coordinates define the left starting point of the text
 +
  display.setTextAlignment(TEXT_ALIGN_LEFT);
 +
  display.drawString(0, 10, "Left aligned (0,10)");
 +
 +
  // The coordinates define the center of the text
 +
  display.setTextAlignment(TEXT_ALIGN_CENTER);
 +
  display.drawString(64, 22, "Center aligned (64,22)");
 +
 +
  // The coordinates define the right end of the text
 +
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
 +
  display.drawString(128, 33, "Right aligned (128,33)");
 +
}
 +
 +
void drawRectDemo() {
 +
      // Draw a pixel at given position
 +
    for (int i = 0; i < 10; i++) {
 +
      display.setPixel(i, i);
 +
      display.setPixel(10 - i, i);
 +
    }
 +
    display.drawRect(12, 12, 20, 20);
 +
 +
    // Fill the rectangle
 +
    display.fillRect(14, 14, 17, 17);
 +
 +
    // Draw a line horizontally
 +
    display.drawHorizontalLine(0, 40, 20);
 +
 +
    // Draw a line horizontally
 +
    display.drawVerticalLine(40, 0, 20);
 +
}
 +
 +
void drawCircleDemo() {
 +
  for (int i=1; i < 8; i++) {
 +
    display.setColor(WHITE);
 +
    display.drawCircle(32, 32, i*3);
 +
    if (i % 2 == 0) {
 +
      display.setColor(BLACK);
 +
    }
 +
    display.fillCircle(96, 32, 32 - i* 3);
 +
  }
 +
}
 +
 +
void drawProgressBarDemo() {
 +
  int progress = (counter / 5) % 100;
 +
  // draw the progress bar
 +
  display.drawProgressBar(0, 32, 120, 10, progress);
 +
 +
  // draw the percentage as String
 +
  display.setTextAlignment(TEXT_ALIGN_CENTER);
 +
  display.drawString(64, 15, String(progress) + "%");
 +
}
 +
 +
void drawImageDemo() {
 +
    // see http://blog.squix.org/2015/05/esp8266-nodemcu-how-to-create-xbm.html
 +
    // on how to create xbm files
 +
    display.drawXbm(i-50, 16, WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits);
 +
    delay(50);
 +
    i = i+1;
 +
    a = a+2;
 +
    if (i>178){
 +
      i=0;
 +
      }
 +
      if (a>100){
 +
        a = 0;
 +
      }
 +
}
 +
 +
Demo demos[] = {/*drawFontFaceDemo, drawTextFlowDemo, drawTextAlignmentDemo, drawRectDemo, drawCircleDemo, drawProgressBarDemo, */drawImageDemo};
 +
int demoLength = (sizeof(demos) / sizeof(Demo));
 +
long timeSinceLastModeSwitch = 0;
 +
 +
void loop() {
 +
  // clear the display
 +
  display.clear();
 +
  // draw the current demo method
 +
  demos[demoMode]();
 +
 +
  display.setTextAlignment(TEXT_ALIGN_RIGHT);
 +
  display.drawString(10, 128, String(millis()));
 +
  // write the buffer to the display
 +
  display.display();
 +
 +
  if (millis() - timeSinceLastModeSwitch > DEMO_DURATION) {
 +
    demoMode = (demoMode + 1)  % demoLength;
 +
    timeSinceLastModeSwitch = millis();
 +
  }
 +
  counter++;
 +
  delay(10);
 +
}
 +
</code>
  
  
  
 
[[Catégorie:papifab]]
 
[[Catégorie:papifab]]

Version du 14 décembre 2018 à 07:44

Comment utiliser des écrans LCD ?

Matériel

Prix pour un système : 4,55€

tuto


Que faire avec cet écran ?

Afficher un logo Science Hack Day défilant

/** modifs en cours.

* The MIT License (MIT)
*
* Copyright (c) 2016 by Daniel Eichhorn
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/
/*

/////////////////////////////////////////////////////////////////// // BROCHAGE // // _________________ // // / D1 mini \ // // - |[ ]RST TX[ ]| - // // - |[ ]A0 RX[ ]| - // // - |[ ]D0 D1[ ]| - // // SCL - |[X]D5 D2[ ]| - // // SDA - |[X]D6 D3[ ]| - // // - |[ ]D7 D4[ ]| LED_BUILTIN // // - |[ ]D8 GND[X]| - // // - |[ ]3V3 . 5V[X]| - // // | +---+ | // // |_______|USB|_______| // ///////////////////////////////////////////////////////////////////

  • /

// Include the correct display library // For a connection via I2C using Wire include

  1. include <Wire.h> // Only needed for Arduino 1.6.5 and earlier
  2. include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`

// or #include "SH1106.h" alis for `#include "SH1106Wire.h"` // For a connection via I2C using brzo_i2c (must be installed) include // #include <brzo_i2c.h> // Only needed for Arduino 1.6.5 and earlier // #include "SSD1306Brzo.h" // #include "SH1106Brzo.h" // For a connection via SPI include // #include <SPI.h> // Only needed for Arduino 1.6.5 and earlier // #include "SSD1306Spi.h" // #include "SH1106SPi.h"

// Include custom images

  1. include "images.h"

// Initialize the OLED display using SPI // D5 -> CLK // D7 -> MOSI (DOUT) // D0 -> RES // D2 -> DC // D8 -> CS // SSD1306Spi display(D0, D2, D8); // or // SH1106Spi display(D0, D2);

// Initialize the OLED display using brzo_i2c // D3 -> SDA // D5 -> SCL // SSD1306Brzo display(0x3c, D3, D5); // or // SH1106Brzo display(0x3c, D3, D5);

// Initialize the OLED display using Wire library SSD1306 display(0x3c, D6, D5); // SH1106 display(0x3c, D3, D5);


  1. define DEMO_DURATION 3000

typedef void (*Demo)(void);

int demoMode = 0; int counter = 1; int i =0; int a = 0;

void setup() {

 Serial.begin(115200);
 Serial.println();
 Serial.println();


 // Initialising the UI will init the display too.
 display.init();
 display.flipScreenVertically();
 display.setFont(ArialMT_Plain_10);

}

void drawFontFaceDemo() {

   // Font Demo1
   // create more fonts at http://oleddisplay.squix.ch/
   display.setTextAlignment(TEXT_ALIGN_CENTER);
   display.setFont(ArialMT_Plain_10);
   display.drawString(0, 0, "SCIENCE HACK DAY");
 //  display.setFont(ArialMT_Plain_24);
  // display.drawString(62,16, "?=+");

// display.setFont(ArialMT_Plain_24);

 //  display.drawString(0, 26, "Hello world");

}

void drawTextFlowDemo() {

   display.setFont(ArialMT_Plain_10);
   display.setTextAlignment(TEXT_ALIGN_LEFT);
   display.drawStringMaxWidth(0, 0, 128,
     "Lorem ipsum\n dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore." );

}

void drawTextAlignmentDemo() {

   // Text alignment demo
 display.setFont(ArialMT_Plain_10);
 // The coordinates define the left starting point of the text
 display.setTextAlignment(TEXT_ALIGN_LEFT);
 display.drawString(0, 10, "Left aligned (0,10)");
 // The coordinates define the center of the text
 display.setTextAlignment(TEXT_ALIGN_CENTER);
 display.drawString(64, 22, "Center aligned (64,22)");
 // The coordinates define the right end of the text
 display.setTextAlignment(TEXT_ALIGN_RIGHT);
 display.drawString(128, 33, "Right aligned (128,33)");

}

void drawRectDemo() {

     // Draw a pixel at given position
   for (int i = 0; i < 10; i++) {
     display.setPixel(i, i);
     display.setPixel(10 - i, i);
   }
   display.drawRect(12, 12, 20, 20);
   // Fill the rectangle
   display.fillRect(14, 14, 17, 17);
   // Draw a line horizontally
   display.drawHorizontalLine(0, 40, 20);
   // Draw a line horizontally
   display.drawVerticalLine(40, 0, 20);

}

void drawCircleDemo() {

 for (int i=1; i < 8; i++) {
   display.setColor(WHITE);
   display.drawCircle(32, 32, i*3);
   if (i % 2 == 0) {
     display.setColor(BLACK);
   }
   display.fillCircle(96, 32, 32 - i* 3);
 }

}

void drawProgressBarDemo() {

 int progress = (counter / 5) % 100;
 // draw the progress bar
 display.drawProgressBar(0, 32, 120, 10, progress);
 // draw the percentage as String
 display.setTextAlignment(TEXT_ALIGN_CENTER);
 display.drawString(64, 15, String(progress) + "%");

}

void drawImageDemo() {

   // see http://blog.squix.org/2015/05/esp8266-nodemcu-how-to-create-xbm.html
   // on how to create xbm files
   display.drawXbm(i-50, 16, WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits);
   delay(50);
   i = i+1;
   a = a+2;
   if (i>178){
     i=0;
     }
     if (a>100){
       a = 0;
     }

}

Demo demos[] = {/*drawFontFaceDemo, drawTextFlowDemo, drawTextAlignmentDemo, drawRectDemo, drawCircleDemo, drawProgressBarDemo, */drawImageDemo}; int demoLength = (sizeof(demos) / sizeof(Demo)); long timeSinceLastModeSwitch = 0;

void loop() {

 // clear the display
 display.clear();
 // draw the current demo method
 demos[demoMode]();
 display.setTextAlignment(TEXT_ALIGN_RIGHT);
 display.drawString(10, 128, String(millis()));
 // write the buffer to the display
 display.display();
 if (millis() - timeSinceLastModeSwitch > DEMO_DURATION) {
   demoMode = (demoMode + 1)  % demoLength;
   timeSinceLastModeSwitch = millis();
 }
 counter++;
 delay(10);

}