2017-02-12 7 views
1

아무도 내가이 결과를 얻을 수 있도록이 두 조각의 코드를 함께 모을 수있게 도와 줄 수 있습니까? 이걸 보지 않고 눈을 감고 있습니다. 나는 이것이 아마도 나 자신 이외의 모든 사람들을위한 산들 바람이라고 알고 있지만 나는 프로그래머가 아니며 이것은 하나의 작은 개인 프로젝트를위한 것이다.첫 번째 스케치에서 두 번째 스케치의 핀 A0 값을 JSON 배열로 가져 오는 방법은 무엇입니까?

지금까지 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); 
    } 

답변

2

가장 매력적이고 적절한 방법은 아닐지 모르지만 필요한 것을하기 위해 이걸 가지고 있습니다.

// 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에 게시하고 this link에서 Freeboard.io에 그래프로 표시됩니다 : 나는 다음과 같은 코드를 사용하여 첫 번째 스케치를 편집했다.