Suchcode

So verwenden Sie ein Sieben-Segment-LED-Display mit Arduino

So verwenden Sie ein Sieben-Segment-LED-Display mit Arduino

Sieben-Segment-LED-Anzeigen sind überall um uns herum - von Digitaluhren und Küchengeräten bis hin zu Fahrstuhlstockanzeigen und Anzeigetafeln. Sie sind eine der intuitivsten Möglichkeiten, numerische Informationen anzuzeigen, und das Erlernen der Steuerung mit einem Arduino ist eine grundlegende Fähigkeit für jeden Elektronikbegeisterten. Dieses Tutorial wird Sie anleiten, einen einfachen, aber vielseitigen Sieben-Segment-Anzeigetreiber zu bauen, der von 0 bis 9 zählen kann, und er ist so konzipiert, dass er mit sowohl gemeinsamer Anode als auch gemeinsamer Kathode funktioniert. Sie können dieses Projekt als Grundlage für den Bau einer Vielzahl praktischer Geräte nutzen, wie z. B. eines digitalen Zählers für Ihre Werkstatt, einer Temperaturanzeige für eine Wetterstation, eines Timers für ein Brettspiel oder eines einfachen Punktzählers für Ihren nächsten Familien-Spielabend.

Wie man ein sieben-Segment-LED-Display mit Arduino verwendet
Wie man ein siebensegmentiges LED-Display mit Arduino verwendet

Hardware-Komponenten

Um dieses Projekt nachzuvollziehen, benötigen Sie die folgenden Komponenten. Die Verdrahtung ist einfach, und die Komponentenliste ist minimal, was diesen Bau zu einem perfekten Projekt für Anfänger macht.

  • Arduino Uno (oder ein kompatibles Board)
  • 7-Segment-LED-Anzeige (gemeinsame Kathode oder gemeinsames Anoden)
  • 8x 1kΩ Widerstände (560Ω bis 1kΩ funktionieren gut)
  • Jumperdrähte
  • Brotbrett
    Wie man ein sieben-Segment-LED-Display mit Arduino verwendet
    Wie man ein Sieben-Segment-LED-Display mit Arduino verwendet

Verdrahtungsanleitung

Die Verkabelung für dieses Projekt verbindet jedes Segment des Displays mit einem digitalen Pin am Arduino, wobei für jedes Segment ein strombegrenzender Widerstand in Reihe geschaltet ist. Der entscheidende Unterschied in der Verkabelung hängt davon ab, ob Sie ein gemeinsames Anoden- oder gemeinsames Kathoden-Display haben. Bei einem gemeinsamen Anoden-Display sind alle Anoden (positive Beine) der internen LEDs miteinander verbunden und sollten an die 5V-Versorgung angeschlossen werden. Bei einem gemeinsamen Kathoden-Display sind alle Kathoden (negative Beine) miteinander verbunden und sollten mit Masse verbunden werden. Der Code behandelt automatisch die logische Inversion, die für Ihren speziellen Displaytyp erforderlich ist, sodass Sie nur sicherstellen müssen, dass die physische Verkabelung korrekt ist.

Arduino code to update the I2C address on the VL53L0X
Arduino-Code zum Aktualisieren der I2C-Adresse auf VL53L0X — Arduino code to update the I2C address on the VL53L0X

Wie im Video gezeigt, verbinden Sie die Segmentpins des Displays (A bis G und den Dezimalpunkt) der Reihe nach mit den Arduino-Pins 2 bis 9. Jeder Segmentpin sollte einen 1kΩ Widerstand in Serie haben. Der gemeinsame Pin (Anode oder Kathode, je nach Ihrem Display) sollte jeweils mit 5V oder GND verbunden werden. Es ist wichtig, für jedes Segment individuelle Widerstände zu verwenden, anstatt einen einzigen gemeinsamen Widerstand. Dies sorgt für eine gleichmäßige Helligkeit über alle Segmente hinweg, unabhängig davon, wie viele gleichzeitig leuchten. Bei einem einzelnen Widerstand würde der Strom ungleichmäßig geteilt, wodurch einige Zahlen dunkler erscheinen als andere.

Code-Erklärung

Der Code für dieses Projekt ist von Grund auf neu geschrieben und erfordert keine externen Bibliotheken. Er ist so gestaltet, dass er einfach zu konfigurieren und an Ihr spezifisches Display anzupassen ist. Die wichtigsten benutzerspezifizierbaren Teile befinden sich am Anfang der Datei.

#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

Die erste Zeile ist die wichtigste Einstellung. Sie müssen einstellen dietypeVariable zu1wenn Sie ein gemeinsames Anoden-Display verwenden und0Wenn Sie ein gemeinsames Kathodendisplay verwenden. Dieser einzelne Wert teilt dem Code mit, ob die logischen Signale invertiert werden sollen, um sicherzustellen, dass die richtigen Segmente leuchten.

Die nächsten beiden Zeilen definieren die Arduino-Pins, die mit dem Display verbunden sind. DiedisplayPinsDas Array enthält die Pins für die Segmente A bis G, unddicimalPointdefiniert den Pin für den Dezimalpunkt. Wenn Sie verschiedene Pins verwenden möchten, können Sie diese Werte ändern, aber es wird empfohlen, sie der Einfachheit halber in aufsteigender Reihenfolge zu belassen.

