如何使用json库串行发送数据并同时读取串行数据

时间:2015-10-01 12:37:04

标签: json arduino

我刚刚开始在我的项目中使用ArduinoJson库。我的目标是使用json格式从我的arduino nano使用BT向RasPi发送三个传感器值。此外,通过从BT接收“0”或“1”来控制继电器。

我已成功发送数据。但是,当我包含以下代码时:(读取串行数据)     if(Serial.available> 0)     {       z = Serial.read();        ...............     }

我发送'1';我的数据传输受到干扰,json字符串受到影响。当我发送'0'时,它会恢复正常。

我需要帮助来解决这个问题,因为我无法找出我的错误!请做好帮助!!

我的代码:

#include <ArduinoJson.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#define DHTPIN 12 // what pin we're connected to
#define DHTTYPE DHT11 // DHT 11 sensor
DHT dht(DHTPIN, DHTTYPE); //initilize the DHT sensor
int ldr = A0; // LDR connected to A0
int relay = 13;
float h,t;
int rx = 11; // softwareserial rx of arduino is pin 11
int tx = 10; // softwareserial tx of arduino is pin 12
SoftwareSerial mySerial(rx,tx);

int l; // variable to store the value coming from the sensor
int bt = 0; // variable to store incoming BT data

void setup() 
{
  pinMode(relay, OUTPUT);
  pinMode(ldr, INPUT);
  Serial.begin(9600);
  mySerial.begin(9600);
  mySerial.println(" Project FLIP");
  mySerial.println("sensor testing");
  mySerial.println(" DHT11 test!");
  dht.begin();
  delay(2000); 
}

void loop() 
{
  humidity_read();//read humidity value
  temperature_read();//read temperature
  light_read(); //read LDR value
  jason_print();
  relay_control();//control relay by reading serial data 0=off, 1=on
  jason_print();
}

void jason_print()
{
  StaticJsonBuffer<200> temp;
  JsonObject& root = temp.createObject();
  root["humidity"] = h;
  root["temp"] = t;
  root["light"] = l;
  root.printTo(Serial);
  Serial.println();
  delay(1000);
}

void humidity_read()
{
  h = dht.readHumidity(); //
}

void temperature_read()
{
  t = dht.readTemperature(); // Read temperature as Celsius (the default)
}

void relay_control()
{
  if (Serial.available() > 0)
  {
    bt = Serial.read();
    if (bt == '1')
    {
      digitalWrite(relay, HIGH);
    }
    else if (bt == '0')
    {
      digitalWrite(relay, LOW);
    }
  }
}
void light_read()
{
  l = analogRead(ldr); //Read LDR value
}

1 个答案:

答案 0 :(得分:0)

我尝试使用软件串行概念,相同的代码似乎工作得很好!我将HC-05 BT模块连接到D10&amp; 11个arduino引脚,我成功地使用我的手机控制继电器。另外,也不会干扰正在传输的json数据。

但是,如果我使用arduino IDE的串行监视器来执行相同的操作,我仍然不知道为什么会出现问题..