Bom dia a Todos:

Atualmente fiz um projeto para visualizar o Status das portas via  software.

Porem preciso agora aumentar o numero de portas, e vou ter que usar um arduino como SLAVE somente para ver se a entradas estao ou nao acionadas.

Como devo fazer ?

Atualmente meu programa que esta comunicando  com o software é:

#include <Firmata.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Porta do pino de sinal do DS18B20
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);

// Armazena temperaturas minima e maxima
float tempMin = 999;
float tempMax = 0;

DallasTemperature sensors(&oneWire);
DeviceAddress sensor1;


float valorLido = 0; //valorLido convertido para temperatura
float Temperatura = 0;
int Linha = 0;
int Sensor1 = 2; // variavel que se refere as linhas do excel
int Sensor2 = 3;
int Sensor3 = 4;
int Sensor4 = 5;
int Sensor5 = 6;
int Sensor6 = 7;
int Sensor7 = 8;
int Sensor8 = 9;
int Sensor9 = 10;
int Sensor10 = 11;
int Sensor11 = 12; // variavel que se refere as linhas do excel
int Sensor12 = 13;
int Sensor13 = 14;
int Sensor14 = 15;
int Sensor15 = 16;
int Sensor16 = 17;
int Sensor17 = 18;
int Sensor18 = 19;
int Sensor19 = 53;
int Sensor20 = 52;
int Sensor21 = 22; // variavel que se refere as linhas do excel
int Sensor22 = 23;
int Sensor23 = 24;
int Sensor24 = 25;
int Sensor25 = 26;
int Sensor26 = 27;
int Sensor27 = 28;
int Sensor28 = 29;
int Sensor29 = 30;
int Sensor30 = 31;
int Sensor31 = 32; // variavel que se refere as linhas do excel
int Sensor32 = 33;
int Sensor33 = 34;
int Sensor34 = 35;
int Sensor35 = 36;
int Sensor36 = 37;
int Sensor37 = 38;
int Sensor38 = 39;
int Sensor39 = 40;
int Sensor40 = 41;
int Sensor41 = 42; // variavel que se refere as linhas do excel
int Sensor42 = 43;
int Sensor43 = 44;
int Sensor44 = 45;
int Sensor45 = 46;
int Sensor46 = 47;
int Sensor47 = 48;
int Sensor48 = 49;
int Sensor49 = 50;
int Sensor50 = 51;
int val = 0;
int Columns = 0;
int Row = 0;

void setup() {

Serial.begin(9600); //Inicializa comunicacao Serial

//Serial.println("CLEARDATA"); // Reset da comunicacao serial

Serial.println("@Temp,Linha,01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50"); // Nomeia as colunas
}

