Boa tarde para todos os colegas garagistas,

Estou com um projeto complexo e o dividi em várias partes menores, e uma delas me deixou em duvida. Quero comunicar 2 arduinos, em fase de teste, ligando um ao outro vita TX/RX, mas no futuro via bluetooth ou xbee.
A minha duvida é como passar o valor de duas ou mais variáveis de um arduino para outro. Por exemplo, o valor de 2 potenciômetros, formando um par (x,y). Gostaria de mandar esse par de um arduino master para um arduino slave, que interpretara os resultados e executara as funções remotamente.
Quero expor também, que na verdade, os 2 potenciômetros são a leitura de um acelerômetro que utiliza I2C.
Obrigado a todos o tempo, e se não tiver sido claro, por favor, falem.

Exibições: 1776

Responder esta

Respostas a este tópico

Como você faria para uma variável?

Por exmplo, valAccelX e valAccelY, os dois precisam ser interpretados separadamente, como se cada um fosse o valor de rotaçao de um servo independente.

certo.. mas digamos que vc fosse enviar só valAccelX. Como enviaria e receberia pela Serial?

Um simples Serial.println no arduino master, e no slave,

if(Serial.availeble){

myServo.write(Serial.read);

}

Num rascunho bem basal.

Estou dizendo arduino master/slave, mas acredito que nao se aplique aqui.

Bem... algo mais simples:

Nesta função eu desejava receber 2 byte. Um pro ID do dispositivo, outro pro comando.

Usei para abrir e fechar a comunicação os caracteres 33 e 120. Mas fica a seu carater, inclusive usando os caracteres de comando da tabela.

//------------- Protocolo Serial
// Formato:  [!][Id][Comando][x]
void protocol(){
  memset(input, '\0', 5);
  byte inByte = '\0';
  delay(100);
  while(inByte != 33) {
    inByte= Serial.read(); // Wait for the start of the message
  }
  if(inByte == 33) {
    while(Serial.available() < 3){ // Wait until we receive 4 characters
      ;  
    }
    for (int i=0; i < 3; i++) {
      input[i] = Serial.read(); // Read the characters into an array

    }
    //---remover---- BEGIN
    //input[0] = input[0]-48; // teste
    //input[1] = input[1]-48; // teste
    // for (int i=0; i < 3; i++) {  //teste
    //   Serial.println(input[i]); //teste
    //}
    //---remover---- END
  }
  if (input[2] == 120) {
    Serial.println("ACK");
  }
  else {
    Serial.println("NACK");
    for (int i=0; i < 3; i++) {
      input[i] = 0; // Zera o vetor em caso de erro

    }
  }
}

Cara, muito obrigado! Nao intendi direito seu código no começo, entretanto, aprendi a função protocol, e uma rápida pesquisa sobre ela, achei o que precisava para entende-lo. Tambem achei uma biblioteca muito útil nesse tipo de comunicação: A EasyTransfer. Segue o link do post sobre ela e tambem tem o link do gifhub. http://www.billporter.info/2011/05/30/easytransfer-arduino-library/ Penso em mais tarde, depois de mais teste, vou postar um tutorial sobre isso e ajudar outros com mesmos problemas.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço