LusoRobótica - Robótica em Português
Software => Software e Programação => Tópico iniciado por: Flavio21 em 25 de Abril de 2011, 16:05
-
Boas..
Preciso de ajuda a configurar duas destas (nRF24L01 (http://www.arduino.cc/playground/InterfacingWithHardware/Nrf24L01)), uma como receptor outra como emissor..
No emissor tenho dois potenciómetros, frente e trás, e esquerda direita.. E gostava quando mexesse o potenciómetro para a frente manda-se sinal de "w" para a outra placa se isto for possível..
A programação que tenho é este, do user XicoMBD, para a pcb que eles fez para controlar os motores.. Agora queria juntar a nRF24L01 para funcionar como receptor..
int normalSpeed = 200; // General speed
int spinSpeed = 200; // Spins Speed
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0) {
char motors = Serial.read();
switch(motors) {
case 'w':
analogWrite(5,0);
analogWrite(6,normalSpeed);
analogWrite(9,0);
analogWrite(10,normalSpeed);
break;
case 's':
analogWrite(5,normalSpeed);
analogWrite(6,0);
analogWrite(9,normalSpeed);
analogWrite(10,0);
break;
case 'a':
analogWrite(5,0);
analogWrite(6,spinSpeed);
analogWrite(9,spinSpeed);
analogWrite(10,0);
break;
case 'd':
analogWrite(5,spinSpeed);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,spinSpeed);
break;
case 'g':
analogWrite(5,0);
analogWrite(6,0);
analogWrite(9,0);
analogWrite(10,0);
break;
}
}
}
Deixo aqui a layout do "comando"..
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg847.imageshack.us%2Fimg847%2F2880%2Fflavio3.png&hash=62b025a7a67c8d5d5ce2f7b72f3be768b5572730)
Cumps
-
E porque não mandas os valores dos potenciometros?
Assim tens logo controlo de velocidade e direcção.
-
E porque não mandas os valores dos potenciometros?
Assim tens logo controlo de velocidade e direcção.
Não sabia que isso dava para fazer..
Nem sei como fazer.. andei aqui a ver (http://www.arduino.cc/playground/Portugues/LearningAnalogInput) mas não me entendi :x
-
Não consegues perceber como funciona?
Então como é que estás a pensar ler os potenciometros para enviar o tal 'w'?
-
Não consegues perceber como funciona?
Então como é que estás a pensar ler os potenciometros para enviar o tal 'w'?
Nem por isso, o tal "w" era a minha primeira ideia, se da para controlar logo a velocidade e direcção melhor.. Só não sei é como..
-
Então mandas fazer um pcb com uns joysticks que nem sequer sabes como usar?
Não tens nenhum potenciometro?
Ligas como está nesse link, mexes nele e vê os valores a mudar na porta serial.
É das coisas mais faceis de usar e perceber..
-
Então mandas fazer um pcb com uns joysticks que nem sequer sabes como usar?
Não tens nenhum potenciometro?
Ligas como está nesse link, mexes nele e vê os valores a mudar na porta serial.
É das coisas mais faceis de usar e perceber..
Eu sabia que era possível fazer, só não sei como..
Tão vou testar isso a ver se pesco alguma coisa..
-
Até está em portugues, é só ler e fazer.
-
Até está em portugues, é só ler e fazer.
E em relação em enviar os dados, encontrei isto. Posso aproveitar isto.?
#include <Spi.h>
#include <mirf.h>
// converts a float into a char
// and sends it via nRF24L01
void transmit( float v)
{
byte c;
char buf[10];
dtostrf(v,9,3,buf);
for( int i=0 ; i<8 ; i++ )
{
c = buf[i];
Mirf.send(&c);
while( Mirf.isSending() ) ;
}
}
// sends a string via the nRF24L01
void transmit(const char *string)
{
byte c;
for( int i=0 ; string[i]!=0x00 ; i++ )
{
c = string[i];
Mirf.send(&c);
while( Mirf.isSending() ) ;
}
}
// send a CR/LF sequence via the nRF24L01
void transmitlf(void)
{
byte c;
c = '\r';
Mirf.send(&c);
while( Mirf.isSending() ) ;
c = '\n';
Mirf.send(&c);
while( Mirf.isSending() ) ;
}
void setup()
{
// init the transceiver
Mirf.init();
// we transmit only a single byte each time
Mirf.payload = 1;
// selecting a channel which is not too noisy
Mirf.channel = 90;
Mirf.config();
// Set 1MHz data rate
Mirf.configRegister(RF_SETUP,0x06);
// Set address - this one must match the
// address the receiver is using!
Mirf.setTADDR((byte *)"TX_01");
}
void loop()
{
float v01,v02;
// read in some values
v01 = analogRead(0);
v02 = analogRead(1);
// transmit a fixed token
transmit(" : ");
// transmit the first value
transmit(v01);
// transmit a separator
transmit(" : ");
// transmit a second token
transmit(v02);
// transmit a CR/LF for the PC
// software to sync to
transmitlf();
// ... just take your time
delay(100);
}
-
Depende, o analogRead retorna um inteiro entre 0 e 1023, e não um float..