【问题标题】:How can I get the value of pin A0 from the second sketch into the JSON array in the first sketch?如何将第二个草图中的引脚 A0 的值放入第一个草图中的 JSON 数组中?
【发布时间】: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);
    }

【问题讨论】:

    标签: json arduino iot pubnub


    【解决方案1】:

    这可能不是最迷人或最正确的做法,但我得到了它来做我需要的事情。我用以下代码编辑了第一个草图:


        // 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++) {
          float vout = 0.0;
          float vin = 0.0;
          float R1 = 33060.0; //  
          float R2 = 7600.0; // 
          int value = 0;
          int volt = 0;
    
          //Serial.print("INPUT V= ");
          //Serial.println(vin,2);
    
          String analogChannel = String(analog_pins[i]);
    
          value = analogRead(analog_pins[i]);
          vout = (value * 4.092) / 1024.0;
          vin = vout / (R2/(R1+R2));          
    
          char charBuf[analogChannel.length()+1];
          analogChannel.toCharArray(charBuf, analogChannel.length()+1);
          float theVoltage = (vin);
          int analogValues = analogRead(analog_pins[i]);
          aJson.addNumberToObject(analogReadings, charBuf, theVoltage);
        }
    
        // convert JSON object into char array, then delete JSON object
        char *json_String = aJson.print(msg);
        aJson.deleteItem(msg);
    

    现在该值已发布到 PubNub,并在 Freeboard.io 上以this link 绘制图表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      相关资源
      最近更新 更多