void loop()
{
// Le a informacao do sensor
sensors.requestTemperatures();
float tempC = sensors.getTempC(sensor1);
// Atualiza temperaturas minima e maxima
if (tempC < tempMin)
{
tempMin = tempC;
}
if (tempC > tempMax)
{
tempMax = tempC;

Linha++; // incrementa a linha do excel para que a leitura pule de linha em linha

Columns++;

Serial.print("@"); //inicia a impressão de dados, sempre iniciando

Serial.print(Temperatura);

Serial.print(",");

Serial.print(Linha);

Serial.print(",");

Serial.print(digitalRead(Sensor1));

Serial.print(",");

Serial.print(digitalRead(Sensor2));

Serial.print(",");

Serial.print(digitalRead(Sensor3));

Serial.print(",");

Serial.print(digitalRead(Sensor4));

Serial.print(",");

Serial.print(digitalRead(Sensor5));

Serial.print(",");

Serial.print(digitalRead(Sensor6));

Serial.print(",");

Serial.print(digitalRead(Sensor7));

Serial.print(",");

Serial.print(digitalRead(Sensor8));

Serial.print(",");

Serial.print(digitalRead(Sensor9));

Serial.print(",");

Serial.print(digitalRead(Sensor10));

Serial.print(",");

Serial.print(digitalRead(Sensor11));

Serial.print(",");

Serial.print(digitalRead(Sensor12));

Serial.print(",");

Serial.print(digitalRead(Sensor13));

Serial.print(",");

Serial.print(digitalRead(Sensor14));

Serial.print(",");

Serial.print(digitalRead(Sensor15));

Serial.print(",");

Serial.print(digitalRead(Sensor16));

Serial.print(",");

Serial.print(digitalRead(Sensor17));

Serial.print(",");

Serial.print(digitalRead(Sensor18));

Serial.print(",");

Serial.print(digitalRead(Sensor19));

Serial.print(",");

Serial.print(digitalRead(Sensor20));

Serial.print(",");

Serial.print(digitalRead(Sensor21));

Serial.print(",");

Serial.print(digitalRead(Sensor22));

Serial.print(",");

Serial.print(digitalRead(Sensor23));

Serial.print(",");

Serial.print(digitalRead(Sensor24));

Serial.print(",");

Serial.print(digitalRead(Sensor25));

Serial.print(",");

Serial.print(digitalRead(Sensor26));

Serial.print(",");

Serial.print(digitalRead(Sensor27));

Serial.print(",");

Serial.print(digitalRead(Sensor28));

Serial.print(",");

Serial.print(digitalRead(Sensor29));

Serial.print(",");

Serial.print(digitalRead(Sensor30));

Serial.print(",");

Serial.print(digitalRead(Sensor31));

Serial.print(",");

Serial.print(digitalRead(Sensor32));

Serial.print(",");

Serial.print(digitalRead(Sensor33));

Serial.print(",");

Serial.print(digitalRead(Sensor34));

Serial.print(",");

Serial.print(digitalRead(Sensor35));

Serial.print(",");

Serial.print(digitalRead(Sensor36));

Serial.print(",");

Serial.print(digitalRead(Sensor37));

Serial.print(",");

Serial.print(digitalRead(Sensor38));

Serial.print(",");

Serial.print(digitalRead(Sensor39));

Serial.print(",");

Serial.print(digitalRead(Sensor40));

Serial.print(",");

Serial.print(digitalRead(Sensor41));

Serial.print(",");

Serial.print(digitalRead(Sensor42));

Serial.print(",");

Serial.print(digitalRead(Sensor43));

Serial.print(",");

Serial.print(digitalRead(Sensor44));

Serial.print(",");

Serial.print(digitalRead(Sensor45));

Serial.print(",");

Serial.print(digitalRead(Sensor46));

Serial.print(",");

Serial.print(digitalRead(Sensor47));

Serial.print(",");

Serial.print(digitalRead(Sensor48));

Serial.print(",");

Serial.print(digitalRead(Sensor49));

Serial.print(",");

Serial.println(digitalRead(Sensor50));

Row++;
if (Linha > 10000) // regra para limitar a quantidade de dados

{
Linha = 0;

Serial.println("ROW,SET,2"); // alimentacao das linhas com os dados sempre iniciando


delay(3000); //espera 3 segundos para fazer nova leitura
}

Agora  vou ter que visualizar  100 entradas,  como fazer a  comunicaçao com o slave e como  escrever no software essas informações  seguindo essa forma que esta no master pois o programa teoricamente se enviar  SEnsor 51  ....52.....  ele consegue identificar.

Exibições: 407

Responder esta

Respostas a este tópico

Olá, primeiramente leia a sugestão de nosso amigo Rui Viana de como postar

http://labdegaragem.com/forum/topics/sugest-o-de-como-postar

Existem CIs específico para a finalidade que pode sanar seu problema. Eu indicaria o PCF8574(existem outros).

Video aula exelente do nosso amigo Renato ALoi:

https://www.youtube.com/watch?v=GrnP8qnZDu8

Outra dica: seu code pode ser melhorado e muito utilizando o laço "for". Você pode reduzir muito o numero de linhas do seu programa. Dê uma olhada. EXP:

for(int x=0; x<=50 x++)

{

   Serial.print(digitalRead(Sensorx));  

   Serial.print(",");

}

Somente com essas linhas eu fiz a impressão da leitura dos seus 50 sensores, poderiam ser 100, poderiam ser 1000 que ainda sim seria somente essas linhas. Então estude o laço for.

no meu caso tenho que fazer a leitura de 100 entradas, estou com o Mega, achei legal esta implementação, vi a questao do PCF, porem tenho que fazer varios, se utilizar outra placa do mega eu acho que seria mais facil e esta pronto já. agora volto no inicio que nao sei como fazer essa comunicaçao e dizer que a saida do slave exemplo: ser 01 que vai ser a 71 a 02 vai ser a 72 .....
Não sei se consegui explicar bem.

Tem duas formas de fazer isso: via i2c ou via serial. Cria uma serial virtual no mestre e conecte com o escravo.

Realmente a explicação ficou vaga. Mas a definição de quem é quem vc não pode definir quando fazer a programação do slave?

estou vendo a comunicação i2c

porem nao sei como fazer esse link entre as duas

ex: tenho um arduino mestre conversando  com meu software normalmente.

agora pela necessidade vou ter que colocar outro arduino como slave.

 vai ficar   as  54 entradas do mestre + 54  entradas do slave

essas entradas do slave  elas nao podem ser (1 a 54) elas tem que ser renomeadas para (55 , 56...)

Não irei enviar nada para o Slave  somente receber a leitura das portas.

         usb                I2c

PC  ------  Mestre  ------ Slave

É algo simples porem não consigo visualizar ou talvez explicar melhor

O que você quer é renomear as portas do arduino. Isso você faz quando for escrever o code no slave.

#define é um componente muito útil da linguagem C que permite ao programador dar um nome a uma constatnte antes que o programa seja compilado. Constantes definidas no Arduino não ocupam espaço em memória no chip. O compilador substitui referêancias a estas constantes pelo valor definido no momento da compilação.

Isto pode causar alguns efeitos indesejáveis se, por exemplo, um nome de constante que tenha sido defindo por um #define é incluido em alguma outra constante ou nome de variável. Neste caso o texto deve ser substituido pelo valor (ou texto) do #define.

 

Em general, a palavra chave const é preferível para definir constatntes e deve ser usada ao invés de #deine.

 

A sintaxe do #define na linguagem Arduino é a mesma da linguagem C:

Sintaxe

#define nomeDeConstante valor

Verifique que o # é necessário.

Exemplo

#define ledPin 3
// O compilador vai substituir quanquer menção a ledPin pelo valor 3 no momento da compilação.

Dica

Não há ponto e vírgula após a declaração #define. Se você incluir um o compilador vai lançar erros críticos no final do programa.

#define ledPin 3;    // isto é um erro

Do mesmo modo o compilador gerará erros se após o #define houver um =.

#define ledPin  = 3  // isto também é um erro

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço