Estou trabalhando em um projeto que inicialmente é para funcionar assim, vai ter dois Arduinos e os dois vão precisar se comunicar.
No Arduino Mestre pretendo colocar algumas funções como um display 16x2, um menu de configurações e no Arduino Escravo controlar um motor de passo com a Biblioteca AccelStepper.

Eu estava olhando alguns exemplos da comunicação I2C e Serial, mas pelos exemplos que ele envia somente uma variável.

Preciso que o Arduino Mestre envie as informações como velocidade, aceleração e deslocamento. No Arduino Escravo preciso ler as informações que citei acima e retornar para o Arduino Mestre quando o deslocamento foi concluído.

Consigo fazer isto com a Comunicação I2C ou Serial ou tem alguma outra forma de fazer?

Exibições: 1447

Responder esta

Respostas a este tópico

Estava olhando as funções write e read, e olhei em um exemplo que tem como transmitir três dados da seguinte forma 10, 30, 20.

Porém não encontrei como pegar no Arduino mestre o valor de três variáveis e colocar como no exemplo e no Arduino Escravo pegar o valor recebido e distribuir em outras três variáveis.

Oi DCK, bom dia.

post o seu code  aqui, (mas como arquivo anexado), de ambos (Master e slave), par que possamos 

avaliar e auxilia-lo na sua dificuldade.

Rui

Boa Tarde Rui,

Ainda não consegui fazer o código do Arduino Master e slave, pois não pretendia usar dois arduinos mas como no arduino master tem muitas funções quando vou acionar o motor de passo ele fica dando umas travadas.

Também não consegui fazer o código da comunicação serial, pois ainda não entendi como transferir e receber vários dados.

Se você tiver algum documento ou exemplo ou link para me passar fico agradecido.

OI DCK,

não entendi sua observação dizendo que não pretendia usar 2 arduinos,

pois o titulo do seu tópico refere-se exatamente à isto !  ??

Rui

É que desenvolvi todo o código somente com um arduino, mas quando cheguei na parte para acionar o motor de passo ele trava as vezes.

Por esse motivo que pretendo usar mais um arduino como slave somente para acionar o motor de passo.

Ou tem outra alternativa melhor?

Não seria mais facil resolver o problema do travamento? 

Será que precisa de dois Arduinos?

Primeira questão :

- Qual a distância entre os dois Arduinos? isso vai definir o tipo de comunicação.

A distância é pequena, cerca de 10 cm.

Olá amigo,

Como vc utiliza serial para transmitir e receber, coloque tudo em uma string com os valores separados por virgula ou qualquer outra coisa:

String GetFromSerial()
{
String mySerialInput="";

// when characters arrive over the serial port...
if (Serial.available()) {
// wait a bit for the entire message to arrive
delay(100);
// read all the available characters
while (Serial.available() > 0) {
// Put char in string.
char str=Serial.read();
mySerialInput+=str;
}
}

return mySerialInput;
}

E depois no seu "master" separe na função que precise com:

if(inChar=='\n') {
aux=getValue(inBf, ',', 0);
int xval = aux.toInt();
aux=getValue(inBf, ',', 1);
int yval=aux.toInt();
aux=getValue(inBf, ',', 2);
int zval=aux.toInt();
aux=getValue(inBf, ',', 3);
int gval=aux.toInt();

String getValue(String data, char separator, int index)
{
int found = 0;
int strIndex[] = { 0, -1 };
int maxIndex = data.length()-1;
for(int i=0; i<=maxIndex && found<=index; i++){
if(data.charAt(i)==separator || i==maxIndex){
found++;
strIndex[0] = strIndex[1]+1;
strIndex[1] = (i == maxIndex) ? i+1 : i;
}
}
return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}

Olá Douglas,

    Só uma pequena dica,  você deseja trabalhar com blocos de dados,  já pensou em trabalhar com matrizes (arrays)  ?

     Estou estudando comunicação sem fio entre arduinos atraves de xbees e nrf24l01 e no geral se utilizam matrizes para blocos de dados de carga valida.

Eu já consegui comunicação serial I2C entre dois Arduinos.

Veja esse exemplo:

http://labdegaragem.com/forum/topics/projeto-alarme-sem-fio-arduino...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço