collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Sensor de temp dois arduinos, do quarto para a sala via RF  (Lida 49085 vezes)

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

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #15 em: 26 de Agosto de 2012, 22:43 »
Cada nRF precisa de ter um micro-controlador, um arduino é muito overkill um simples attiny2313 chega perfeitamente para implementar um nó/slave.
Avr fanboy

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #16 em: 26 de Agosto de 2012, 22:47 »
Atenção à frequência do nRF, eu utilizei o RFM12 por causa da rede wireless cá de casa ...
Os electrões são nossos amigos !!! :D

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #17 em: 26 de Agosto de 2012, 22:48 »
Podes mudar os canais, mete o wireless em no canal 0 e o nRf no canal máximo e ficas com umas centenas de Mhz a separar os dois.
Avr fanboy

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #18 em: 26 de Agosto de 2012, 22:54 »
Ok entendi.
So mais duas questoes:

Entao eu no arduino master/nrf master consigo enviar informacao para o nrf do quarto 1 ligar... sem que o nrf do quarto2 se ligue e vice versa??

Foi por causa disto que no outro projecto implementei os encoders e decoders...pois conseguia ter dezenas de decoders sem eles interferirem uns com os outros.


2º pergunta: em um nrf slave consigo comandar quantos reles? apenas um ou mais que um?


Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #19 em: 26 de Agosto de 2012, 22:58 »
Basta arranjares forma de identificar o receptor. Podes enviar um nr que identifique o receptor antes de enviares a mensagem e depois envias a mensagem.
Depois programas o arduino ou o microcontrolador que usares para interpretar o comando apenas se a primeira mensagem que ele receber for igual ao nr que o identifica, caso contrário ignora a mensagem que vem a seguir e volta a esperar por uma mensagem nova.

Edit: Depende das saidas que o teu microcontrolador tiver, mas se quiseres controlar bastantes há soluções como shift registers (?).
« Última modificação: 26 de Agosto de 2012, 23:00 por rglove »

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #20 em: 26 de Agosto de 2012, 23:16 »
Creio que cada nrf precisa de ter um id para trabalhar ....

A mesma coisa acontece com os RFM12.

Se bem me lembro creio que podes ter 125 canais, isto com o  nRF
Os electrões são nossos amigos !!! :D

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #21 em: 26 de Agosto de 2012, 23:16 »
Basta arranjares forma de identificar o receptor. Podes enviar um nr que identifique o receptor antes de enviares a mensagem e depois envias a mensagem.
Depois programas o arduino ou o microcontrolador que usares para interpretar o comando apenas se a primeira mensagem que ele receber for igual ao nr que o identifica, caso contrário ignora a mensagem que vem a seguir e volta a esperar por uma mensagem nova.

Edit: Depende das saidas que o teu microcontrolador tiver, mas se quiseres controlar bastantes há soluções como shift registers (?).

Neste caso seria o controlador seria mesmo o arduino...
rglove achas que é tarefa facil entao fazer isso? por o arduinomaster /nrf a comunicar com varios slaves sem que eles interfiram uns com os outros?

Relativamente as saidas... o arduino tem varias falemos vá de 4...
de que forma é que o arduino master /nrf diz ao arduino slave/nrf olha ligame ai o rele 1, agora liga me o rele 2 , agora liga-me o 3 e já agora liga me o rele 4 tambem.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #22 em: 26 de Agosto de 2012, 23:18 »
É tal e qual um Serial.print, só que em vez de serial é o nome que deres ao nRF, podes ter milhares de nRF's, dá uma olhada aqui:
http://jeelabs.org/
http://jeelabs.com/products/jeenode
São módulos RFM12 com um atmega, programavel com o IDE do Arduino, e tem toda a componente de comunicação tratada
Avr fanboy

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #23 em: 26 de Agosto de 2012, 23:21 »
epá ... há bibliotecas para usar isso ...

Deve ser mais fácil se começares por ler a info que vem com as bibliotecas.

Estou a fazer algo parecido ... e digo-te que é bem simples, neste momento estou a tentar usar o nRF também porque é bem mais barato que o RFM12.

Quanto a não se baralharem podes fazer muita coisa por software.
Os electrões são nossos amigos !!! :D

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #24 em: 01 de Setembro de 2012, 17:07 »
Ora viva pessoal, enquanto não tenho os NRF, já reuni algum material

tenho um emissor rf315 e um receptor..

consegui COMUNICAR entre eles com este codigo do rglove:

emissor:

Código: [Seleccione]
#include <VirtualWire.h> // É necessário utilizar esta biblioteca para transmitir a informação

char info[30];
int index = 0;
char inChar;

void setup() {
  pinMode(6,OUTPUT);
  Serial.begin(9600);
  vw_set_tx_pin(6); // Esta função diz que o pino responsável por transferir a informação é o 6
  vw_set_ptt_inverted(true); // Sei que esta função tem de ser usada, mas não sei o que significa, se alguém souber e quiser acrescentar
  vw_setup(2000); // função responsável por declarar a velocidade de transmissão (neste caso 2000bps)
}

void loop()
{
  if (Serial.available() > 0) {  // Se houver informação à espera para ser lida começa o loop abaixo
      while (1) {
      inChar = Serial.read(); // Guarda temporariamente o primeiro caracter/byte
      info[index] = inChar; // Coloca o caracter numa array de caracteres
      index++; // acrescenta 1 valor a index, de forma a que quando se repetirem as operações de cima o byte não seja escrito no mesmo sítio
        delay(2); // Este pequeno delay é necessário para que chegue o próximo byte, caso este delay não cá esteja o arduino vai terminar o loop
        if (Serial.available() <= 0) { // Esta condição é necessária para verificar se existe mais informação para ser lida
          index = 0; // Como não existe mais informação para ler a variável index volta a 0
          const char *msg = info;
          vw_send((uint8_t *)msg, strlen(msg)); // envia a informação recebida pela porta Serial para o receptor RF
          vw_wait_tx(); // espera que a informação seja transferida
          memset( &info, 0, sizeof(info) ); // faz reset à array de caracteres, de forma a ficar limpa para ser escrita novamente
          break; // por fim termina o loop e dá continuidade ao código (neste caso não há mais código, mas poderia haver)
        }
      }
   }
}

receptor:

Código: [Seleccione]
#include <VirtualWire.h>

char info[30];

void setup()
{
    Serial.begin(9600);
    pinMode(7,INPUT);
    vw_set_rx_pin(7); // Pino de recepção
    vw_set_ptt_inverted(true);
    vw_setup(2000);
    vw_rx_start(); // Necessário para começar a receber informação
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Caso chegue alguma mensagem ao receptor
    {
int i;
        digitalWrite(13, true); // Esta parte é opcional, eu utilizei para testar e ver se estava a receber alguma coisa
for (i = 0; i < buflen; i++) // Basicamente isto vai repetir para cada byte recebido e vai guardar a informação numa array de caracteres
{
          info[i]=buf[i];
}
Serial.println(String(info)); // Enviamos pela porta Serial a informação recebida
        memset( &info, 0, sizeof(info) ); // Fazemos reset à variável info para utilizar uma outra vez
        digitalWrite(13, false);
    }
}





tenho tambem um LCD 16x2 que tambem ja conseguir fazer com que funcionasse com o example HELLO WORLD.

codigo:

Código: [Seleccione]
/*
  LiquidCrystal Library - Hello World
 
 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.
 
 This sketch prints "Hello World!" to the LCD
 and shows the time.
 
  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)
 
 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe
 
 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}


e tenho um sensor de temperatura humidade que funciona com este codigo:

Código: [Seleccione]
#define dht11_pin 53 //Analog port 0 on Arduino Uno
//#define dht11_pin 54 //Analog port 0 on Arduino Mega2560
 
byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while (!digitalRead(dht11_pin));
    delayMicroseconds(30);
    if (digitalRead(dht11_pin) != 0 )
      bitSet(result, 7-i);
    while (digitalRead(dht11_pin));
  }
  return result;
}
 
 
void setup()
{
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  Serial.begin(9600);
  Serial.println("Ready");
}
     
void loop()   
{
  byte dht11_dat[5];   
  byte dht11_in;
  byte i;// start condition
       
  digitalWrite(dht11_pin, LOW);
  delay(18);
  digitalWrite(dht11_pin, HIGH);
  delayMicroseconds(1);
  pinMode(dht11_pin, INPUT);
  delayMicroseconds(40);     
   
  if (digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
    delay(1000);
    return;
  }
  delayMicroseconds(80);
  if (!digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH
    return;
  }
   
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet
   
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
  Serial.print("Current humdity = ");
  Serial.print(dht11_dat[0], DEC);
  Serial.print("%  ");
  Serial.print("temperature = ");
  Serial.print(dht11_dat[2], DEC);
  Serial.println("C  ");
  delay(2000); //fresh time
}



A ideia agora seria colocar junto do arduino standalone o sensor de temp humidade, e o emissor RF.


Depois no meu arduino mega, junto com o lcd, e receptor rf..
Ler na PRIMEIRA linha a temperatura
e na SEGUNDA linha a humidade.

Alguem tem ideia como se juntam esses 3 codigos?

Obrigado
« Última modificação: 01 de Setembro de 2012, 19:02 por r16 »

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #25 em: 01 de Setembro de 2012, 18:13 »
Este código deve servir para emissor:

Código: [Seleccione]
// EMISSOR
#include <VirtualWire.h> // É necessário utilizar esta biblioteca para transmitir a informação
#define dht11_pin 53 //Analog port 0 on Arduino Uno //#define dht11_pin 54 //Analog port 0 on Arduino Mega2560

char info[30];
int index = 0;
char inChar;

byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while (!digitalRead(dht11_pin));
    delayMicroseconds(30);
    if (digitalRead(dht11_pin) != 0 )
      bitSet(result, 7-i);
    while (digitalRead(dht11_pin));
  }
  return result;
}

void setup() {
  pinMode(6,OUTPUT);
  Serial.begin(9600);
  vw_set_tx_pin(6); // Esta função diz que o pino responsável por transferir a informação é o 6
  vw_set_ptt_inverted(true); // Sei que esta função tem de ser usada, mas não sei o que significa, se alguém souber e quiser acrescentar
  vw_setup(2000); // função responsável por declarar a velocidade de transmissão (neste caso 2000bps)
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  Serial.println("Ready");
}

void loop()
{
    byte dht11_dat[5];   
  byte dht11_in;
  byte i;// start condition
       
  digitalWrite(dht11_pin, LOW);
  delay(18);
  digitalWrite(dht11_pin, HIGH);
  delayMicroseconds(1);
  pinMode(dht11_pin, INPUT);
  delayMicroseconds(40);     
   
  if (digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
    delay(1000);
    return;
  }
  delayMicroseconds(80);
  if (!digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH
    return;
  }
   
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet
   
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
 // Serial.print("Current humdity = ");
 // Serial.print(dht11_dat[0], DEC);
 // Serial.print("%  ");
 // Serial.print("temperature = ");
 // Serial.print(dht11_dat[2], DEC);
 // Serial.println("C  ");
 
 

 
  // if (Serial.available() > 0) {  // Se houver informação à espera para ser lida começa o loop abaixo
  //    while (1) {
  //    inChar = Serial.read(); // Guarda temporariamente o primeiro caracter/byte
  //    info[index] = inChar; // Coloca o caracter numa array de caracteres
  //    index++; // acrescenta 1 valor a index, de forma a que quando se repetirem as operações de cima o byte não seja escrito no mesmo sítio
  //      delay(2); // Este pequeno delay é necessário para que chegue o próximo byte, caso este delay não cá esteja o arduino vai terminar o loop
       
  //      if (Serial.available() <= 0) { // Esta condição é necessária para verificar se existe mais informação para ser lida
  //        index = 0; // Como não existe mais informação para ler a variável index volta a 0
          const char *msg = dht11_dat;
          vw_send((uint8_t *)msg, strlen(msg)); // envia a informação recebida pela porta Serial para o receptor RF
          vw_wait_tx(); // espera que a informação seja transferida
          memset( &info, 0, sizeof(info) ); // faz reset à array de caracteres, de forma a ficar limpa para ser escrita novamente
         
         
  //       break; // por fim termina o loop e dá continuidade ao código (neste caso não há mais código, mas poderia haver)
    delay(2000); //fresh time
        }
      }
   }
}
Os electrões são nossos amigos !!! :D

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #26 em: 01 de Setembro de 2012, 18:23 »
Este código deve servir para receptor (há algumas coisas que não sei se vão funcionar bem):

Código: [Seleccione]
//RECEPTOR
#include <VirtualWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

char info[30];

void setup()
{
    lcd.begin(16, 2);
    Serial.begin(9600);
    pinMode(7,INPUT);
    vw_set_rx_pin(7); // Pino de recepção
    vw_set_ptt_inverted(true);
    vw_setup(2000);
    vw_rx_start(); // Necessário para começar a receber informação
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Caso chegue alguma mensagem ao receptor
    {
int i;
        digitalWrite(13, true); // Esta parte é opcional, eu utilizei para testar e ver se estava a receber alguma coisa
for (i = 0; i < buflen; i++) // Basicamente isto vai repetir para cada byte recebido e vai guardar a informação numa array de caracteres
{
          info[i]=buf[i];
          if (i=0){
             lcd.setcursor(0,0);
             lcd.print("Humi ");
             lcd.print(buf[i], DEC);
             lcd.print(" %");
          }
          if (i=2){
             lcd.setcursor(0,1);
             lcd.print("Temp ");
             lcd.print(buf[i], DEC);
             lcd.print(" C");
  }
Serial.println(String(info)); // Enviamos pela porta Serial a informação recebida
        memset( &info, 0, sizeof(info) ); // Fazemos reset à variável info para utilizar uma outra vez
        digitalWrite(13, false);
    }
}
« Última modificação: 01 de Setembro de 2012, 19:08 por kast »
Os electrões são nossos amigos !!! :D

Offline r16

  • Mini Robot
  • *
  • Mensagens: 339
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #27 em: 02 de Setembro de 2012, 02:43 »
Este código deve servir para emissor:

Código: [Seleccione]
// EMISSOR
#include <VirtualWire.h> // É necessário utilizar esta biblioteca para transmitir a informação
#define dht11_pin 53 //Analog port 0 on Arduino Uno //#define dht11_pin 54 //Analog port 0 on Arduino Mega2560

char info[30];
int index = 0;
char inChar;

byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while (!digitalRead(dht11_pin));
    delayMicroseconds(30);
    if (digitalRead(dht11_pin) != 0 )
      bitSet(result, 7-i);
    while (digitalRead(dht11_pin));
  }
  return result;
}

void setup() {
  pinMode(6,OUTPUT);
  Serial.begin(9600);
  vw_set_tx_pin(6); // Esta função diz que o pino responsável por transferir a informação é o 6
  vw_set_ptt_inverted(true); // Sei que esta função tem de ser usada, mas não sei o que significa, se alguém souber e quiser acrescentar
  vw_setup(2000); // função responsável por declarar a velocidade de transmissão (neste caso 2000bps)
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  Serial.println("Ready");
}

void loop()
{
    byte dht11_dat[5];   
  byte dht11_in;
  byte i;// start condition
       
  digitalWrite(dht11_pin, LOW);
  delay(18);
  digitalWrite(dht11_pin, HIGH);
  delayMicroseconds(1);
  pinMode(dht11_pin, INPUT);
  delayMicroseconds(40);     
   
  if (digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
    delay(1000);
    return;
  }
  delayMicroseconds(80);
  if (!digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH
    return;
  }
   
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet
   
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
 // Serial.print("Current humdity = ");
 // Serial.print(dht11_dat[0], DEC);
 // Serial.print("%  ");
 // Serial.print("temperature = ");
 // Serial.print(dht11_dat[2], DEC);
 // Serial.println("C  ");
 
 

 
  // if (Serial.available() > 0) {  // Se houver informação à espera para ser lida começa o loop abaixo
  //    while (1) {
  //    inChar = Serial.read(); // Guarda temporariamente o primeiro caracter/byte
  //    info[index] = inChar; // Coloca o caracter numa array de caracteres
  //    index++; // acrescenta 1 valor a index, de forma a que quando se repetirem as operações de cima o byte não seja escrito no mesmo sítio
  //      delay(2); // Este pequeno delay é necessário para que chegue o próximo byte, caso este delay não cá esteja o arduino vai terminar o loop
       
  //      if (Serial.available() <= 0) { // Esta condição é necessária para verificar se existe mais informação para ser lida
  //        index = 0; // Como não existe mais informação para ler a variável index volta a 0
          const char *msg = dht11_dat;
          vw_send((uint8_t *)msg, strlen(msg)); // envia a informação recebida pela porta Serial para o receptor RF
          vw_wait_tx(); // espera que a informação seja transferida
          memset( &info, 0, sizeof(info) ); // faz reset à array de caracteres, de forma a ficar limpa para ser escrita novamente
         
         
  //       break; // por fim termina o loop e dá continuidade ao código (neste caso não há mais código, mas poderia haver)
    delay(2000); //fresh time
        }
      }
   }
}


quando tento compilar esta me a dar este erro:

Código: [Seleccione]
sketch_sep02a.cpp: In function 'void loop()':
sketch_sep02a:72: error: invalid conversion from 'byte*' to 'const char*'
sketch_sep02a.cpp: At global scope:
sketch_sep02a:78: error: expected declaration before '}' token

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #28 em: 02 de Setembro de 2012, 16:20 »
Código: [Seleccione]
#include <VirtualWire.h> // É necessário utilizar esta biblioteca para transmitir a informação
#define dht11_pin 53 //Analog port 0 on Arduino Uno //#define dht11_pin 54 //Analog port 0 on Arduino Mega2560

char info[30];
int index = 0;
char inChar;

byte read_dht11_dat()
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while (!digitalRead(dht11_pin));
    delayMicroseconds(30);
    if (digitalRead(dht11_pin) != 0 )
      bitSet(result, 7-i);
    while (digitalRead(dht11_pin));
  }
  return result;
}

void setup() {
  pinMode(6,OUTPUT);
  Serial.begin(9600);
  vw_set_tx_pin(6); // Esta função diz que o pino responsável por transferir a informação é o 6
  vw_set_ptt_inverted(true); // Sei que esta função tem de ser usada, mas não sei o que significa, se alguém souber e quiser acrescentar
  vw_setup(2000); // função responsável por declarar a velocidade de transmissão (neste caso 2000bps)
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  Serial.println("Ready");
}

void loop()
{
    char dht11_dat[5];   
  byte dht11_in;
  byte i;// start condition
       
  digitalWrite(dht11_pin, LOW);
  delay(18);
  digitalWrite(dht11_pin, HIGH);
  delayMicroseconds(1);
  pinMode(dht11_pin, INPUT);
  delayMicroseconds(40);     
   
  if (digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
    delay(1000);
    return;
  }
  delayMicroseconds(80);
  if (!digitalRead(dht11_pin))
  {
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH
    return;
  }
   
  delayMicroseconds(80);// now ready for data reception
  for (i=0; i<5; i++)
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet
   
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
  if(dht11_dat[4]!= dht11_check_sum)
  {
    Serial.println("DHT11 checksum error");
  }
          const char *msg = dht11_dat;
          vw_send((uint8_t *)msg, strlen(msg)); // envia a informação recebida pela porta Serial para o receptor RF
          vw_wait_tx(); // espera que a informação seja transferida
          memset( &info, 0, sizeof(info) ); // faz reset à array de caracteres, de forma a ficar limpa para ser escrita novamente
    delay(2000); //fresh time
}

Não me deu erros a compilar. Experimenta.

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Sensor de temp dois arduinos, do quarto para a sala via RF
« Responder #29 em: 02 de Setembro de 2012, 16:30 »
Alterei umas coisas para o receptor, experimenta o código do Kast, se não der experimenta o que eu modifiquei:

Código: [Seleccione]
#include <VirtualWire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
    lcd.begin(16, 2);
    Serial.begin(9600);
    pinMode(7,INPUT);
    vw_set_rx_pin(7); // Pino de recepção
    vw_set_ptt_inverted(true);
    vw_setup(2000);
    vw_rx_start(); // Necessário para começar a receber informação
}

void loop()
{
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;

    if (vw_get_message(buf, &buflen)) // Caso chegue alguma mensagem ao receptor
    {
int i;
        digitalWrite(13, true); // Esta parte é opcional, eu utilizei para testar e ver se estava a receber alguma coisa
for (i = 0; i < buflen; i++) // Basicamente isto vai repetir para cada byte recebido e vai guardar a informação numa array de caracteres
{
          if (i==0){
             lcd.setcursor(0,0);
             lcd.print("Humi ");
             lcd.print(buf[i], DEC);
             lcd.print(" %");
          }
          if (i==2){
             lcd.setcursor(0,1);
             lcd.print("Temp ");
             lcd.print(buf[i], DEC);
             lcd.print(" C");
  }
}
            Serial.println(String("Humidade: " + String(buf[0],DEC) + "%; Temperatura: " + String(buf[2],DEC) + "ºC"));
            digitalWrite(13, false);
    }
}
« Última modificação: 02 de Setembro de 2012, 16:34 por rglove »