collapse

* Posts Recentes

comparação string por dio123
[Ontem às 22:20]


Fullstack - El Corte Inglés por TigPT
[23 de Setembro de 2020, 21:40]


Broca diabólica por Alfredo Garcia
[23 de Setembro de 2020, 19:22]


Flipper Zero por TigPT
[23 de Setembro de 2020, 13:47]


JSN-SR04T - Distânica por Njay
[22 de Setembro de 2020, 04:38]


Frequêncímetro 1GHz por dropes
[19 de Setembro de 2020, 23:29]


DVD Laser Scanner Microscope por dropes
[19 de Setembro de 2020, 23:06]


2 PIR no mesmo pino? por jm_araujo
[19 de Setembro de 2020, 11:14]


Escova de Dentes por almamater
[13 de Setembro de 2020, 12:47]


Spot Welder por senso
[13 de Setembro de 2020, 11:44]

Autor Tópico: Rede de sensores DS18S20  (Lida 3779 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline poliveira1978

  • Mini Robot
  • *
  • Mensagens: 335
Re: Rede de sensores DS18S20
« Responder #15 em: 31 de Agosto de 2011, 22:58 »
Código: [Seleccione]
char buffer [sizeof(long)*8+1];
guarda espaço para 9 caracteres (8 do endereço + o \0).

Já inclui a stdlib.h, o erro que recebo é:
"invalid convertion from uint8_t* to long int"
na linha:

Código: [Seleccione]
ltoa (deviceAddress,buffer,16);
no ficheiro DallasTemperature.h o tipo DeviceAddress é definido assim:
Código: [Seleccione]
typedef uint8_t DeviceAddress[8];

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.694
  • Helpdesk do sitio
Re: Rede de sensores DS18S20
« Responder #16 em: 31 de Agosto de 2011, 23:31 »
Bem, isso quer dizer que cada numero está numa posição do array, se isso usa as funções de print do Arduino, então faz simplesmente print de endereço a endereço que ele imprime o numero.
Avr fanboy

Offline poliveira1978

  • Mini Robot
  • *
  • Mensagens: 335
Re: Rede de sensores DS18S20
« Responder #17 em: 01 de Setembro de 2011, 20:37 »
Para mostrar o endereço na página algo do género:
Código: [Seleccione]
for (j=0;j<8;j++)
{
ethernet.print(deviceAddress[j]);
}
resolve a questão.
Mas dava jeito na mesma poder contruir uma string para poder construir uma tabela de correspondências (algo do género 01234567 -> Quarto X).

Mas aproveito para agradecer a ajuda que já me foi prestada pelo user senso.

Offline vdr

  • Mini Robot
  • *
  • Mensagens: 78
Re: Rede de sensores DS18S20
« Responder #18 em: 01 de Setembro de 2011, 21:18 »
isto serviria?

Código: [Seleccione]

String str_aux = String();

for (j=0;j<8;j++)
{

str_aux += deviceAddress[j];

}


Offline zordlyon

  • Mini Robot
  • *
  • Mensagens: 1.746
Re: Rede de sensores DS18S20
« Responder #19 em: 01 de Setembro de 2011, 21:38 »

Já inclui a stdlib.h, o erro que recebo é:
"invalid convertion from uint8_t* to long int"
na linha:

Queria dizer que a função "itoa" não é nativa da biblioteca "stdlib.h"...a função "Atoi" é! a contrária não, esse erro é devido a não ser uma função nativa da stdlib...

Eu tive este problema numa frequência na universidade, e no fim da frequência fui perguntar ao professor e ele na altura disse me que a atoi era nativa da stdlib enquanto que a itoa não.

Já foi a uns tempos valentes, mas acho que o erro era assim algo parecido..

Cumprimentos,
André Carvalho.
Cumprimentos,
André Carvalho.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.694
  • Helpdesk do sitio
Re: Rede de sensores DS18S20
« Responder #20 em: 01 de Setembro de 2011, 22:21 »
Esse erro é porque ele estava a passar um ponteiro de uint8_t quando a função esperava um long.
Avr fanboy

Offline poliveira1978

  • Mini Robot
  • *
  • Mensagens: 335
Re: Rede de sensores DS18S20
« Responder #21 em: 01 de Setembro de 2011, 23:23 »
Após várias tentativas e depois de testar com os sketches de demonstração da lib DallasTemperature, constatei que mesmo usando
Código: [Seleccione]
for (int(i)=0;i<8;i++)
{
  ethernet.print(deviceAddress[i]);
}
o endereço físico não é bem "copiado" para o html.

Decidi enveredar por outro caminho, usando o ID do sensor no bus, até conseguir fazer de outra maneira.

O código que tenho agora é:
Código: [Seleccione]

#include "stdlib.h"
#include "etherShield.h"
#include "ETHER_28J60.h"
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include "RTClib.h"
#include "String.h"

#define ONE_WIRE_BUS 3
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
int numberOfDevices;
DeviceAddress deviceAddress;

RTC_DS1307 RTC;

static uint8_t mac[6] = {0x54,0x55,0x58,0x10,0x00,0x24};
static uint8_t ip[4] = {192,168,10,159};
static uint16_t port = 80;
ETHER_28J60 ethernet;

void setup()
{
  Serial.begin(9600);
  ethernet.setup(mac, ip, port);
  sensors.begin();
  Wire.begin();
  RTC.begin();
  if (!RTC.isrunning())
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop()
{
  DateTime now = RTC.now();
  sensors.requestTemperatures();
  numberOfDevices = sensors.getDeviceCount();
  char* param;
  if (param = ethernet.serviceRequest())
  {
    ethernet.print("<html><head><title>Rede de sensores de temperatura (DS18S20)</title></head><body>");
    ethernet.print("<table border=\"1\" bordercolor=\"#CC66FF\" style=\"background-color:#00FFFF\" width=\"75%\" cellpadding=\"0\" cellspacing=\"0\">");
    ethernet.print("<tr><td>ID</td><td>Localiza&ccedil;&atilde;o</td><td>Temperatura</td><td>Alimenta&ccedil;&atilde;o</td><td>Data</td><td>Hora</td");
    for (int(i)=0;i<numberOfDevices;i++)
    {
      sensors.getAddress(deviceAddress,i);
      ethernet.print("</tr><tr><td>");
      ethernet.print(i);
      ethernet.print("</td><td>");
/*      for (int(j)=0;j<8;j++)
      {
        ethernet.print(deviceAddress[j]);
      }
*/     
      if (i==0)
      {
        ethernet.print("Quarto X");
      }
      ethernet.print("</td><td>");
      float tempC = sensors.getTempC(deviceAddress);
      ethernet.print(float(tempC));
      ethernet.print("&ordm; C</td><td>");
      if (sensors.isParasitePowerMode())
      {
       ethernet.print("Modo Parasitico</td><td>");
      }
      else ethernet.print("<td>5 V + GND</td><td>");
    }
    ethernet.print(now.year());
    ethernet.print("/");
    ethernet.print(now.month());
    ethernet.print("/");
    ethernet.print(now.day());
    ethernet.print("</td><td>");
    ethernet.print(now.hour());
    ethernet.print(":");
    ethernet.print(now.minute());
    ethernet.print(":");
    ethernet.print(now.second());
    ethernet.print("</td></tr></table></body></html>");
    ethernet.respond();
  }
}