Popis
LED driver modul, kterým lze ovládat např. dva sedmi segmentové displeje. Modul je navrhnut v SMD variantě.
Desky se dají spojit za sebe a tím připojit na stejné piny více LED.
Obvod
Příklad kódu
V tomto příkladu je využita knihovna LedControl a ParseNumber.
#include "LedControl.h"
#include "ParseNumber.h"
// Pin 12 to Data In, 11 to Clk, 10 to LOAD, number of devices is 2
LedControl lc = LedControl(12, 11, 10, 2);
/* 4 digits parser */
ParseNumber parser = ParseNumber(4);
void setup() {
// Initialize the 2 MAX7219 devices
for (int k = 0; k < 2; k++) {
lc.shutdown(k, false); // Enable display
lc.setIntensity(k, 15); // Set brightness level (0 is min, 15 is max)
lc.clearDisplay(k); // Clear display register
}
}
void loop() {
parser.parseInt(-5);
setDisplay(0, parser.getData(), parser.getDataSize(), parser.getDecimalPointIndex());
parser.setStringTrimRight(false);
parser.parseString("abcde", false);
parser.setStringTrimRight(true);
setDisplay(1, parser.getData(), parser.getDataSize(), parser.getDecimalPointIndex());
parser.setShowTrailingZeroes(true);
parser.parseFloat(-2.3);
setDisplay(2, parser.getData(), parser.getDataSize(), parser.getDecimalPointIndex());
parser.setShowTrailingZeroes(false);
parser.parseFloat(5647);
setDisplay(3, parser.getData(), parser.getDataSize(), parser.getDecimalPointIndex());
}
void setDisplay(uint8_t display, byte * data, uint8_t dataSize, uint8_t decimalPointIndex) {
uint8_t addr = display / 2;
for (uint8_t i = 0; i < dataSize; i++) {
/* first index of display in MAX */
uint8_t di = ((display % 2 == 0) ? 4 : 0);
if (data[i] >= '0' && data[i] <= '9') {
/* set digit */
lc.setDigit(addr, di + i, data[i] - '0', (decimalPointIndex == i));
} else if (data[i] == 0) {
lc.setChar(addr, di + i, ' ', false);
} else {
lc.setChar(addr, di + i, data[i], false);
}
}
}
Soubory