Files

138 lines
5.6 KiB
Arduino

/*******************************************************************************
Noiasca Neopixel Display
02 basic example
Shows the basic print functions
http://werner.rothschopf.net/202005_arduino_neopixel_display_en.htm
by noiasca
2020-05-04
*******************************************************************************/
const byte ledPin = 12; // Which pin on the Arduino is connected to the NeoPixels?
const byte numDigits = 4; // How many digits (numbers) are available on your display
const byte pixelPerDigit = 16; // all Pixel, including decimal point pixels if available at each digit
const byte addPixels = 0; // unregular additional pixels to be added to the strip (e.g. a double point for a clock 12:34)
/*
Segments are named and orded like this
SEG_A
SEG_F SEG_B
SEG_G
SEG_E SEG_C
SEG_D SEG_DP
in the following constant array you have to define
which pixels belong to which segment
*/
/*
typedef uint8_t segsize_t; // fit variable size to your needed pixels. uint8_t --> max 8 Pixel per digit
const segsize_t segment[8] {
0b00000001, // SEG_A
0b00000010, // SEG_B
0b00000100, // SEG_C
0b00001000, // SEG_D
0b00010000, // SEG_E
0b00100000, // SEG_F
0b01000000, // SEG_G
0b10000000 // SEG_DP if you don't have a decimal point, just leave it zero
};
*/
typedef uint16_t segsize_t; // fit variable size to your needed pixels. uint16_t --> max 16 Pixel per digit
const segsize_t segment[8] {
0b0000000000000011, // SEG_A
0b0000000000001100, // SEG_B
0b0000000000110000, // SEG_C
0b0000000011000000, // SEG_D
0b0000001100000000, // SEG_E
0b0000110000000000, // SEG_F
0b0011000000000000, // SEG_G
0b1100000000000000 // SEG_DP if you don't have a decimal point, just leave it zero
};
/*
// match LED Segment of Display to Hardware - Muss zur Pixel-Anordnung der Hardware passen
// 3 individual Pixel per Segment:
typedef uint32_t segsize_t; // fit variable size to your needed pixels. uint32_t --> max 32 Pixel per digit
const segsize_t segment[8] {
_BV(2) | _BV(1) | _BV(0), // SEG_A // n of maximal 32 bits pixels per Segment
_BV(5) | _BV(4) | _BV(3), // SEG_B
_BV(8) | _BV(7) | _BV(6), // SEG_C
_BV(11) | _BV(10) | _BV(9), // SEG_D
_BV(14) | _BV(13) | _BV(12), // SEG_E
_BV(17) | _BV(16) | _BV(15), // SEG_F
_BV(20) | _BV(19) | _BV(18), // SEG_G
_BV(21) // SEG_DP
};
*/
const uint16_t ledCount(pixelPerDigit * numDigits + addPixels); // keeps track of used pixels
#include <Adafruit_NeoPixel.h> // install Adafruit library from library manager
Adafruit_NeoPixel strip(ledCount, ledPin, NEO_GRB + NEO_KHZ800); // create neopixel object like you commonly used with Adafruit
#include <Noiasca_NeopixelDisplay.h> // include the library after your segment definitions. download library from: http://werner.rothschopf.net/202005_arduino_neopixel_display_en.htm
Noiasca_NeopixelDisplay display(strip, segment, numDigits, pixelPerDigit, addPixels); // create display object, handover the name of your strip as first parameter!
void setup()
{
Serial.begin(115200);
Serial.println(F("\nNoiascaNeopixelDisplay\n02 basic example"));
strip.begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
strip.show(); // Turn OFF all pixels ASAP
strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
Serial.println(F("print float"));
display.clear();
display.print(12.3, 1); // print prints floats by default with two decimals. If you just need one decimal, use the print functionality to print only one decimal so if you receive
delay(1000);
Serial.println(F("direct adress individual digits with low level method"));
display.writeLowLevel(0, 255); // switch on the first 8 segment of digit 0
display.setColorFont(0x00FF00);
display.writeLowLevel(1, 0b10101010); // 4 pixels of digit 1
display.setColorFont(0x0000088);
display.writeLowLevel(2, 0b01010101); // 4 pixels of digit 1
display.show(); // send data to stripe - needed because writeLowLevel doesn' show data by default
delay(1000);
Serial.println(F(".write() ASCII Codes (if printable)"));
display.clear(); // delete content on display
display.write(48); // 0 // basic write method, expects ASCII code, ends with an .show() by default
display.write(49); // 1
display.write(50); // 2
display.write(51); // 3
delay(1000);
Serial.println(F("set a new Color and use print method - easy way"));
display.clear();
display.setColorFont(0x00FF00); // change color of font (active segments)
display.print(123); // print an integer on the display
}
void loop()
{
// put here other code which needs to run:
display.clear();
display.setColorFont(0x00AA00);
display.print(8888);
delay(2000);
display.clear();
display.setColorFont(0x00AA88);
display.print(1111);
delay(2000);
display.clear();
display.setColorFont(0xAAAA00);
display.print(random(10000));
display.setPixelColor(random(40), 0x0000ff); // direct access a pixel
display.show();
delay(2000);
}