Navigation

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

    Dave2526

    @Dave2526

    0
    Reputation
    2
    Posts
    2
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Dave2526 Follow

    Best posts made by Dave2526

    This user hasn't posted anything yet.

    Latest posts made by Dave2526

    • RE: Detect Interrupt / Timer

      Thats what I think, a really simple thing, Thank You, it works!

      resp_sleep=sleep(INTERRUPT,CHANGE,SLEEP_TIME);

      and then hust a simple if resp_sleep....

      Thanks!

      posted in Troubleshooting
      Dave2526
      Dave2526
    • Detect Interrupt / Timer

      Hello,
      maybe a noob Question but i can´t find an answer:
      I want to combine the Motion and the DS18B20 program. So The Temperature is sending every xx minutes, and the Motion Sensor is sending imedently. So I have to detect if the sleep is ending by the Time or The Interrupt. Is there a simple way to detect? The Code is dirty combined, i Know. I will make it better if its possible. Thanks!

      /**
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2015 Sensnology AB
       * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * DESCRIPTION
       *
       * Simple binary switch example 
       * Connect button or door/window reed switch between 
       * digitial I/O pin 3 (BUTTON_PIN below) and GND.
       * http://www.mysensors.org/build/binary
       */
      
      
      // Enable debug prints to serial monitor
      #define MY_DEBUG 
      
      // Enable and select radio type attached
      //#define MY_RADIO_NRF24
      #define MY_RADIO_RFM69
      //#define MY_IS_RFM69HW
      
      #define MY_NODE_ID      200
      // HW hinten dran = #define MY_IS_RFM69HW wird benötigt
      // BWM WZ     101
      // Test       200
      
      
      #include <SPI.h>
      #include <MySensors.h>
      #include <DallasTemperature.h>
      #include <OneWire.h>
      
      #define COMPARE_TEMP 0 // Send temperature only if changed? 1 = Yes 0 = No
      
      #define ONE_WIRE_BUS 4 // Pin where dallase sensor is connected 
      #define MAX_ATTACHED_DS18B20 16
      
      #define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch
      #define INTERRUPT BUTTON_PIN-2
      
      int BATTERY_SENSE_PIN = A0;
      unsigned long SLEEP_TIME = 600000;
      //12Std = 43200000
      
      OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
      DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. 
      float lastTemperature[MAX_ATTACHED_DS18B20];
      int numSensors=0;
      bool receivedConfig = false;
      bool metric = true;
      // Initialize temperature message
      
      int oldValue=-1;
      
      // Change to V_LIGHT if you use S_LIGHT in presentation below
      MyMessage msg(0,V_TEMP);
      MyMessage msg1(3,V_TRIPPED);
      
      void before()
      {
        // Startup up the OneWire library
        sensors.begin();
      }
      
      void setup()  
      {  
        // Setup the button
        pinMode(BUTTON_PIN,INPUT);
        // Activate internal pull-down
        digitalWrite(BUTTON_PIN,LOW);
      
        // requestTemperatures() will not block current thread
        sensors.setWaitForConversion(false);
        analogReference(INTERNAL);
        int sensorValue = analogRead(BATTERY_SENSE_PIN);
      
        analogReference(INTERNAL);
      
      }
      
      void presentation() {
        // Register binary input sensor to gw (they will be created as child devices)
        // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. 
        // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
        sendSketchInfo("BWM Temp", "1.0");
        present(3, S_DOOR);  
      
        // Fetch the number of attached temperature sensors  
        numSensors = sensors.getDeviceCount();
      
        // Present all sensors to controller
        for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {   
           present(i, S_TEMP);
      }
      }
      
      //  Check if digital input has changed and send in new value
      void loop() 
      {
      
        // BWM
        int value = digitalRead(BUTTON_PIN);
        send(msg1.set(value==HIGH));
      
      
        
        // Temp
        // Fetch temperatures from Dallas sensors
        sensors.requestTemperatures();
      
        // query conversion time and sleep until conversion completed
        int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
        // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
        sleep(conversionTime);
      
        // Read temperatures and send them to controller 
        for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {
      
          // Fetch and round temperature to one decimal
          float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;
      
          // Only send data if temperature has changed and no error
          #if COMPARE_TEMP == 1
          if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
          #else
          if (temperature != -127.00 && temperature != 85.00) {
          #endif
      
            // Send in the new temperature
            send(msg.setSensor(i).set(temperature,1));
            // Save new temperatures for next compare
            lastTemperature[i]=temperature;
            Serial.print(temperature);
          }
        }
      
            // get the battery Voltage
          int sensorValue = analogRead(BATTERY_SENSE_PIN);
      #ifdef MY_DEBUG
          Serial.println(sensorValue);
          Serial.println(digitalRead(BUTTON_PIN));
      #endif
      
          // 1M, 470K divider across battery and using internal ADC ref of 1.1V
          // Sense point is bypassed with 0.1 uF cap to reduce noise at that point
          // ((1e6+470e3)/470e3)*1.1 = Vmax = 3.44 Volts
          // 3.44/1023 = Volts per bit = 0.003363075
      
          int batteryPcnt = sensorValue *0.9375 -779.375;
          // Raum       Gain             Offset
          // Terrasse   0.9375          -779.375
      
      #ifdef MY_DEBUG
          float batteryV  = sensorValue * 0.003363075;
          Serial.print("Battery Voltage: ");
          Serial.print(batteryV);
          Serial.println(" V");
      
          Serial.print("Battery percent: ");
          Serial.print(batteryPcnt);
          Serial.println(" %");
      #endif
      
          sendBatteryLevel(batteryPcnt);
      
         sleep(INTERRUPT,CHANGE,SLEEP_TIME);
      }
      
      posted in Troubleshooting
      Dave2526
      Dave2526