【发布时间】:2017-02-12 07:37:14
【问题描述】:
谁能帮我弄清楚如何将这两段代码拼凑在一起,以便得到我需要的结果?看着这个,我的眼睛在交叉。我知道这对我以外的每个人来说都是轻而易举的事,但我不是程序员,这只是一个小的个人项目。
到目前为止,经过数小时阅读和观看我能找到的与 Arduino、Pubnub 和传感器相关的任何视频后,我已将传感器读数发布到 Pubnub。我创建了一个用于可视化的 Freeboard 帐户,一切正常。问题是,发布的数据是错误的。
基本上,我想读取电池电压并将其发布到 PubNub。我可以让 Arduino (Uno R3) 读取电压,我可以调整代码中的值以匹配实际电压。我遇到的问题是将那段有效的代码填充到发布到 PubNub 的 JSON 数组中。
如果有人愿意帮助我,或许可以稍微解释一下(或者不解释——只要我能正常工作就可以了),我将非常感谢您的时间、帮助和努力。
谢谢!
//每个草图都是独立工作的。我需要合并它们以发布正确的读数。
//VoltagePubNub.ino (这是发布的那个,是我想要的。我只是希望发布的值是第二个草图的值。)
#include <SPI.h>
#include <Ethernet.h>
#include <PubNub.h>
#include <aJSON.h>
// Some Ethernet shields have a MAC address printed on a sticker on the shield;
// fill in that address here, or choose your own at random:
const static byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Memory saving tip: remove myI and dnsI from your sketch if you
// are content to rely on DHCP autoconfiguration.
IPAddress myI(192, 168, 2, 114);
IPAddress dnsI(8, 8, 8, 8);
const static char pubkey[] = "publish_key";
const static char subkey[] = "subscribe_key";
const static char channel[] = "channel_name";
char uuid[] = "UUID";
#define NUM_CHANNELS 1 // How many analog channels do you want to read?
const static uint8_t analog_pins[] = {A0}; // which pins are you reading?
void setup()
{
Serial.begin(9600);
Serial.println("Serial set up");
Ethernet.begin((byte*) mac, myI, dnsI);
Serial.println("Ethernet set up");
delay(1000);
Serial.println("Ethernet set up");
PubNub.begin(pubkey, subkey);
Serial.println("PubNub set up");
delay(5000);
}
void loop()
{
Ethernet.maintain();
EthernetClient *client;
// create JSON objects
aJsonObject *msg, *analogReadings;
msg = aJson.createObject();
aJson.addItemToObject(msg, "analogReadings", analogReadings = aJson.createObject());
// get latest sensor values then add to JSON message
for (int i = 0; i < NUM_CHANNELS; i++) {
String analogChannel = String(analog_pins[i]);
char charBuf[analogChannel.length()+1];
analogChannel.toCharArray(charBuf, analogChannel.length()+1);
int analogValues = analogRead(analog_pins[i]);
aJson.addNumberToObject(analogReadings, charBuf, analogValues);
}
// convert JSON object into char array, then delete JSON object
char *json_String = aJson.print(msg);
aJson.deleteItem(msg);
// publish JSON formatted char array to PubNub
Serial.print("publishing a message: ");
Serial.println(json_String);
client = PubNub.publish(channel, json_String);
if (!client) {
Serial.println("publishing error");
} else
free(json_String);
client->stop();
delay(5000);
}
//VoltageSensor.ino
(这个值正确,但没有发布功能。)
int analogInput = A0;
float vout = 0.0;
float vin = 0.0;
float R1 = 31000.0; //
float R2 = 8700.0; //
int value = 0;
int volt = 0;
void setup(){
pinMode(analogInput, INPUT);
Serial.begin(9600);
Serial.print("DC VOLTMETER");
Serial.println("");
}
void loop(){
// read the value at analog input
value = analogRead(analogInput);
vout = (value * 4.092) / 1024.0;
vin = vout / (R2/(R1+R2));
Serial.print("INPUT V= ");
Serial.println(vin,2);
delay(2000);
}
【问题讨论】: