Go Down

Topic: [Resolvido] Arduino + Android + Amarino (Read 1 time) previous topic - next topic

lorena_danielle

Feb 10, 2013, 12:28 am Last Edit: Feb 15, 2013, 01:12 pm by lorena_danielle Reason: 1
Olá

Estou tentando conectar o android no arduino por BT, comprei o BT, que é um JY-MCU.

Estou tentando fazer algo bem básico, usar um togglebutton para ligar ou desligar o led.
Já conectei tudo na Protoboard, criei e compilei os códigos, já coloquei o código no arduino e um apk que fiz no meu celular, um Razr I em que o android é 4.0.

Basicamente liguei o BT do celular, pareei com o BT que está no arduino e iniciei a aplicação.

Mas não acontece nada =[

Abaixo segue os códigos:
Arduino:
Code: [Select]

#include <MeetAndroid.h>


int ledPin1 = 2;
int ledPin2 = 4; //seta o pino 13 do arduino para ligar o led

MeetAndroid meetAndroid;


void setup(){
 Serial.begin(9600);
 
 meetAndroid.registerFunction(led1,'x');  
 meetAndroid.registerFunction(led2,'y');    

 
 pinMode(ledPin1, OUTPUT); //inicializa o pino digital 13 como saida
 pinMode(ledPin2, OUTPUT); //inicializa o pino digital 13 como saida
 
}


void loop(){  
 meetAndroid.receive();
}

void led1(byte flag , byte numOfValues){  
 Serial.print(meetAndroid.getInt());
 analogWrite(ledPin1,  meetAndroid.getInt());
}

void led2(byte flag , byte numOfValues){  
 analogWrite(ledPin2,  meetAndroid.getInt());
 Serial.print(meetAndroid.getInt());
}


Android:
Code: [Select]

import android.os.Bundle;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ToggleButton;
import at.abraxas.amarino.Amarino;
import android.view.Menu;

public class MainActivity extends Activity implements View.OnClickListener{

private static final String DEVICE_ADDRESS = "00:12:09:11:13:39";

private ToggleButton tbOnOffEsq;
private ToggleButton tbOnOffDir;
public int EsqOnOff, DirOnOff;


/** Called when the activity is first created. */
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Amarino.connect(this, DEVICE_ADDRESS);

EsqOnOff = EsqOnOff = 0;
tbOnOffEsq = (ToggleButton) findViewById(R.id.ledEsq);
tbOnOffDir = (ToggleButton) findViewById(R.id.ledDir);

//Evento ao clicar no ToogleButton
tbOnOffEsq.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       if (tbOnOffEsq.isChecked()) {
        EsqOnOff = 1;
       } else {
        EsqOnOff = 0;
       }
   }
});

tbOnOffDir.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       if (tbOnOffDir.isChecked()) {
        DirOnOff = 1;
       } else {
        DirOnOff = 0;
       }
   }
});

Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'x', EsqOnOff);
Amarino.sendDataToArduino(this, DEVICE_ADDRESS, 'y', DirOnOff);
}

@Override
protected void onStart() {
super.onStart();
}

@Override
protected void onStop() {
super.onStop();
// stop Amarino's background service, we don't need it any more
Amarino.disconnect(this, DEVICE_ADDRESS);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}


Já testei tudo separadamente, testei os leds e o BT, eu consegui acender o led usando meu pc com os módulo BT que está no arduino.
Mas pelo smartphone eu não consigo .-.

Alguém pode me ajudar? =]

HugoPT

Quote

int ledPin1 = 2;
int ledPin2 = 4; //seta o pino 13 do arduino para ligar o led


a variavel ledPin2 recebe o valor de 4 mas no comentario dizes que é o pino 13 do arduino!! errado
Quote
pinMode(ledPin1, OUTPUT); //inicializa o pino digital 13 como saida
  pinMode(ledPin2, OUTPUT); //inicializa o pino digital 13 como saida

Aqui novamente configuras o pino errado como saida.Nao sei se apenas tens o comentario errado ou estas mesmo trocando o pino.
Fica dificil entender...
Quote
void loop(){ 
  meetAndroid.receive();
}

void led1(byte flag , byte numOfValues){ 
  Serial.print(meetAndroid.getInt());
  analogWrite(ledPin1,  meetAndroid.getInt());
}

void led2(byte flag , byte numOfValues){ 
  analogWrite(ledPin2,  meetAndroid.getInt());
  Serial.print(meetAndroid.getInt());
}


Na loop tens o metodo do objecto  meetAndroid.receive() e mais abaixo criaste duas funçoes que nunca sao chamadas em lado nenhum na tua loop, ou seja os leds nunca irao fazer nada.


Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

lorena_danielle

Obga pela resposta =]

Os comentários estão escritos errados, eu só copio e colo a linha e altero o pino mas me esqueço de mudar no comentário.