Der Code enthält eine benutzerdefinierte Funktion,writeDigit(int digit), was die primäre Methode ist, um eine Zahl anzuzeigen. Sie können diese Funktion aus Ihrem eigenen Code aufrufen, um jede Ziffer von 0 bis 9 anzuzeigen. Um beispielsweise die Zahl 5 anzuzeigen, rufen Sie einfach aufwriteDigit(5);Die Funktion übernimmt die komplexe Aufgabe, das korrekte Segmentmuster zu suchen und die Pins entsprechend einzustellen. Eine andere Hilfsfunktion,convertHighLow(int v), behandelt die Logikumschaltung zwischen gemeinsamen Anoden- und gemeinsamen Kathodenanzeigen, sodass Sie sich nicht um die interne Logik kümmern müssen.

Live-Projekt-Demonstration

Sobald die Verkabelung abgeschlossen und der Code hochgeladen ist, beginnt der Arduino, von 0 bis 9 zu zählen und zeigt jede Ziffer für eine Sekunde auf dem Sieben-Segment-Display an. Nach Erreichen der 9 wird der Dezimalpunkt für drei Sekunden aufleuchten, bevor die Zählung von neuem beginnt. Wie im Video zu sehen ist, sorgt die Verwendung einzelner Widerstände dafür, dass die Helligkeit der Ziffern konstant bleibt, unabhängig davon, ob ein einzelnes Segment (wie die Zahl 1) oder alle sieben Segmente (wie die Zahl 8) angezeigt werden. Dies ist eine erhebliche Verbesserung gegenüber der Verwendung eines einzelnen Widerstands, der zu spürbaren Helligkeitsunterschieden führen würde.

Kapitel

  • [00:00] Einführung in das Sieben-Segment-Display
  • [00:22] Verständnis von Sieben-Segment-Displays
  • Gemeinsame Anoden- vs. gemeinsame Kathodenverdrahtung
  • [03:25] Schritt-für-Schritt Verdrahtung mit Widerständen
  • [06:07] Demonstration und Überlegungen zur Helligkeit
  • [08:26] Code-Erklärung und Konfiguration
  • [14:25] Setup- und Hauptschleifenfunktionen
  • [16:33] Schlussfolgerungen und Anwendungen

Bilder

Wie man ein sieben Segment LED-Display mit Arduino verwendet
Wie man ein sieben Segment LED-Display mit Arduino verwendet
Arduino-Code zum Aktualisieren der I2C-Adresse auf VL53L0X
Arduino-Code zum Aktualisieren der I2C-Adresse auf VL53L0X
Wie man ein Sieben-Segment-LED-Display mit Arduino verwendet
Wie man ein Sieben-Segment-LED-Display mit Arduino verwendet
Wie man ein sieben-Segment-LED-Display mit Arduino verwendet
Wie man ein sieben-Segment-LED-Display mit Arduino verwendet
74HC595 LED-Anzeige: Sieben-Segment erklärt
74HC595 LED-Anzeige: Sieben-Segment erklärt
558-Lesson 21: Using a Seven-Segment Display | Arduino Step-by-Step Course
Sprache: C++
/*
 *  Robojax Arduino Step-by-Step Course
 * Lesson 21: Seven-Segment Display
 * Display number on seven-segment display with Arduino

   Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
   or watch this https://youtu.be/f3GqRMQ8jYs

 * Written by Ahmad Shamshiri for Robojax (Robojax.com)
 * on December 07, 2018 at 22:34 in Ajax, Ontario, Canada

 * 
  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

// array for seven-segment LED values. Do not change. 
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = { 
        { 0,0,0,0,0,0,1 },  // = 0
        { 1,0,0,1,1,1,1 },  // = 1
        { 0,0,1,0,0,1,0 },  // = 2
        { 0,0,0,0,1,1,0 },  // = 3
        { 1,0,0,1,1,0,0 },  // = 4
        { 0,1,0,0,1,0,0 },  // = 5
        { 0,1,0,0,0,0,0 },  // = 6
        { 0,0,0,1,1,1,1 },  // = 7
        { 0,0,0,0,0,0,0 },  // = 8
        { 0,0,0,0,1,0,0 }   // = 9     
        }; 
/*
 * 
 * @brief Writes digit to display 
 * @param digit (integer)
 * @return no return value
 * Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
 */        
void writeDigit(int digit) {
  // Robojax Seven-Segment Display for Arduino
  Serial.print(digit);
  Serial.print(" ");

   int digitValue;
  for (int i=0; i < 7; i++) 
  {

      digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
      Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor

  }// for i
}//writeDigit ends here

/*
 * 
 * @brief Converts HIGH and LOW based on the "type" variable value
 * if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
 * @param v (integer)
 * @return the convertedValue
 * Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
 */  
int convertHighLow(int v)
{
  int convertedValue;
    if(type ==0)
    {
      convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
    }else{
      convertedValue = v;// if common cathode, keep it the same
    } 

    return convertedValue;
}

void setup() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
  for(int d=0; d<8; d++)
  {
    pinMode(displayPins[d], OUTPUT);// set pin as output
    
  }
   pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
   digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode

  Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here


void loop() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
 for (int i=0; i<=9 ; i++) {
   writeDigit(i); 
   Serial.println("=====");
   delay(1000);
  }
  digitalWrite(dicimalPoint,LOW);// turn decimal point ON
  delay(3000);
 // writeDigit(4);
  // delay(3000);

}// loop ends here

Dinge, die Sie vielleicht brauchen

Dateien📁

Andere Dateien