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.
Tags:
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:
#define nomeDeConstante valor
Verifique que o # é necessário.
#define ledPin 3
// O compilador vai substituir quanquer menção a ledPin pelo valor 3 no momento da compilação.
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por