preciso separar uma estring em 2 pedaços:

exemplo:

my_string = "17 " 

separando ficaria = (1) e (7)


eu preciso imprimir o horário no display, como os minutos vão até 59, eu não queria escrever varias linhas de código para acada numero até 59, então fis de 0 a 9 e a intenção é pegar o valor da hora e do minuto e separar em 2, no caso se for (17)  primeiro eu mando imprimir o 1 depois seto o cursor para o lado e mando imprimir o numero 7 eu tentei usar o código:(.indexOf )

tempo_atual = rtc.getTimeStr(); //armazena em formato de string a hora atual na variavel (tempo_atual)
data_atual = rtc.getDateStr(); //armazena em formato de string a data atual na variavel (data_atual)

hora_atual = tempo_atual.substring(0,(tempo_atual.indexOf(":"))); 
minuto_atual = tempo_atual.substring(5,(tempo_atual.indexOf(":"))+1); 
segundo_atual = tempo_atual.substring(6,(tempo_atual.indexOf(" ")));
data_dia = data_atual.substring(0,(data_atual.indexOf(".")));
data_mes = data_atual.substring(5,(data_atual.indexOf("."))+1);


consegui separar o valor inteiro de (hora)  de (minuto) e de (segundo), mas não consegui usar para separar o valor recebido em 2 casas, 

estou usando a matemática para separar os valores, queria uma solução mais simples que está

//-INICIO---------------------------SEPARA HORA----------------------------------------------------------
if((hora_atual.toInt() >= 0) && (hora_atual.toInt() <= 9)){
hora_esquerda = 0;hora_direita = hora_atual.toInt();}

if((hora_atual.toInt() >= 10) && (hora_atual.toInt() <= 19)){ 
hora_esquerda = 1; hora_direita = hora_atual.toInt() - 10;}

if((hora_atual.toInt() >= 20) && (hora_atual.toInt() <= 24)){ 
hora_esquerda = 2; hora_direita = hora_atual.toInt() - 20;}

//-FINAL----------------------------SEPARA HORA-----------------------------------------------------------

//-INICIO---------------------------SEPARA MINUTO---------------------------------------------------------
if((minuto_atual.toInt() >= 0) && (minuto_atual.toInt() <= 9)){ 
minuto_esquerda = 0;minuto_direita = minuto_atual.toInt();}

if((minuto_atual.toInt() >= 10) && (minuto_atual.toInt() <= 19)){ 
minuto_esquerda = 1; minuto_direita = minuto_atual.toInt() - 10;}

if((minuto_atual.toInt() >= 20) && (minuto_atual.toInt() <= 29)){ 
minuto_esquerda = 2; minuto_direita = minuto_atual.toInt() - 20;} 

if((minuto_atual.toInt() >= 30) && (minuto_atual.toInt() <= 39)){ 
minuto_esquerda = 3; minuto_direita = minuto_atual.toInt() - 30;} 

if((minuto_atual.toInt() >= 40) && (minuto_atual.toInt() <= 49)){ 
minuto_esquerda = 4; minuto_direita = minuto_atual.toInt() - 40;}

if((minuto_atual.toInt() >= 50) && (minuto_atual.toInt() <= 59)){ 
minuto_esquerda = 5; minuto_direita = minuto_atual.toInt() - 50;} 
}//-FINAL---------------------------SEPARA MINUTO----------------------------------------------------------

Exibições: 3270

Responder esta

Respostas a este tópico

Boa noite, uma string nada mais é que um vetor de "char" entao logo para separa-la vc deve usar outra para receber os valores e chama-la dessa forma:

String my_string = "17 ";

char primeiro_numero = my_string[0]; // vai imprimir 1

char segundo_numero = my_string[1]; // vai imprimir 7

Espero ter ajudado, bons projetos!

Em vez de:
String my_string = "17 ";
Não seria:
char my_string[] = "17";
vide:
https://www.arduino.cc/en/Reference/String
Abcs

Amigo tenta assim:

my_string = "17 " ;

String str1= my_string.length(0);
String str2=my_string.length(1);

Serial.println("st1r="+str1+" str2="+str2+"!"); // Vai imprimir na serial: str1=1 srt2=7!

parceiro, testei sua sugestão no código a baixo e deu o seguinte erro: 

ERRO:

exit status 1
no matching function for call to 'String::length(int)'

CODIGO:


String my_string = "17 ";

void setup() {
Serial.begin(9600);}


void loop() {

String str1 = my_string.length(0);
String str2 = my_string.length(1);

Serial.println("st1r="+str1+" str2="+str2+"!"); // Vai imprimir na serial: str1=1 srt2=7!
}

cara, testei o seguinte codigo: e seu super certo, vlw mesmo



String my_string = "17 ";

void setup() {
Serial.begin(9600);

}

void loop() {

char primeiro_numero = my_string[0]; // vai imprimir 1
char segundo_numero = my_string[1]; // vai imprimir 7

Serial.println(primeiro_numero);
Serial.println(segundo_numero);

delay(1000);
}

Bom dia Vinivius, gostei desse display LCD.

Poderia informar o link do produto ?

Obrigado e abraços.

Oi JGAM, bom dia.

Acho que ele usou um LCD 20x4 normal e usou o recurso de Big NumbersFonts.

http://woodsgood.ca/projects/2015/02/17/big-font-lcd-characters/

Rui

Muito legal !
Obrigado e abraços .

esse modelo é o display (20x4) em conjunto com o modulo (I2C) para projetar esses numero maiores na tela criei 8 variaveis do tpo byte cada variavel formando um desenho especifico, depois criei uma logica, juntando os pedaços eu crio um numero, que tem o tamanho de 3 colunas de largura por 2 linhas de altura.

você pode observar que o numero está cheio de divisões que são as divisas entre uma coluna e outra 

video de exemplo:
https://www.youtube.com/watch?v=Dalk4M0rhBM

Muito bom ! Obrigado e abraços.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço