2017-02-12 2 views
1

Может ли кто-нибудь помочь мне разобраться, как собрать эти два фрагмента кода, чтобы получить результат, который мне нужен? Мои глаза переходят от взгляда на это. Я знаю, что это ветерок, возможно, для всех, кроме меня, но я не программист, и это всего лишь для небольшого личного проекта.Как я могу получить значение вывода A0 из второго эскиза в массив JSON в первом эскизе?

До сих пор, после часов и часов чтения и просмотра любых видеороликов, которые я мог найти в отношении Arduino, Pubnub и датчиков, у меня есть чтение с сенсорным чтением в Pubnub. Я создал учетную запись Freeboard для визуализации, и все это работает. Проблема в том, что опубликованные данные ошибочны.

В принципе, я хочу прочитать напряжение аккумулятора и опубликовать его в PubNub. Я могу заставить Arduino (Uno R3) прочитать напряжение, и я могу настроить значения в коде, чтобы соответствовать фактическому напряжению. Проблема, с которой я сталкиваюсь, заключается в том, что этот бит кода работает и набивает его в массив JSON, который публикуется в PubNub.

Если кто-то захочет помочь мне и, может быть, объяснит немного (или нет - я в порядке, если я просто заработаю), я бы так оценил время, помощь и усилия.

Спасибо!

// Каждый эскиз работает независимо. Мне нужно объединить их, чтобы опубликовать правильное чтение.

//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 и графически на Freeboard.io в this link.

Смежные вопросы