Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. Andreas Henriksson
    3. Posts
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    Posts made by Andreas Henriksson

    • RE: Read string from serial port and send it to gateway

      Hello, i don't using this any more but i found this on my laptop.
      I can't confirm that i work, but it the latest version i have.

      #include <SPI.h>
      #include <MySensor.h>
      #include <DHT.h>
      
      #define CHILD_ID_INFO 0
      #define CHILD_ID_SOC 1
      #define CHILD_ID_STATE 2
      #define CHILD_ID_ERROR 3
      #define CHILD_ID_SET_STATE 4
      #define CHILD_ID_TEMP 5
      #define CHILD_ID_HUM 6
      
      //Pin
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      
      MySensor gw;
      MyMessage info(CHILD_ID_INFO, V_VAR1);
      MyMessage soc(CHILD_ID_SOC, V_VAR2);
      MyMessage state(CHILD_ID_STATE, V_VAR3);
      MyMessage error(CHILD_ID_ERROR, V_VAR4);
      MyMessage temp(CHILD_ID_TEMP, V_TEMP);
      MyMessage hum(CHILD_ID_HUM, V_HUM);
      
      DHT dht;
      
      //DHT Sensor
      const byte numChars = 25;
      char receivedChars[numChars];
      float lastTemp;
      float lastHum;
      boolean metric = true;
      
      //MySensorr
      int mySensorType;
      int mySensorMsg;
      
      String mySensorStr;
      String mySensorRaw;
      
      String mySensorRawSoc;
      String mySensorStrSoc;
      
      //Serial Read
      boolean newData = false;
      
      void setup()
      {
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN);
      
        gw.begin(incomingMessage, 1, false);
        Serial.begin(115200);
      
        // Send the sketch version information to the gateway and Controller
        gw.sendSketchInfo("Mover", "1.0");
      
        // Register all sensors to gateway (they will be created as child devices)
        gw.present(CHILD_ID_INFO, S_CUSTOM);
        gw.present(CHILD_ID_SOC, S_CUSTOM);
        gw.present(CHILD_ID_STATE, S_CUSTOM);
        gw.present(CHILD_ID_ERROR, S_CUSTOM);
        gw.present(CHILD_ID_SET_STATE, S_CUSTOM);
        gw.present(CHILD_ID_TEMP, S_TEMP);
        gw.present(CHILD_ID_HUM, S_HUM);
      
        metric = gw.getConfig().isMetric;
      }
      
      void loop()
      {
        recvWithStartEndMarkers();
        showNewData();
        gw.process();
      
      }
      
      void incomingMessage(const MyMessage &message)
      {
        // We only expect one type of message from controller. But we better check anyway.
        if (message.type == 28)
        {
          if (message.getInt() == 99)
          {
            float temperature = dht.getTemperature();
            //if (isnan(temperature))
            //{
            //  Serial.println("Failed reading temperature from DHT");
            //}
            
            if (temperature != lastTemp)
            {
              lastTemp = temperature;
              if (!metric)
              {
                temperature = dht.toFahrenheit(temperature);
              }
              
              //Serial.print("T: ");
              //Serial.println(temperature);
            }
            gw.send(temp.set(temperature, 1));
      
            float humidity = dht.getHumidity();
            //if (isnan(humidity))
            //{
            //  Serial.println("Failed reading humidity from DHT");
            //}
            if (humidity != lastHum)
            {
              lastHum = humidity;
              
              //Serial.print("H: ");
              //Serial.println(humidity);
            }
            gw.send(hum.set(humidity, 1));
      
      
          }
          else {
            //Serial.println(message.type);
            //Serial.print("Incoming change for sensor:");
            //Serial.println(message.sensor);
            //Serial.print(", New status: ");
            Serial.print(message.getInt());
          }  
        }
      
      
        //}
      }
      
      void recvWithStartEndMarkers()
      {
        static boolean recvInProgress = false;
        static byte ndx = 0;
        char startMarker = '<';
        char endMarker = '>';
        char rc;
      
        // if (Serial.available() > 0) {
        while (Serial.available() > 0 && newData == false)
        {
          rc = Serial.read();
      
          if (recvInProgress == true)
          {
            if (rc != endMarker)
            {
              receivedChars[ndx] = rc;
              ndx++;
              if (ndx >= numChars)
              {
                ndx = numChars - 1;
              }
      
            }
            else
            {
              receivedChars[ndx] = '\0'; // terminate the string
              recvInProgress = false;
              ndx = 0;
              newData = true;
            }
          }
      
          else if (rc == startMarker)
          {
            recvInProgress = true;
          }
        }
      }
      
      void showNewData()
      {
        if (newData == true)
        {
          mySensorRawSoc = receivedChars;
          mySensorStrSoc = mySensorRawSoc.substring(2, 6);
      
          mySensorRaw = receivedChars;
          mySensorStr = mySensorRaw.substring(2);
      
          switch (receivedChars[0])
          {
      
            case '1':
              gw.send(info.set(mySensorStr.c_str()));
              break;
            case '2':
              gw.send(soc.set(mySensorStrSoc.c_str()));
              break;
            case '3':
              gw.send(state.set(mySensorStr.c_str()));
              break;
            case '4':
              gw.send(error.set(mySensorStr.c_str()));
              break;
          }
      
          /*Serial.print ("type: ");
          Serial.println (receivedChars[0]);
          Serial.print ("Msg: ");
          Serial.println (receivedChars[2]);
          Serial.println (mySensorRaw);
          Serial.println (mySensorStr);
          */
          mySensorRawSoc = "";
          mySensorStrSoc = "";
          mySensorRaw = "";
          mySensorStr = "";
      
          newData = false;
        }
      }
      
      
      posted in Troubleshooting
      Andreas Henriksson
      Andreas Henriksson
    • RE: Read string from serial port and send it to gateway

      This did the trick.
      gw.send(msg.set(readString.c_str()));
      Thanks for this 🙂

      Andreas H

      posted in Troubleshooting
      Andreas Henriksson
      Andreas Henriksson
    • RE: Read string from serial port and send it to gateway

      Hello

      I dont get any error when i compile, so i will make a test later today.

      Thanks
      Andreas H

      posted in Troubleshooting
      Andreas Henriksson
      Andreas Henriksson
    • RE: Read string from serial port and send it to gateway

      Opps . i missed that in this sketch 😞

      But the main problem is howto send a string och many chars 😞

      posted in Troubleshooting
      Andreas Henriksson
      Andreas Henriksson
    • RE: Read string from serial port and send it to gateway

      Thanks
      Bu ti don't know how to fix this in my sketch 😞 , can you please point me to the right direction ??

      Andreas H

      posted in Troubleshooting
      Andreas Henriksson
      Andreas Henriksson
    • Read string from serial port and send it to gateway

      Hello

      I have play with my sensors a lot and it works perfect (only try standard sensors).
      But now i want to create a sensor that read/write on the serial port (pin 0 and 1) and send it to the gateway
      My C skills are very low but i try to learn 🙂

      This is my sketch:

      #include <SPI.h>
      #include <MySensor.h>  
      
      
      #define CHILD_ID 0
      String readString;
      
      MySensor gw;
      MyMessage msg(CHILD_ID,V_VAR1);
      
      void setup()  
      { 
        gw.begin();
        Serial.begin(115200);
      
        // Send the sketch version information to the gateway and Controller
        gw.sendSketchInfo("test", "1.0");
      
        // Register all sensors to gateway (they will be created as child devices)
        gw.present(CHILD_ID, S_CUSTOM);
      }
      
      void loop()   
      {
      	
        while (Serial.available()) {
          delay(3);  //delay to allow buffer to fill 
          if (Serial.available() >0) {
            char c = Serial.read();  //gets one byte from serial buffer
            readString += c; //makes the string readString
          } 
        }
      
        if (readString.length() >0) {
            Serial.println(readString); //see what was received
      
      	  gw.send(msg.set(readString));
      	  readString="";
          
        } 
      }
      

      The string from serial port looks like this: "4. ERO 11421"

      But when i verify the sketch in codebender i get this error:

      Test_sensor.ino:69:16: error: no matching member function for call to 'set'
      gw.send(msg.set(readString));
      ~~^

      Any idea how to fix this

      Thanks Andreas

      posted in Troubleshooting
      Andreas Henriksson
      Andreas Henriksson