Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bluetooth 8x8 LED-matrix met Scrollende Tekst – Arduino Project

Onderdelen en benodigdheden

Arduino Nano R3×1
HC-05 Bluetooth-module×1
8x8 LED-matrix module met MAX7219×7
6,8 kOhm Weerstand×1
2,2 kOhm Weerstand×2

Nodige tools en machines

  • Solderbout (standaard)

Apps en online diensten

  • Arduino IDE
  • Bluetooth SPP Pro

Over dit project

Na verschillende pogingen om scrollende tekst op de 8x8-matrix te maken, vond ik de meest complete handleiding op de Embedded Lab-pagina: Embedded Lab.

Het apparaat bevat een Arduino Nano, Bluetooth-module voor het ontvangen van data van de smartphone en 8x8 LED-matrices aangedreven door MAX7219.

In tegenstelling tot daar, gebruikte ik kant-en-klaar 8x8-matrixmodules met MAX7219-chip die heel goedkoop op eBay of AliExpress te koop zijn. Op dat moment had ik maar 7 modules, dus maakte ik een kleine codewijziging. Een Android-applicatie bestaat niet meer op de Google Play Store, dus je kunt het downloaden van:

Bluetooth SPP Pro

Het kan de scrollsnelheid, helderheid van LEDs, pauzeren, tekst wissen, en verschillende vooraf gedefinieerde tekstknoppen bedienen.

Uiteindelijk stopte ik het hele apparaat in een doos, die ik maakte van PVC-materiaal dat ik met zwart behangpapier bekleedde.

Arduino-bibliotheken:

Code

CodeArduino
/* Hier zijn de commando's die Arduino herkent.
1. Elke tekenreeks moet binnen haakjes gestuurd worden.
   Voorbeeld: Als je een bericht "Hallo! Hoe gaat het?" wilt tonen,
   moet je het als volgt sturen: (Hallo! Hoe gaat het?)
   Wanneer Arduino het eerste teken '(' ontvangt, begrijpt het dat de komende tekens
   displaydata zijn tot ')' ontvangen wordt. Het bericht wordt gescrold van rechts naar links.
2. Display-intensiteit kan verhoogd of verlaagd worden door /+ of /- te sturen.
   Elke keer dat Arduino '/' ontvangt, begrijpt het dat het een commando is.
   Het ondersteunt 16 helderheidsniveaus.
3. Op dezelfde manier kan scrollsnelheid verhoogd of verlaagd worden door /< of /> te sturen.
4. /p wordt gebruikt om het scrollende bericht te pauzeren. Opnieuw sturen hervat de scroll.
5. /e wordt gebruikt om de buffer te wissen en het display leeg te maken.

Aansluitingen:
Easy Matrix    Arduino
VCC            +5V
DIN            MOSI (Pin 11)
LOAD           pinCS gedefinieerd in onderstaand programma
CLK            SCK (Pin 13)
GND            Gnd

UART-communicatie gebeurt op 9600 baud.
Geschreven door: Rajendra Bhatt
Contact: admin@embedded-lab.com
Easy Matrix productlink: https://embedded-lab.com/blog/?p=9186 */
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
int pinCS = 10; // CS aan deze pin, DIN aan MOSI en CLK aan SCK (cf https://arduino.cc/en/Reference/SPI)
int numberOfHorizontalDisplays = 7;
int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
int scrollspeed = 100; // Standaard scrollsnelheid (milliseconden)
int spacer = 1; // Ruimte tussen twee tekens
int width = 5 + spacer; // Font-breedte is 5 pixels
boolean inChar = false, NewData = false, pause = false;
boolean dataAvailable = false;
char inputString[512];
int count = 0, BTvalue = 5;
void setup() {
  matrix.setIntensity(1); // Waarde tussen 0 en 15 voor helderheid
  // Aanpassen aan eigen behoeften
  matrix.setPosition(0, 0, 0); // Eerste display op <0, 7>
  matrix.setPosition(1, 1, 0); // Tweede display op <1, 0>
  matrix.setPosition(2, 2, 0); // Derde display op <2, 0>
  matrix.setPosition(3, 3, 0); // Vierde display op <3, 0>
  matrix.setPosition(4, 4, 0); // Vijfde display op <4, 0>
  matrix.setPosition(5, 5, 0); // Zesde display op <5, 0>
  matrix.setPosition(6, 6, 0); // Zevende display op <6, 0>
  // ...
  // matrix.setRotation(0, 2); // Eerste display omgekeerd
  // matrix.setRotation(3, 2); // Hetzelfde geldt voor laatste display
  matrix.fillScreen(0);
  matrix.write();
  Serial.begin(9600); // Seriële communicatie initialiseren
  // Interrupt 0 op digitale pin 2 gebruiken.
  pinMode(2, INPUT);
  digitalWrite(2, LOW);
  attachInterrupt(0, serialInterrupt, CHANGE);
}
void loop(){
  if(dataAvailable){
    display_data();
  }
}
void display_data(){
  for (int i = 0; i < width * count + matrix.width() - 1 - spacer; i++) {
    matrix.fillScreen(0);
    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2; // Tekst verticaal centreren
    while (x + width - spacer >= 0 && letter >= 0) {
      if (letter < count) {
        matrix.drawChar(x, y, inputString[letter], HIGH, LOW, 1);
      }
      letter--;
      x -= width;
    }
    matrix.write(); // Bitmap naar display sturen
    if(!dataAvailable){
      i = width * count + matrix.width() - 1 - spacer;
      matrix.fillScreen(LOW);
      matrix.write();
    }
    if(NewData){
      i = 0;
      matrix.fillScreen(LOW);
      matrix.write();
      NewData = false;
    }
    while(pause == true){
      delay(0);
    } // Pauzeer hier als pauze-commando ontvangen
    delay(scrollspeed);
  }
}
// Volatile, omdat gewijzigd in een ISR.
volatile boolean inService = false;
void serialInterrupt(){
  if (inService) return; // Je was niet in service. Nu wel.
  inService = true;
  // Interrupts weer inschakelen, om Serial te laten werken. Alleen als inService false is.
  interrupts();
  while(!Serial.available());
  while (Serial.available()) {
    char ch = Serial.read();
    if(ch =='('){
      count = 0;
      inChar = true;
      while(inChar){
        if (Serial.available()) {
          ch = Serial.read();
          if(ch == ')'){
            inChar = false;
            dataAvailable = true;
          } else{
            inputString[count] = ch;
            count++;
          }
          if(count > 0) {
            NewData = true;
          }
        }
      }
    }
    if(ch =='/'){
      // Commandomodus
      inChar = true;
      while(inChar){
        if (Serial.available()) {
          ch = Serial.read();
          // '/+' is voor helderheid verhogen
          if(ch == '+'){
            if(BTvalue < 15) {
              BTvalue++;
              matrix.setIntensity(BTvalue);
            }
            break;
          }
          // '/-' is voor helderheid verlagen
          if(ch == '-'){
            if(BTvalue > 0){
              BTvalue--;
              matrix.setIntensity(BTvalue);
            }
            break;
          }
          // '/>' is om scroll te vertragen
          if(ch == '>'){
            if(scrollspeed < 200) {
              scrollspeed = scrollspeed + 20;
            }
            break;
          }
          // '/<' is om scroll te versnellen
          if(ch == '<'){
            if(scrollspeed > 10){
              scrollspeed = scrollspeed - 10;
            }
            break;
          }
          // '/e' is om display te wissen
          if(ch == 'e'){
            dataAvailable = false;
            break;
          }
          // '/p' is om display te pauzeren
          if(ch == 'p'){
            if(pause == false){
              pause = true;
            } else {
              pause = false;
            }
            break;
          }
          else {
            break; // Onherkend commando
          }
        }
      }
    }
  } // while(serial.available)
  inService = false;
}

Schema's

Bluetooth 8x8 LED-matrix met Scrollende Tekst – Arduino Project

Productieproces

  1. Slimme spaarpot bouwen: Muntenacceptor besturen met Arduino Nano
  2. Bouw een 24×16 LED Pong-console met Arduino Nano & MAX7219
  3. Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
  4. Bluetooth Tekst Teleporter: Arduino + Android Project
  5. Spraakgestuurde huishoudapparaten: Bluetooth-besturing met Google Assistant
  6. Een 8×8 LED-matrix beheersen met Arduino Uno: Stap-voor-stap handleiding
  7. Accurate zonnestralingsmeting met Arduino UNO en Ethernet Shield
  8. Arduino Uno & Bluetooth voor afstandsbediening van auto: stap-voor-stap handleiding
  9. SMS Versturen & Ontvangen met GSM SIM900 Shield voor Arduino Mega
  10. Arduino-aangedreven HID UPS: Upgrade je dummy voeding naar USB-compatibele backup
  11. Smartphone‑gestuurde Bluetooth‑muis: Bouw je eigen virtuele joystick