0% found this document useful (0 votes)
8 views4 pages

Code

The document contains an Arduino sketch for controlling an LED matrix display using the Adafruit NeoMatrix library. It includes functionality for reading and writing strings to EEPROM, displaying text with color transitions, and receiving input via Bluetooth. The program initializes the display, handles input, and manages the display of text in a scrolling manner.

Uploaded by

Jorge Oliveira
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views4 pages

Code

The document contains an Arduino sketch for controlling an LED matrix display using the Adafruit NeoMatrix library. It includes functionality for reading and writing strings to EEPROM, displaying text with color transitions, and receiving input via Bluetooth. The program initializes the display, handles input, and manages the display of text in a scrolling manner.

Uploaded by

Jorge Oliveira
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

// *** The Electronics Adda ***

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>
#include <EEPROM.h>

#define PIN 6
#define EEPROM_MIN_ADDR 0
#define EEPROM_MAX_ADDR 100
#define LEN 450

const String defaultText = " The Electronics Adda ";


// temp variable for storing the displayed text
String in = defaultText;

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN,


NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);

SoftwareSerial BTserial(0, 1); // RX | TX


const uint16_t colors[] = {
matrix.Color(255, 255, 0),
matrix.Color(255, 0, 255),
matrix.Color(0, 255, 255)};

void setup() {
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(150);
matrix.setTextColor(colors[0]);
randomSeed(analogRead(0));
BTserial.begin(9600);
//Serial.begin(9600);

char chararray[LEN];
if (eeprom_read_string(10, chararray, LEN)) {
//Serial.println(chararray);
in = chararray;
}
}

void loop() {
if (BTserial.available() > 0) {
in = BTserial.readString();
char temparray[in.length() + 1];
in.toCharArray(temparray, in.length() + 1);
if (strstr(temparray, "#") != NULL) {
in = strstr(temparray, "#") + 1;
char temp[in.length() + 1];
in.toCharArray(temp, in.length() + 1);
eeprom_write_string(10, temp);
}
else {
in = defaultText;
char temp[in.length() + 1];
in.toCharArray(temp, in.length() + 1);
eeprom_write_string(10, temp);
}
}

text(random(6));

void text(int colorbegin) {


int x = matrix.width();
int pass = 0;
while ( pass < 3) {
matrix.fillScreen(0);
matrix.setCursor(x, 0);
int len = in.length();
matrix.print(in);
if (--x < -len * 6) {
x = matrix.width();
pass++;
matrix.setTextColor(colors[(colorbegin + pass) % 3]);
}
matrix.show();
delay(50);
}
}

// Input a value 0 to 255 to get a color value.


// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return matrix.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return matrix.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return matrix.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}

//Write a sequence of bytes starting at the specified address.


//Returns True if the entire array has been written,
//Returns False if start or end address is not between the minimum and maximum
allowed range.
//If False was returned, nothing was written
boolean eeprom_write_bytes(int startAddr, const byte* array, int numBytes) {
int i;

if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes))


return false;

for (i = 0; i < numBytes; i++) {


EEPROM.write(startAddr + i, array[i]);
} return true;
}
//Writes an int value to the specified address.
boolean eeprom_write_int(int addr, int value) {
byte *ptr;

ptr = (byte*)&value;
return eeprom_write_bytes(addr, ptr, sizeof(value));
}

//Reads an integer value at the specified address


boolean eeprom_read_int(int addr, int* value) {
return eeprom_read_bytes(addr, (byte*)value, sizeof(int));
}

//Reads the specified number of bytes at the specified address


boolean eeprom_read_bytes(int startAddr, byte array[], int numBytes) {
int i;

if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes))


return false;

for (i = 0; i < numBytes; i++) {


array[i] = EEPROM.read(startAddr + i);
} return true;
}

//Returns True if the specified address is between the minimum and the maximum
allowed range.
//Invoked by other superordinate functions to avoid errors.
boolean eeprom_is_addr_ok(int addr) {
return ((addr >= EEPROM_MIN_ADDR) && (addr <= EEPROM_MAX_ADDR));
}

//Write a string, starting at the specified address


boolean eeprom_write_string(int addr, const char* string) {
int numBytes;
numBytes = strlen(string) + 1;

return eeprom_write_bytes(addr, (const byte*)string, numBytes);


}

//Reads a string from the specified address


boolean eeprom_read_string(int addr, char* buffer, int bufSize) {
byte ch;
int bytesRead;

if (!eeprom_is_addr_ok(addr)) return false;


if (bufSize == 0) return false;

if (bufSize == 1) {
buffer[0] = 0;
return true;
}

bytesRead = 0;
ch = EEPROM.read(addr + bytesRead);
buffer[bytesRead] = ch;
bytesRead++;

while ((ch != 0x00) && (bytesRead < bufSize) && ((addr + bytesRead) <=
EEPROM_MAX_ADDR)) {
ch = EEPROM.read(addr + bytesRead);
buffer[bytesRead] = ch;
bytesRead++;
}

if ((ch != 0x00) && (bytesRead >= 1)) buffer[bytesRead - 1] = 0;

return true;
}

You might also like