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
  1. Home
  2. Troubleshooting
  3. What does 1 and 0 in send(msg.set(value==HIGH ? 1 : 0)) really means?

What does 1 and 0 in send(msg.set(value==HIGH ? 1 : 0)) really means?

Scheduled Pinned Locked Moved Troubleshooting
6 Posts 4 Posters 413 Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PL_RekinP Offline
    PL_RekinP Offline
    PL_Rekin
    wrote on last edited by
    #1

    Hi. This is a begginer question but I cannot find the answer, I use Mysensors for a while and I have some difficulties using PIN 0 and 1. In reed switches I use send(msg.set(value==HIGH ? 1 : 0)), and in SSR relays I use for example digitalWrite(RELAY_PIN_1, loadState(CHILD_ID_RELAY1)?RELAY_ON:RELAY_OFF); (where
    #define RELAY_ON 1
    #define RELAY_OFF 0
    Please tell me if this is the problem that PIN 0 and 1 doesnt work?What to do to use this pins and maintain my recent PIN usage...?

    badmannenB M 2 Replies Last reply
    0
    • PL_RekinP PL_Rekin

      Hi. This is a begginer question but I cannot find the answer, I use Mysensors for a while and I have some difficulties using PIN 0 and 1. In reed switches I use send(msg.set(value==HIGH ? 1 : 0)), and in SSR relays I use for example digitalWrite(RELAY_PIN_1, loadState(CHILD_ID_RELAY1)?RELAY_ON:RELAY_OFF); (where
      #define RELAY_ON 1
      #define RELAY_OFF 0
      Please tell me if this is the problem that PIN 0 and 1 doesnt work?What to do to use this pins and maintain my recent PIN usage...?

      badmannenB Offline
      badmannenB Offline
      badmannen
      wrote on last edited by
      #2

      @pl_rekin can you post some more of your code so it is a bit easier to see what you are trying to do.

      rPi 3 - UNO R3 - Mini - Nano - custom

      1 Reply Last reply
      0
      • PL_RekinP Offline
        PL_RekinP Offline
        PL_Rekin
        wrote on last edited by
        #3

        Sure. Sorry

        I send you modified code. I use relays, DHT sensors, reeds and motion sensors in one sketch (almast all pins are used).
        In PIN 0 and 1 I use Reed Switches. Normally for Reed switches I want to use all pins in Arduino Mega from 0 to 21 (all pins work except 0 and 1 here...)

        // Enable debug prints to serial monitor
        #define MY_DEBUG
        
        // Enable serial gateway
        #define MY_GATEWAY_SERIAL
        
        // Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
        #if F_CPU == 8000000L
        #define MY_BAUD_RATE 38400
        #endif
        
        // Enable inclusion mode
        #define MY_INCLUSION_MODE_FEATURE
        // Enable Inclusion mode button on gateway
        #define MY_INCLUSION_BUTTON_FEATURE
        
        // Inverses behavior of inclusion button (if using external pullup)
        //#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
        
        // Set inclusion mode duration (in seconds)
        #define MY_INCLUSION_MODE_DURATION 60 
        
        // Digital pin used for inclusion mode button
        #define MY_INCLUSION_MODE_BUTTON_PIN  3 
        
        #include <SPI.h>
        #include <MySensors.h>  
        #include <Bounce2.h>
        #include <DHT.h> // modified DHT11, DHT22 sensors library. Check Warning info!
        
        // -------------- PINS DEFINITION (Definicja Pinow) --------------
        
        /** ------- RGB LED (dioda RGB LED doustalania stanow)
         * RGB LED shows active status (using colors)
        */
        
        int redRGBLEDPin = A0;
        int greenRGBLEDPin = A1;
        int blueRGBLEDPin = A2;
        
        /** ------- RELAYS (przekazniki SSR, fotek)
         * Relays for Rack Moung (przekaznik SSR i Fotek - szafka rack)
        */
        
        #define RELAY_PIN_1 52 // PINs for Relays
        
        #define BUTTON_PIN A4 // PINS Buttons for Relays - to use normal wall switches (Przyciski / laczniki scienne)
        
        #define NUMBER_OF_RELAYS 10 // Total number of attached relays UNUSED!
        #define RELAY_ON 1  // GPIO value to write to turn on attached relay
        #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
        
        // ------- Relay for save state inside Arduino's EEPROM
        
        bool loadedState1 = false;
        bool initialValueSent = false;
        
        /** ------- REED SWTCHES (kontaktrony)
         * Relays for Rack Moung (Kontaktron w szafce Rack i w szufladzie z Arduino)
        */
        
        // ------- PINs for Reeds
        #define REED_PIN_1 0 ' PIN 0
        #define REED_PIN_2 1 ' PIN 1
        
        int oldValue=-1;
        
        // ------- VARIABLES for reed switch
        
        int oldValue1=-1;
        int oldValue2=-1;
        bool state = false;
        
        /** ------- PIR SENSORS (czujki ruchu)
         * PIR Sensors for Rack Moung (sensory ruchu na obudowie Rack)
        */
        
        // ------- PINs for PIR sensor
        #define DIGITAL_INPUT_SENSOR1 23   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
        #define DIGITAL_INPUT_SENSOR2 25
        #define SLEEP_NODE true
        
        // ------- VARIABLES for PIR sensor
        uint32_t SLEEP_TIME = 1000; // 120000; // Sleep time between reports (in milliseconds)
        
        int oldValueA = 0;
        int oldValueB = 0;
        
        bool stateA = false;
        bool stateB = false;
        
        /** ------- TEMPERATURE / HUMIDITY SENSOR (czujnik temperatury i wilgotnosci)
         * DHT22 sensors for checking temp and hum inside / outside Rack Mount (czujniki DHT22)
        */
        
        // ------- PINs for DHTs
        #define DHTPIN 22
        #define DHTPIN2 24
        #define DHTPIN3 26
        
        // ------- Initialize DHT sensor
        
        DHT dht1;
        DHT dht2;
        DHT dht3;
        
        unsigned long timeDHT = 30000; // 30 seconds
        
        unsigned long actualTime = 0;
        unsigned long actualTime2 = 0;
        unsigned long actualTime3 = 0;
        
        unsigned long recentTimeHum1 = 0;
        unsigned long recentTimeHum2 = 0;
        unsigned long recentTimeHum3 = 0;
        
        float lastTemp1;
        float lastTemp2;
        float lastTemp3;
        
        float lastHum1;
        float lastHum2;
        float lastHum3;
        
        boolean metric = true;
        
        // -------------- CHILD IDs (ID wszystkich sensorow) --------------
        
        #define CHILD_ID_REED1 0 
        #define CHILD_ID_REED2 10 
        
        #define CHILD_ID_TEMP1 1
        #define CHILD_ID_HUM1 2
        
        #define CHILD_ID_MOTION1 3
        #define CHILD_ID_MOTION2 4
        
        #define CHILD_ID_RELAY1 5
        
        #define CHILD_ID_TEMP2 6
        #define CHILD_ID_HUM2 7
        
        #define CHILD_ID_TEMP3 8
        #define CHILD_ID_HUM3 9
        
        // ----------------------------------------------------------------
        
        void before() {
        	for (int sensor=1, pin=RELAY_PIN_1; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
        		// Then set relay pins in output mode
        		pinMode(pin, OUTPUT);
        		// Set relay to last known state (using eeprom storage)
        		digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
        	}
        }
        
        // Reed switches needs debouncers
        Bounce debouncer_reed1 = Bounce();
        Bounce debouncer_reed2 = Bounce();
        
        //Relays switched - don't need debouncers
        Bounce debouncer_relay1 = Bounce();
        Bounce debouncer = Bounce();
        
        // Debouncer for Motion sensor
        Bounce debouncerA = Bounce();
        Bounce debouncerB = Bounce();
        
        // -------------- CHILD Initialization (inicjalizacja czujnikow) --------------
        
        // Initialize Relay
        MyMessage msg(CHILD_ID_RELAY1, V_STATUS);
        
        // Initialize reed switches
        MyMessage msgReed1(CHILD_ID_REED1, V_TRIPPED);
        MyMessage msgReed2(CHILD_ID_REED2, V_TRIPPED);
        
        // Initialize DHT22
        MyMessage msgTemp1(CHILD_ID_TEMP1, V_TEMP);
        MyMessage msgHum1(CHILD_ID_HUM1, V_HUM);
        
        MyMessage msgTemp2(CHILD_ID_TEMP2, V_TEMP);
        MyMessage msgHum2(CHILD_ID_HUM2, V_HUM);
        
        MyMessage msgTemp3(CHILD_ID_TEMP3, V_TEMP);
        MyMessage msgHum3(CHILD_ID_HUM3, V_HUM);
        
        // Initialize motion message
        MyMessage msg_motion1(CHILD_ID_MOTION1, V_TRIPPED);
        MyMessage msg_motion2(CHILD_ID_MOTION2, V_TRIPPED);
        
        // ----------------------------------------------------------------
        
        void setup() {
        
           // Setup RGB Led pins 
          pinMode(redRGBLEDPin, OUTPUT);
          pinMode(greenRGBLEDPin, OUTPUT);
          pinMode(blueRGBLEDPin, OUTPUT);     
        
           // Setup locally attached sensors
        	delay(100); 
        
        	// Setup DHT sensors
        	dht1.setup(DHTPIN);
        	dht2.setup(DHTPIN2);
        	dht3.setup(DHTPIN3);
        
        	// Setup the button.
        	pinMode(BUTTON_PIN, INPUT_PULLUP);
        	// After setting up the button, setup debouncer.
        	debouncer.attach(BUTTON_PIN);
        	debouncer.interval(5);
        	debouncer_relay1.attach(RELAY_PIN_1);
        	debouncer_relay1.interval(5);
         
        	// Setup the reed PINs
        	pinMode(REED_PIN_1,INPUT_PULLUP);
        	debouncer_reed1.attach(REED_PIN_1);
        	debouncer_reed1.interval(10);
          pinMode(REED_PIN_2,INPUT_PULLUP);
          debouncer_reed2.attach(REED_PIN_2);
          debouncer_reed2.interval(10);
                   
        
        	// Make sure relays are off when starting up
        	digitalWrite(RELAY_PIN_1, RELAY_OFF);
        	// Then set relay pins in output mode
        	pinMode(RELAY_PIN_1, OUTPUT);
        
        	// Set relay to last known state (using eeprom storage) 
        	loadedState1 = loadState(CHILD_ID_RELAY1);
        
        	// setup debouncer for Reed switch
        	debouncer_reed1.attach(REED_PIN_1);
        	debouncer_reed1.interval(5);
          debouncer_reed2.attach(REED_PIN_2);
          debouncer_reed2.interval(5);        
        
        	pinMode(REED_PIN_1,INPUT);
        	digitalWrite(REED_PIN_1,HIGH);
          pinMode(REED_PIN_2,INPUT);
          digitalWrite(REED_PIN_2,HIGH);
        
        	// Setup PIR Motion sensor "button"
        	pinMode(DIGITAL_INPUT_SENSOR1, INPUT_PULLUP); // Setup the button Activate internal pull-up
        	pinMode(DIGITAL_INPUT_SENSOR2, INPUT_PULLUP); //  sets the motion sensor digital pin as input / Setup the button Activate internal pull-up
        
        	// setup debouncer for motion sensor
        	debouncerA.attach(DIGITAL_INPUT_SENSOR1);
        	debouncerA.interval(5);
        
        	debouncerB.attach(DIGITAL_INPUT_SENSOR2);
        	debouncerB.interval(5);
        
        }
        
        // ----------------------------------------------------------------
        
        void presentation()  {
        	
        	sendSketchInfo("Arduino6", "1.0");
        
        	// Register all sensors to gw (gateway - they will be created as child devices)
        	present(CHILD_ID_RELAY1, S_BINARY);
        
        	present(CHILD_ID_REED1, S_DOOR);  
          present(CHILD_ID_REED2, S_DOOR);
        
        	present(CHILD_ID_TEMP1, S_TEMP);
        	present(CHILD_ID_HUM1, S_HUM);
        
        	present(CHILD_ID_TEMP2, S_TEMP);
        	present(CHILD_ID_HUM2, S_HUM);
        
        	present(CHILD_ID_TEMP3, S_TEMP);
        	present(CHILD_ID_HUM3, S_HUM);  
        
        	present(CHILD_ID_MOTION1, S_MOTION);
        	present(CHILD_ID_MOTION2, S_MOTION);
          
        }
        
        // ----------------------------------------------------------------
        
        void loop() {
        	actualTime = millis();
        
        	/**
        	 * ------- DHT22 SENSOR
        	*/
        
        	if (actualTime - recentTimeHum1 >= timeDHT) {	
        
        		recentTimeHum1 = actualTime;
        
        		float temperature1 = dht1.getTemperature();
        		if (isnan(temperature1)) {		
        		} else if (temperature1 != lastTemp1) {
        			lastTemp1 = temperature1;
        		if (!metric) {
        			temperature1 = dht1.toFahrenheit(temperature1);
        		}
        			send(msgTemp1.set(temperature1, 1));
        		}
        
        		float humidity1 = dht1.getHumidity();
        		if (isnan(humidity1)) {
        		} else if (humidity1 != lastHum1) {
        			lastHum1 = humidity1;
        			send(msgHum1.set(humidity1, 1));
        		}
        
        		float temperature2 = dht2.getTemperature();
        		if (isnan(temperature2)) {
        		} else if (temperature2 != lastTemp2) {
        			lastTemp2 = temperature2;
        		  if (!metric) {
        			temperature2 = dht2.toFahrenheit(temperature2);
        		  }
        			send(msgTemp2.set(temperature2, 1));
        		}
        
        		float humidity2 = dht2.getHumidity();
        		if (isnan(humidity2)) {
        		} else if (humidity2 != lastHum2) {
        			lastHum2 = humidity2;
        			send(msgHum2.set(humidity2, 1));
        		}
        
        		float temperature3 = dht3.getTemperature();
        		if (isnan(temperature3)) {
        		} else if (temperature3 != lastTemp3) {
        			lastTemp3 = temperature3;
        		  if (!metric) {
        			temperature3 = dht3.toFahrenheit(temperature3);
        		  }
        			send(msgTemp3.set(temperature3, 1));
        		}
        
        		float humidity3 = dht3.getHumidity();
        		if (isnan(humidity3)) {
        		} else if (humidity3 != lastHum3) {
        			lastHum3 = humidity3;
        			send(msgHum3.set(humidity3, 1));
        		}
        	}
        
        	/**
        	 * ------- MOTION SENSORS
        	*/
        
        	debouncerA.update(); // Get the update value
        	int valueA = debouncerA.read();
        
        	if (valueA != oldValueA) {
        		// Send in the new value
        		send(msg_motion1.set(valueA == HIGH ? 1 : 0)); // Send tripped value to gw
        		oldValueA = valueA;
            setColor(255, 0, 0);  // red
        		wait(5);
        	}    
        
        	debouncerB.update(); 
        	int valueB = debouncerB.read();
        
        	if (valueB != oldValueB) {
        		send(msg_motion2.set(valueB == HIGH ? 1 : 0));
        		oldValueB = valueB;
            setColor(255, 0, 0);  // red
        		wait(5);
        	}  
        	
        	/**
        	 * ------- SIGNAL-BASED SENSORS
        	*/
        	
        	if (!initialValueSent) {
        
        		// ------- RELAYS
        
        		send(msg.set(loadedState1?RELAY_ON:RELAY_OFF));
        
        		// -------  REED SWITCHES
        		
        		int value1 = debouncer_reed1.read();
        		send(msgReed1.set(value1==HIGH ? 1 : 0));
        		wait(5);
            int value2 = debouncer_reed2.read();
            send(msgReed2.set(value2==HIGH ? 1 : 0));
            wait(5);
                             
        
        		request(CHILD_ID_RELAY1, V_STATUS);
           
        		request(CHILD_ID_REED1, V_TRIPPED);
            request(CHILD_ID_REED2, V_TRIPPED);
                         
            
        		// -------  SHORT WAIT TIME
        		wait(2000, C_SET, V_STATUS);
        
        	}
        
        	// -------  Send locally attached sensor data here 
        	
        	if (debouncer.update()) {
        		// -------  Get the update value.
        		int value = debouncer.read();
        		
        		// -------  Send in the new value.
        		if(value != oldValue){
        			saveState(CHILD_ID_RELAY1, !loadState(CHILD_ID_RELAY1));
        			digitalWrite(RELAY_PIN_1, loadState(CHILD_ID_RELAY1)?RELAY_ON:RELAY_OFF);
        			send(msg.set(loadState(CHILD_ID_RELAY1)));
        			oldValue = value;
              //setColor(0, 0, 255);  // blue
        		}
        	}
        
        	if (debouncer_reed1.update()) {
        
        		int value1 = debouncer_reed1.read();
        		
        		if (value1 != oldValue1) {
        			send(msgReed1.set(value1==HIGH ? 1 : 0));
        			oldValue1 = value1;
              setColor(0, 255, 0);  // green
        		}
        	}
        
          if (debouncer_reed2.update()) {
        
            int value2 = debouncer_reed2.read();
            
            if (value2 != oldValue2) {
              send(msgReed2.set(value2==HIGH ? 1 : 0));
              oldValue2 = value2;
              setColor(0, 255, 0);  // green
            }
          }
        
            
        }
        
        // ----------------------------------------------------------------
        
        void receive(const MyMessage &message) {
        
        	if (message.type == V_STATUS) {
        		if (!initialValueSent) {
        		  initialValueSent = true; //Serial.println("Receiving initial value from controller");
        		}
        	
        		switch (message.sensor) {
        			case CHILD_ID_RELAY1:
        				loadedState1 =  message.getBool();
        				digitalWrite(RELAY_PIN_1, loadedState1 ? RELAY_ON : RELAY_OFF);
        				saveState(CHILD_ID_RELAY1, loadedState1);
        				send(msg.set(loadedState1?RELAY_ON:RELAY_OFF));
                setColor(0, 0, 255);  // blue
        			break;
        
        		}
        
        	}
        }
        
        // --- For RGB Led -------------------------------------------------------------
        void setColor(int red, int green, int blue)
        {
          #ifdef COMMON_ANODE
            red = 255 - red;
            green = 255 - green;
            blue = 255 - blue;
          #endif
          analogWrite(redRGBLEDPin, red);
          analogWrite(greenRGBLEDPin, green);
          analogWrite(blueRGBLEDPin, blue);  
        }
        
        1 Reply Last reply
        0
        • PL_RekinP PL_Rekin

          Hi. This is a begginer question but I cannot find the answer, I use Mysensors for a while and I have some difficulties using PIN 0 and 1. In reed switches I use send(msg.set(value==HIGH ? 1 : 0)), and in SSR relays I use for example digitalWrite(RELAY_PIN_1, loadState(CHILD_ID_RELAY1)?RELAY_ON:RELAY_OFF); (where
          #define RELAY_ON 1
          #define RELAY_OFF 0
          Please tell me if this is the problem that PIN 0 and 1 doesnt work?What to do to use this pins and maintain my recent PIN usage...?

          M Offline
          M Offline
          mickecarlsson
          wrote on last edited by
          #4

          The code that you posted:
          send(msg.set(value==HIGH ? 1 : 0))
          Translates to this
          If ”value” is HIGH (true) then send 1, if not send 0

          It has nothing to do with PIN 0 or 1

          The same goes for
          digitalWrite(RELAY_PIN_1, loadState(CHILD_ID_RELAY1)?RELAY_ON:RELAY_OFF);
          It translates to
          On RELAY_PIN_1, if it’s state is 1 write HIGH to RELAY_PIN_1 else write LOW.

          If you use serial in your sketch you can’t use PIN 0 or 1 as those pins are TX and RX.

          PL_RekinP 1 Reply Last reply
          2
          • M mickecarlsson

            The code that you posted:
            send(msg.set(value==HIGH ? 1 : 0))
            Translates to this
            If ”value” is HIGH (true) then send 1, if not send 0

            It has nothing to do with PIN 0 or 1

            The same goes for
            digitalWrite(RELAY_PIN_1, loadState(CHILD_ID_RELAY1)?RELAY_ON:RELAY_OFF);
            It translates to
            On RELAY_PIN_1, if it’s state is 1 write HIGH to RELAY_PIN_1 else write LOW.

            If you use serial in your sketch you can’t use PIN 0 or 1 as those pins are TX and RX.

            PL_RekinP Offline
            PL_RekinP Offline
            PL_Rekin
            wrote on last edited by
            #5

            @mickecarlsson Thanks. You explained that great :) I done some rework in my project and I am not using PIN 0 and 1 anymore.

            skywatchS 1 Reply Last reply
            1
            • PL_RekinP PL_Rekin

              @mickecarlsson Thanks. You explained that great :) I done some rework in my project and I am not using PIN 0 and 1 anymore.

              skywatchS Offline
              skywatchS Offline
              skywatch
              wrote on last edited by
              #6

              @pl_rekin It's great when the 'penny drops' - Learning is not so bad when you can admit not knowing something and move on with enhanced knowledge! :)

              1 Reply Last reply
              2
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              32

              Online

              11.7k

              Users

              11.2k

              Topics

              113.1k

              Posts


              Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
              • Login

              • Don't have an account? Register

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