Galera sou novo por aqui e tenho uma duvida, estou tentando criar uma função que acenda qualquer led através do que eu escrever na Serial, por exemplo se eu digita 13 o arduino acendera a porta 13, o codigo seria algo assim.

int numero = 0;
void setup() //funcao que é executada ao iniciar a aplicação
{
pinMode(13,OUTPUT);
pinMode(12,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
}
int ligaLed(int n) \\minha função para ligar leds
{
   digitalWrite(n,HIGH);
}
void loop()
{
   if (Serial.available() > 0)
{
   numero = Serial.read();
   Serial.print(numero);
   ligaLed(numero);
}
}

Mas o problema que estou tendo e que quando digito 13 por exemplo na serial ele me retorno no modelo ASCI com valor 4951, tem alguma biblioteca para eu fazer a conversão do ASCI para decimal ? Ou algum meio que eu poderia estar recebendo o numero digitado?

Agradeço desde jah!

Exibições: 7866

Responder esta

Respostas a este tópico

Faça assim:

int numero = 0;
void setup() //funcao que é executada ao iniciar a aplicação
{
pinMode(13,OUTPUT); 
pinMode(12,OUTPUT); 
pinMode(11,OUTPUT); 
Serial.begin(9600);
}
int ligaLed(int n) \\minha função para ligar leds
{
   digitalWrite(n,HIGH);
}
void loop()
{

   if (Serial.available() > 0)

{
   numero = Serial.parseInt();
   Serial.print(numero);
   ligaLed(numero);
}
}

Obrigado Mauro Funcionou perfeitamente!!

Nada, bicho, legal que deu certo.

Gostei desse código fica muito melhor do que eu costumava usar mais uma duvida como ficaria para desligar os leds tbm? 

Muito obrigado, 9 anos depois. Posso substituir Serial.read() por este Serial.parseInt()? Ou seria somente para variaveis do tipo Int?

Boa tarde,

recomendo não pegar carona em tópico de outros amigos, principalmente um tópico com

mais de 8 anos.

Crie seu próprio tópico, post seu projeto e sua dificuldade.

É de graça...  Não cobramos nada se a pergunta for inteligente......

Quanto maior a informação que vc fornecer melhor teremos condições de ajuda-lo.

NÃO cole código na área de texto do tópico. Anexe um  arquivo com seu código .

RV mineirin

Obrigado mineririn, tu acreditas que eu criei um tópico e exclui pois eu havia achado que só estaria tumultuando? Em breve vou reescrever.

49 = 1

51 = 3

Quando você digita o número 1 (caractere) você obtem o valor 49 (decimal)

Quando você digita o número 3 (caractere) você obtem o valor 51 (decimal)

Eu fiz uma função que converte inteiro em decimal veja abaixo:

{*
Função para converter inteiro em hexadecimal
Autor:Almir Bispo
Data:11/01/2014
Slogan:Yehovah é o Nome do Santo
*}
function Intparahex(intvalor:integer;forma:string):string;
var o1,o2,o3,o4:tstringlist;
   i,ii,iii,iiii,ord:integer;
   str,formato:string;
begin
if forma='0' then begin formato:='$';end;
if forma='1' then begin formato:='0x';end;
o1:=tstringlist.create;
o2:=tstringlist.create;
o3:=tstringlist.create;
o4:=tstringlist.create;
o1.Delimiter:=char(';');
o2.Delimiter:=char(';');
o3.Delimiter:=char(';');
o4.Delimiter:=char(';');

o1.DelimitedText:=('0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f');
o2.DelimitedText:=('0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f');
o3.DelimitedText:=('0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f');
o4.DelimitedText:=('0;1;2;3;4;5;6;7;8;9;a;b;c;d;e;f');
ord:=0;
for i:= 0 to o1.Count-1 do
begin
  for ii:= 0 to o2.count-1 do
  begin
    for iii:= 0 to o3.count-1 do
    begin
      for iiii:= 0 to o4.count-1 do
      begin
        if ord =intvalor then
        begin
        str:=o1.Strings[i]+o2.strings[ii]+o3.strings[iii]+o4.strings[iiii];
          Result :=formato+str;
        exit;
        end;
        inc(ord);
      end;
    end;
  end;

end;
   o1.free;
   o2.free;
   o3.free;
   o4.free;

end;

///fim

Uma outra forma que desenvolvi para receber um exadecimal pela porta e transformar em inteiro é:

variavel_string := inttostr(int64(chr(variant(porta.ReadData))));

Estes códigos é usando o "velho e bom pascal" e deve colocar a unidade strutils em USES.

Este código uso perfeitamente com Lazarus e componentes 5dpo para acesso a serial

gibroh_webmaster@hotmail.com

Amigo, me ajude, estou com um numero em hexadecimal no monitor serial, e quero passar pro arduino em decimal, como faço ? Estou usando o modulo bluetooth e ele fornece a intensidade do sinal de outro modulo em hexadecimal ( o ultimo da linha - 7FFF). Quero passar este numero para o arduino e transformar para decimal.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço