Navigation

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

    Tiwo85

    @Tiwo85

    1
    Reputation
    7
    Posts
    245
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Tiwo85 Follow

    Best posts made by Tiwo85

    • Interrupts doesn't work on NRF5

      Hello,
      Sorry for my bad english, I'm from Germany and my school english is about 20 years ago.
      I'm trying to get this board working with Interrupts. https://www.openhardware.io/view/510/Multi-Sensor-TempHumidityPIR-LeakMagnetLightAccel

      I try the sketch from NeverDie https://www.openhardware.io/view/499/10-years-wireless-PIR-Sensor-on-just-one-set-of-3-AAs#tabs-source and modify the pin configuration, but it doen't work. Then I take an example from ReadBearLabs and transfer MySensor routines into it. But this also doesn't work. Only when I use "My_Core_only" then the Interrupts are working pretty well, but when I disable "My_Core_only" the Interrupt doesn't work.

      // SUMMARY: This demo sketch runs on the AM612 PIR v607 PCBto transmit battery voltage (heartbeat) and motion detections to a MySensors gateway using MySensors protocols.
      
      // Note: because this is a passive node, node ID must be set manually to a unique sensor node ID:
      #define MY_NODE_ID 143  // Passive mode requires static node ID
      
      //#define MY_CORE_ONLY
      
      #define MY_PASSIVE_NODE
      
      #define MY_RADIO_NRF5_ESB
      
      
      
      /**
       * 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-2017 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.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - tekka
       *
       * DESCRIPTION
       * Passive node example: This is a passive & independent reporting node
       *
       */
      
      // This demo sketch also draws from the MySensor's example MotionSensor sketch.
      
      #define IS_NRF51  //true iff the target is an nRF51.  If an nRF52, then comment this line out!
      
      #define SHORT_WAIT 50
      
      // Enable debug prints
      //#define MY_DEBUG
      
      #define PIN_LED1                (4) // 4 is sensor LED , 1 is onboard LED
      #define LED_BUILTIN          PIN_LED1
      
      #define PIN_SENSOR1                (10) // 2 is waterleak, 10 is PIR , 3 is Pin5/INT
      #define SENSOR1         PIN_SENSOR1
      
      
      #include <MySensors.h>
      
      //#define CHILD_ID_TEMP 1  //definitions contributed by smilvert (see above credit)
      #define CHILD_ID 2   // Id of the motion sensor child
      #define ID_S_MULTIMETER        28
      
      // Initialize general message
      //MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      MyMessage msg(CHILD_ID, V_TRIPPED);
      MyMessage msg_S_MULTIMETER_V_VOLTAGE(ID_S_MULTIMETER,V_VOLTAGE);
      
      float batteryVoltage=0;  
      
      /*#include "nrf_temp.h"
      
      float read_temp_value(){
      
        float temp=0;
      
        // Starten Sie die Temperaturmessung. 
        NRF_TEMP->TASKS_START = 1; 
      
        // Warten Sie, bis die Temperaturmessung abgeschlossen ist.
        while (NRF_TEMP->EVENTS_DATARDY == 0){
          // Do nothing.}
        }
        NRF_TEMP->EVENTS_DATARDY = 0;
      
        // Lesen Sie den Temperaturwert vom Sensor ab
        // Die Genauigkeit beträgt 0,25 Grad Celsius <=> 1 Einheit = 0,25 Grad Celsius
        // Teile durch 4, um einen C-Wert zu erhalten
        
        temp = ((float)nrf_temp_read() / 4.);
      
        // Hoàn thành quá trình đo. 
        NRF_TEMP->TASKS_STOP = 1; 
      
        return temp;
      }*/
      
      void blinkityBlink(uint8_t repetitions) {
        for (int x=0;x<repetitions;x++) {
          digitalWrite(LED_BUILTIN ,HIGH);
          delay(20);
          digitalWrite(LED_BUILTIN ,LOW);
          delay(100);
          digitalWrite(LED_BUILTIN ,HIGH);
          delay(20);
          digitalWrite(LED_BUILTIN ,LOW);    
          if (x<(repetitions-1)) {  //skip waiting at the end of the final repetition
            delay(500);
          }
        }
      }
      
      void handle_irq3(void) {
        if(HIGH == digitalRead(SENSOR1)){
            digitalWrite(LED_BUILTIN , HIGH);
            send(msg.set("1"));  // motion detected
        }
        else
        {
            digitalWrite(LED_BUILTIN , LOW);
             send(msg.set("0"));  // send all-clear to prepare for future detections
        }
      }
      
      void presentation()
      {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("NRF Motion Sensor", "1.0");
         // wait(SHORT_WAIT);
         // present(CHILD_ID_TEMP, S_TEMP,"Onboard Temperature");
        wait(SHORT_WAIT);
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID, S_MOTION,"Motion Sensor");
      
        wait(SHORT_WAIT);
        
        present(ID_S_MULTIMETER,S_MULTIMETER,"Electric Station");
        wait(SHORT_WAIT);
      }
      
      
      void setup() {
          // put your setup code here, to run once:
          //hwInit();
        //hwPinMode(LED_BUILTIN,OUTPUT_D0H1);
        //hwPinMode(SENSOR1,INPUT);
      
         //nrf_temp_init();
        pinMode(LED_BUILTIN , OUTPUT);
          digitalWrite(LED_BUILTIN , LOW);
        blinkityBlink(5);  //signify power-up and start of operations
      
        // set interrupts, pin default is HIGH
        attachInterrupt(SENSOR1, handle_irq3, CHANGE);
      }
      
      void loop() {
        // put your main code here, to run repeatedly:
        //send(msgTemp.set(read_temp_value(),2));
        batteryVoltage=((float)hwCPUVoltage())/1000.0;  //take voltage measurement after transmission to hopefully measure lowest voltage that occurs. 
        send(msg_S_MULTIMETER_V_VOLTAGE.set(batteryVoltage,3));  //send battery voltage with 3 decimal places
        sleep(900000); //sleep 15 min
      }```
      posted in Troubleshooting
      Tiwo85
      Tiwo85

    Latest posts made by Tiwo85

    • RE: Interrupts doesn't work on NRF5

      My lib is still on 2.2 and I think I installed it not in the right way. I will give it a try.

      posted in Troubleshooting
      Tiwo85
      Tiwo85
    • RE: Interrupts doesn't work on NRF5

      Nobody can help?

      posted in Troubleshooting
      Tiwo85
      Tiwo85
    • Interrupts doesn't work on NRF5

      Hello,
      Sorry for my bad english, I'm from Germany and my school english is about 20 years ago.
      I'm trying to get this board working with Interrupts. https://www.openhardware.io/view/510/Multi-Sensor-TempHumidityPIR-LeakMagnetLightAccel

      I try the sketch from NeverDie https://www.openhardware.io/view/499/10-years-wireless-PIR-Sensor-on-just-one-set-of-3-AAs#tabs-source and modify the pin configuration, but it doen't work. Then I take an example from ReadBearLabs and transfer MySensor routines into it. But this also doesn't work. Only when I use "My_Core_only" then the Interrupts are working pretty well, but when I disable "My_Core_only" the Interrupt doesn't work.

      // SUMMARY: This demo sketch runs on the AM612 PIR v607 PCBto transmit battery voltage (heartbeat) and motion detections to a MySensors gateway using MySensors protocols.
      
      // Note: because this is a passive node, node ID must be set manually to a unique sensor node ID:
      #define MY_NODE_ID 143  // Passive mode requires static node ID
      
      //#define MY_CORE_ONLY
      
      #define MY_PASSIVE_NODE
      
      #define MY_RADIO_NRF5_ESB
      
      
      
      /**
       * 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-2017 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.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - tekka
       *
       * DESCRIPTION
       * Passive node example: This is a passive & independent reporting node
       *
       */
      
      // This demo sketch also draws from the MySensor's example MotionSensor sketch.
      
      #define IS_NRF51  //true iff the target is an nRF51.  If an nRF52, then comment this line out!
      
      #define SHORT_WAIT 50
      
      // Enable debug prints
      //#define MY_DEBUG
      
      #define PIN_LED1                (4) // 4 is sensor LED , 1 is onboard LED
      #define LED_BUILTIN          PIN_LED1
      
      #define PIN_SENSOR1                (10) // 2 is waterleak, 10 is PIR , 3 is Pin5/INT
      #define SENSOR1         PIN_SENSOR1
      
      
      #include <MySensors.h>
      
      //#define CHILD_ID_TEMP 1  //definitions contributed by smilvert (see above credit)
      #define CHILD_ID 2   // Id of the motion sensor child
      #define ID_S_MULTIMETER        28
      
      // Initialize general message
      //MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      MyMessage msg(CHILD_ID, V_TRIPPED);
      MyMessage msg_S_MULTIMETER_V_VOLTAGE(ID_S_MULTIMETER,V_VOLTAGE);
      
      float batteryVoltage=0;  
      
      /*#include "nrf_temp.h"
      
      float read_temp_value(){
      
        float temp=0;
      
        // Starten Sie die Temperaturmessung. 
        NRF_TEMP->TASKS_START = 1; 
      
        // Warten Sie, bis die Temperaturmessung abgeschlossen ist.
        while (NRF_TEMP->EVENTS_DATARDY == 0){
          // Do nothing.}
        }
        NRF_TEMP->EVENTS_DATARDY = 0;
      
        // Lesen Sie den Temperaturwert vom Sensor ab
        // Die Genauigkeit beträgt 0,25 Grad Celsius <=> 1 Einheit = 0,25 Grad Celsius
        // Teile durch 4, um einen C-Wert zu erhalten
        
        temp = ((float)nrf_temp_read() / 4.);
      
        // Hoàn thành quá trình đo. 
        NRF_TEMP->TASKS_STOP = 1; 
      
        return temp;
      }*/
      
      void blinkityBlink(uint8_t repetitions) {
        for (int x=0;x<repetitions;x++) {
          digitalWrite(LED_BUILTIN ,HIGH);
          delay(20);
          digitalWrite(LED_BUILTIN ,LOW);
          delay(100);
          digitalWrite(LED_BUILTIN ,HIGH);
          delay(20);
          digitalWrite(LED_BUILTIN ,LOW);    
          if (x<(repetitions-1)) {  //skip waiting at the end of the final repetition
            delay(500);
          }
        }
      }
      
      void handle_irq3(void) {
        if(HIGH == digitalRead(SENSOR1)){
            digitalWrite(LED_BUILTIN , HIGH);
            send(msg.set("1"));  // motion detected
        }
        else
        {
            digitalWrite(LED_BUILTIN , LOW);
             send(msg.set("0"));  // send all-clear to prepare for future detections
        }
      }
      
      void presentation()
      {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("NRF Motion Sensor", "1.0");
         // wait(SHORT_WAIT);
         // present(CHILD_ID_TEMP, S_TEMP,"Onboard Temperature");
        wait(SHORT_WAIT);
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID, S_MOTION,"Motion Sensor");
      
        wait(SHORT_WAIT);
        
        present(ID_S_MULTIMETER,S_MULTIMETER,"Electric Station");
        wait(SHORT_WAIT);
      }
      
      
      void setup() {
          // put your setup code here, to run once:
          //hwInit();
        //hwPinMode(LED_BUILTIN,OUTPUT_D0H1);
        //hwPinMode(SENSOR1,INPUT);
      
         //nrf_temp_init();
        pinMode(LED_BUILTIN , OUTPUT);
          digitalWrite(LED_BUILTIN , LOW);
        blinkityBlink(5);  //signify power-up and start of operations
      
        // set interrupts, pin default is HIGH
        attachInterrupt(SENSOR1, handle_irq3, CHANGE);
      }
      
      void loop() {
        // put your main code here, to run repeatedly:
        //send(msgTemp.set(read_temp_value(),2));
        batteryVoltage=((float)hwCPUVoltage())/1000.0;  //take voltage measurement after transmission to hopefully measure lowest voltage that occurs. 
        send(msg_S_MULTIMETER_V_VOLTAGE.set(batteryVoltage,3));  //send battery voltage with 3 decimal places
        sleep(900000); //sleep 15 min
      }```
      posted in Troubleshooting
      Tiwo85
      Tiwo85
    • RE: 💬 Multi-Sensor: Temp/Humidity/PIR/ Leak/Magnet/Light/Accel

      @neverdie thank you. I made this sketch work. But I need to get work interrupts. I use your code for the am612, but it doesn't work. Then I use the example from Redbear labs "Example interrupted" to turn on the led when p0.02 is high. I use Mysensors library and set My Core only. Then it runs. But when I try to integrate Mysensors routines "presentation" etc. And disable "my core only" , then the interrupt doesn't work.

      // SUMMARY: This demo sketch runs on the AM612 PIR v607 PCBto transmit battery voltage (heartbeat) and motion detections to a MySensors gateway using MySensors protocols.
      
      // Note: because this is a passive node, node ID must be set manually to a unique sensor node ID:
      #define MY_NODE_ID 143  // Passive mode requires static node ID
      
      //#define MY_CORE_ONLY
      
      #define MY_PASSIVE_NODE
      
      #define MY_RADIO_NRF5_ESB
      
      
      
      /**
       * 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-2017 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.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - tekka
       *
       * DESCRIPTION
       * Passive node example: This is a passive & independent reporting node
       *
       */
      
      // This demo sketch also draws from the MySensor's example MotionSensor sketch.
      
      #define IS_NRF51  //true iff the target is an nRF51.  If an nRF52, then comment this line out!
      
      #define SHORT_WAIT 50
      
      // Enable debug prints
      //#define MY_DEBUG
      
      #define PIN_LED1                (4) // 4 is sensor LED , 1 is onboard LED
      #define LED_BUILTIN          PIN_LED1
      
      #define PIN_SENSOR1                (10) // 2 is waterleak, 10 is PIR , 3 is Pin5/INT
      #define SENSOR1         PIN_SENSOR1
      
      
      #include <MySensors.h>
      
      //#define CHILD_ID_TEMP 1  //definitions contributed by smilvert (see above credit)
      #define CHILD_ID 2   // Id of the motion sensor child
      #define ID_S_MULTIMETER        28
      
      // Initialize general message
      //MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      MyMessage msg(CHILD_ID, V_TRIPPED);
      MyMessage msg_S_MULTIMETER_V_VOLTAGE(ID_S_MULTIMETER,V_VOLTAGE);
      
      float batteryVoltage=0;  
      
      /*#include "nrf_temp.h"
      
      float read_temp_value(){
      
        float temp=0;
      
        // Starten Sie die Temperaturmessung. 
        NRF_TEMP->TASKS_START = 1; 
      
        // Warten Sie, bis die Temperaturmessung abgeschlossen ist.
        while (NRF_TEMP->EVENTS_DATARDY == 0){
          // Do nothing.}
        }
        NRF_TEMP->EVENTS_DATARDY = 0;
      
        // Lesen Sie den Temperaturwert vom Sensor ab
        // Die Genauigkeit beträgt 0,25 Grad Celsius <=> 1 Einheit = 0,25 Grad Celsius
        // Teile durch 4, um einen C-Wert zu erhalten
        
        temp = ((float)nrf_temp_read() / 4.);
      
        // Hoàn thành quá trình đo. 
        NRF_TEMP->TASKS_STOP = 1; 
      
        return temp;
      }*/
      
      void blinkityBlink(uint8_t repetitions) {
        for (int x=0;x<repetitions;x++) {
          digitalWrite(LED_BUILTIN ,HIGH);
          delay(20);
          digitalWrite(LED_BUILTIN ,LOW);
          delay(100);
          digitalWrite(LED_BUILTIN ,HIGH);
          delay(20);
          digitalWrite(LED_BUILTIN ,LOW);    
          if (x<(repetitions-1)) {  //skip waiting at the end of the final repetition
            delay(500);
          }
        }
      }
      
      void handle_irq3(void) {
        if(HIGH == digitalRead(SENSOR1)){
            digitalWrite(LED_BUILTIN , HIGH);
            send(msg.set("1"));  // motion detected
        }
        else
        {
            digitalWrite(LED_BUILTIN , LOW);
             send(msg.set("0"));  // send all-clear to prepare for future detections
        }
      }
      
      void presentation()
      {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("NRF Motion Sensor", "1.0");
         // wait(SHORT_WAIT);
         // present(CHILD_ID_TEMP, S_TEMP,"Onboard Temperature");
        wait(SHORT_WAIT);
        // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID, S_MOTION,"Motion Sensor");
      
        wait(SHORT_WAIT);
        
        present(ID_S_MULTIMETER,S_MULTIMETER,"Electric Station");
        wait(SHORT_WAIT);
      }
      
      
      void setup() {
          // put your setup code here, to run once:
          //hwInit();
        //hwPinMode(LED_BUILTIN,OUTPUT_D0H1);
        //hwPinMode(SENSOR1,INPUT);
      
         //nrf_temp_init();
        pinMode(LED_BUILTIN , OUTPUT);
          digitalWrite(LED_BUILTIN , LOW);
        blinkityBlink(5);  //signify power-up and start of operations
      
        // set interrupts, pin default is HIGH
        attachInterrupt(SENSOR1, handle_irq3, CHANGE);
      }
      
      void loop() {
        // put your main code here, to run repeatedly:
        //send(msgTemp.set(read_temp_value(),2));
        batteryVoltage=((float)hwCPUVoltage())/1000.0;  //take voltage measurement after transmission to hopefully measure lowest voltage that occurs. 
        send(msg_S_MULTIMETER_V_VOLTAGE.set(batteryVoltage,3));  //send battery voltage with 3 decimal places
        sleep(900000); //sleep 15 min
      }
      
      
      posted in OpenHardware.io
      Tiwo85
      Tiwo85
    • RE: 💬 Multi-Sensor: Temp/Humidity/PIR/ Leak/Magnet/Light/Accel

      @neverdie do you have a working example sketch. I try the example sketch from the 10years pir sensor an d modify a little bit, but it doesn't work. The sketch awake every 5 minutes and send the state from the pir and that's it.

      posted in OpenHardware.io
      Tiwo85
      Tiwo85
    • RE: 💬 Multi-Sensor: Temp/Humidity/PIR/ Leak/Magnet/Light/Accel

      @neverdie I mean this:
      0_1517742775930_ArduinoBoard.png
      When I use Generic nRF51 or something else, the onboard LED turns on and doesn't turns off. When I use Waveshare BLE400 the sketch works as usual

      posted in OpenHardware.io
      Tiwo85
      Tiwo85
    • RE: 💬 Multi-Sensor: Temp/Humidity/PIR/ Leak/Magnet/Light/Accel

      Wich board do you use in arduino? I can only use Waveshare BLE4.0. At Generic etc. It seems, that the oscillator doesn't work probably.

      posted in OpenHardware.io
      Tiwo85
      Tiwo85