Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
Andreas HenrikssonA

Andreas Henriksson

@Andreas Henriksson
About
Posts
6
Topics
1
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • Read string from serial port and send it to gateway
    Andreas HenrikssonA Andreas Henriksson

    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;
      }
    }
    
    
    Troubleshooting

  • Read string from serial port and send it to gateway
    Andreas HenrikssonA Andreas Henriksson

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

    Andreas H

    Troubleshooting

  • Read string from serial port and send it to gateway
    Andreas HenrikssonA Andreas Henriksson

    Hello

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

    Thanks
    Andreas H

    Troubleshooting

  • Read string from serial port and send it to gateway
    Andreas HenrikssonA Andreas Henriksson

    Opps . i missed that in this sketch :-(

    But the main problem is howto send a string och many chars :-(

    Troubleshooting

  • Read string from serial port and send it to gateway
    Andreas HenrikssonA Andreas Henriksson

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

    Andreas H

    Troubleshooting

  • Read string from serial port and send it to gateway
    Andreas HenrikssonA Andreas Henriksson

    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

    Troubleshooting
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular