Ola, minha primeira postagem e já é pedindo ajuda!!

seguinte sou leigo em arduino, estou tentando fazer com que meu painel led feito com mxa7219 imprima um texto contido num cartao sd, consigo ler o texto pela seria mas quando vou tentar jugar na matriz de led só vai numeros, agem pode me dar uma luz? segue o codigo que estou usando:

#include <SPI.h>
#include <SD.h>
#include <MD_MAX72xx.h>

/////////////////////////////////

//declarações
File myFile;
int tecla = 2;
int leitura;
int contador;
char c;

///////////////////////////////

// Numero de modulos utilizados
#define MAX_DEVICES 2
// Ligacoes matrix
#define DATA_PIN 4
#define CS_PIN 5
#define CLK_PIN 6
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// Velocidade do scroll
#define SCROLL_DELAY 80
// Colunas entre cada caracter
#define CHAR_SPACING 1

#define BUF_SIZE 75
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];

// int scrollDelay;

uint8_t scrollDataSource(uint8_t dev, MD_MAX72XX::transformType_t t)
{
static char *p = curMessage;
static uint8_t state = 0;
static uint8_t curLen, showLen;
static uint8_t cBuf[8];
uint8_t colData;

switch(state)
{
case 0:
showLen = mx.getChar(*p++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf);
curLen = 0;
state++;
if (*p == '\0')
{
p = curMessage;
}
case 1:
colData = cBuf[curLen++];
if (curLen == showLen)
{
showLen = CHAR_SPACING;
curLen = 0;
state = 2;
}
break;
case 2:
colData = 0;
curLen++;
if (curLen == showLen)
state = 0;
break;
default:
state = 0;
}
return(colData);
}

void scrollText(void)
{
static uint32_t prevTime = 0;
if (millis()-prevTime >= SCROLL_DELAY)
{
mx.transform(MD_MAX72XX::TSR);
prevTime = millis();
}
}

void setup(){
mx.begin();
mx.setShiftDataInCallback(scrollDataSource);
// Define o nivel de luminosidade
mx.control(MD_MAX72XX::INTENSITY, 1);
////////////////////////////////////////
Serial.begin(9600);
pinMode(tecla, INPUT);
while (!Serial) {
}
if (!SD.begin(7)){return;}
}
void loop(){
leitura = digitalRead(tecla);
if (leitura != 0) {
contador = contador + 1;
while(digitalRead(tecla) != 0) {}
}
if(contador == 3){
contador = 0;}
///////////////////////////////

// caso 1
if (contador == 0){
myFile = SD.open("texto1.txt");
if (myFile) {
scrollText();

while (myFile.available()) {
c = (myFile.read());
char msg[75];
sprintf(msg, "%d", c);
strcpy(curMessage, msg );
Serial.print(msg);
newMessage[0] = '\0';

}
// feixando
myFile.close();
}
else {
// erro de arquivo
Serial.println("erro ao abrir o arquivo");
}}


}

Exibições: 477

Responder esta

Respostas a este tópico

Oi ARS, boa tarde.

experimente mudar o "specifier"da função sprintf(msg, "%d", c);  para %c ou %s  e teste.

sprintf(msg, "%c", c); 

ou

sprintf(msg, "%s", c); 

Depois conta pra gente o resultado.

Rui

Obrigado Rui pela força, mesmo com as duas alterações que você sugeriu não funcionou, continua a imprimir apenas números!

agora foi, mas estou com alguns problemas ainda, quando começa a imprimir na matriz de led já começa da metade do texto, de depois de imprimir umas 3 vezes trava !


#include <SPI.h>
#include <SD.h>
#include <MD_MAX72xx.h>
/////////////////////////////////

//declarações
File myFile;
char c;
///////////////////////////////
// Numero de modulos utilizados
#define MAX_DEVICES 2
// Ligacoes matrix
#define DATA_PIN 4
#define CS_PIN 5
#define CLK_PIN 6
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// Velocidade do scroll
#define SCROLL_DELAY 100
// Colunas entre cada caracter
#define CHAR_SPACING 1
#define BUF_SIZE 100
char curMessage[BUF_SIZE];
char newMessage[BUF_SIZE];
char matriz[20];
int str;
int x=BUF_SIZE;
// int scrollDelay;
uint8_t scrollDataSource(uint8_t dev, MD_MAX72XX::transformType_t t)
{
static char *p = curMessage;
static uint8_t state = 0;
static uint8_t curLen, showLen;
static uint8_t cBuf[8];
uint8_t colData;
switch(state)
{
case 0:
showLen = mx.getChar(*p++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf);
curLen = 0;
state++;
if (*p == '\0')
{
p = curMessage;
}
case 1:
colData = cBuf[curLen++];
if (curLen == showLen)
{
showLen = CHAR_SPACING;
curLen = 0;
state = 2;
}
break;
case 2:
colData = 0;
curLen++;
if (curLen == showLen)
state = 0;
break;
default:
state = 0;
}
return(colData);
}
void scrollText(void)
{
static uint32_t prevTime = 0;
if (millis()-prevTime >= SCROLL_DELAY)
{
mx.transform(MD_MAX72XX::TSR);
prevTime = millis();
}}
void setup(){

mx.begin();
mx.setShiftDataInCallback(scrollDataSource);
// Define o nivel de luminosidade
mx.control(MD_MAX72XX::INTENSITY, 100);
////////////////////////////////////////
Serial.begin(9600);
while (!Serial) {}
if (!SD.begin(7)){return;}
}
void loop(){

myFile = SD.open("texto1.txt");
if (myFile) {
while (myFile.available()) {
c = (myFile.read());
matriz[x]=c;
x++;
printf(curMessage, "%c", matriz);
newMessage[0] = '\0';
Serial.println(curMessage);
scrollText();
}
// feixando
myFile.close();
}
else {
// erro de arquivo
Serial.println("erro ao abrir o arquivo");
}
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço