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 819 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...?

    B 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...?

      B Offline
      B 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

              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

              With your input, this post could be even better 💗

              Register Login
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              11

              Online

              12.0k

              Users

              11.2k

              Topics

              113.4k

              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