Baseei meu código em outros na internet e pelo que eu entendi, depois de registrarmos as funções no setup e colocamos a linha de código abaixo dentro do loop
  meetAndroid.receive();

A cada iteração, dependendo do char recebido, uma função correspondente aquele char seria chamada.

Eu não consigo colocar a chamada das funções no código pq eu não tenho os argumentos, esse valor eu recebo do celular =[

HugoPT

#3
Feb 11, 2013, 12:38 am Last Edit: Feb 11, 2013, 12:42 am by HugoPT Reason: 1
Quote
Eu não consigo colocar a chamada das funções no código pq eu não tenho os argumentos, esse valor eu recebo do celular =[

A funçao como ela esta nunca vai funcionar, o teu programa esta mal concebido, tens de o repensar porque nao estas no caminho certo.
Eu nao conheço essa lib mas a ser verdade que o meetAndroid.receive() te devolve um char entao tens de o receber em alguma variavel ou entao passa-lo como argumento para outra.
char temp = meetAndroid.receive(); // algo assim
O programa nao vai fazer magia e saltar para as funçoes que escreves-te so porque la estao.
Ja agora o que faz o metodo receive precisamente?

O modulo bluethooth que tens deve ligar na porta Serie, ja tentaste por o chip do arduino em reset para ele se manter calado e veres se os valores te aparecem na porta Serie?
Assim podes olhar para o que se passa na Serie abrindo a porta que o arduino usa.
Desta forma podes testar o programa vindo do android para teres certeza que ele te esta a mandar, o que estas a espera.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

Eu vejo duas coisas...

Segundo isto:

http://www.mathias-wilhelm.de/arduino/projects/bluetooth-amarino/?PHPSESSID=iuu4b974luemd815eh21dmbma2

o método receive é feito para processar eventos. Aliás, o método receive apenas retorna um bool, logo não é daí que ela vai ler os valores.
No entanto, seria interessante, ver o que é que esse método retorna.

Depois vejo algo que pode não estar correcto ou pelo menos não condiz com o teu código.

Tu no Android, mandas o valor 0 ou 1.

Code: [Select]
if (tbOnOffEsq.isChecked()) {
        EsqOnOff = 1;
        } else {
        EsqOnOff = 0;
        }


Mas depois fazes um analogWrite... um analogWrite de 0 ou 1 é a mesma coisa.
Experimenta fazer digitalWrite...

Code: [Select]
void led2(){  //Não precisas de parametros aqui. Aliás, isto deveria dar um warning... 
  int rec = meetAndroid.getInt();
  digitalWrite(ledPin2,  rec);
  Serial.println("led2 enter");
  Serial.println((int) rec);
}


Chegas a ver algo impresso no Serial Port? A julgar pelo teu código deverias ver 0 e 1 a chegar... Experimenta a função como eu a coloquei em cima. Com a função escrita assim deverás ver se o evento foi processado e ver "led2 enter"impresso no Serial Port.

A julgar pelo exemplo do link que coloquei em cima, isto é realmente a única coisa que está a faltar. :\

Experimenta e diz o que vês.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

HugoPT

Quote
meetAndroid.registerFunction(led1,'x'); 
  meetAndroid.registerFunction(led2,'y');   

Ãgora vejo onde as funçoes sao carregadas, defacto nao li correctamente o teu codigo ao ver que passas aqui as funçoes  :smiley-sad-blue:
Desculpa pelo mau conselho
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

lorena_danielle

Novamente obgda pelas respostas =]

Alterei o código do arduino com as alterações sugeridas, compilei e coloquei no arduino, testei novamente mas continua a mesma coisa.

Resolvi fazer uns testes para ver onde está o problema, baixei um app para o android chamado: Bluetooth RSSI, que é um app para enviar dados via BT, conectei no no BT do arduino e enviei os números 0 e 1 e funcionou \o/

Obviamente tive que mudar um pouco o código para um código mais simples, mas foi só para teste e deu certo, realmente, qdo envio um dado devo usar o digitalWrite ao invés do analogWrite, isso estava errado.

Então acredito que agora o erro esteja somente no aplicativo, estou pesquisando um pouco mais e vendo alguns códigos fontes na internet.
Qdo eu conseguir algo mais já posto.

=]

lorena_danielle


Quote
meetAndroid.registerFunction(led1,'x'); 
  meetAndroid.registerFunction(led2,'y');   

Ãgora vejo onde as funçoes sao carregadas, defacto nao li correctamente o teu codigo ao ver que passas aqui as funçoes  :smiley-sad-blue:
Desculpa pelo mau conselho


Sem problemas, hehe

=]

lorena_danielle

Consegui, havia mais dois erros, o primeiro era que eu não estava usando o apk Amarino para conectar no BT.
O segundo é um erro no código, estava colocando os eventos dos toggle buttons dentro do método OnCreate, enquanto eles deveriam estar no onClick.

=]

Go Up
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview