LusoRobótica - Robótica em Português
Sistemas específicos => Arduino / AVR => Tópico iniciado por: Constantino em 23 de Junho de 2011, 19:57
-
Oi pessoal, vou direto ao ponto. Tenho um joystick de 2 eixos, e quero enviar seus valores via RF para outro Arduino. Já consegui enviar seus valores da seguinte forma:
#include <VirtualWire.h>
#undef int
#undef abs
#undef double
#undef float
#undef round
int poten1=4;
int ptvalor1;
int poten2=5;
int ptvalor2;
int pt1,pt2=0;
char buff[6];
char buf[6];
void setup()
{
// Initialise the IO and ISR
vw_set_ptt_inverted(true);
vw_setup(2000);
vw_set_tx_pin(13);
pinMode(poten1, INPUT);
pinMode(poten2, INPUT);
}
void loop()
{
ptvalor1=analogRead(poten1);
ptvalor2=analogRead(poten2);
int msgk = ptvalor1;
int msd=ptvalor2;
itoa(msgk, buff, 10);
itoa(msd, buf, 10);
const char *msg = buff ;
const char *ms=buf;
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx(); // Wait for message to finish
vw_send((uint8_t *)ms, strlen(ms));
vw_wait_tx();
delay(50);
}
mas como puderam ver, eu apenas envio String.Eu queria enviar apenas um caractere, da seguinte forma:
if(ptvalor1>1000){
buff='f';
}
if(ptvalor1<20){
buff='t';
}
if(ptvalor2>1000){
buf='d';
}
if(ptvalor2<20){
buf='e';
}
Dessa maneira eu poderia ler do outro lado apenas um caracter e fazer um carrinho andas por exemplo.
IDEIAS?
até mais;
-
Para enviar só um caracter ou seja um char/ variavel de 8 bits basta dividires o que lês com o analogRead por 4 para caber numa variavel de 8 bits e envias só isso.
-
Muito obrigado pela resposta, mas acho que não perguntei direito. O que quero enviar é são as letras ( r,t,d,e) para : frente,tras,direita,esquerda.
-
Então ai tens de ler o joystick e usar if's para se o valor for superior a x anda para a frente, se for inferior a y anda para trás, mas assim perdes por exemplo controlo de velocidade e outras coisas interessantes que podes fazer com um comando analógico.
-
Hummm entendi. Mas tipo, eu só posso enviar valores em char pela biblioteca virtualwire. Eu usei o itoa para transformar int em char. EU posso fazer isso do outro lado para fazer o inverso ?
-
Assim como só podes enviar chars pelo serial nativo. Para transformar uma string de numeros de volta num inteiro les caracter a caracter e metes num array(ou seja montas a string de novo e terminas com um \0) e depois usas a função atoi que faz o inverso da itoa.