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. My Project
  3. PhoneyTV for Vera is Here!

PhoneyTV for Vera is Here!

Scheduled Pinned Locked Moved My Project
34 Posts 6 Posters 30.7k 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.
  • 5546dug5 Offline
    5546dug5 Offline
    5546dug
    wrote on last edited by
    #25

    no it is not

    1 Reply Last reply
    0
    • 5546dug5 Offline
      5546dug5 Offline
      5546dug
      wrote on last edited by
      #26

      @BulldogLowell I see in v3.1 pin d2 is called ' button pin' and is an' input' and 'pullup'
      (understand it is for the pushbutton use but even then it is only for a few sec. in my setup.)
      Also there is d13 defined as for the relay and used with the radio could that be an issue?

      How is the controller/GW telling the Phoney TV to change states? Do I need to run a wire from d2 (?) to gnd/vcc to create an interupt?
      I don't really need the button, but I will leave it there

      1 Reply Last reply
      0
      • 5546dug5 Offline
        5546dug5 Offline
        5546dug
        wrote on last edited by
        #27

        @BulldogLowell Just noticed your post is v3.1 lib 1.4.1 and I have lib 1.4

        That might be why I can't control from Vera ....then there is that d2 interrupt connection.

        B 1 Reply Last reply
        0
        • 5546dug5 5546dug

          @BulldogLowell Just noticed your post is v3.1 lib 1.4.1 and I have lib 1.4

          That might be why I can't control from Vera ....then there is that d2 interrupt connection.

          B Offline
          B Offline
          BulldogLowell
          Contest Winner
          wrote on last edited by
          #28

          @5546dug

          hmmm, looking at the code I posted I see why you have a problem.

          Try this:

          /*
           * PhoneyTV v3.1.1
           *
           * This Sketch illuminates 6 sets of LED's in a random fashion as to mimic the
           * light eminating from a television.  It is intended to make an empty home,
           * or an empty section of a home, appear to be occupied by someone watching
           * TV.  As an alternative to a real television left on, this uses less than 1%
           * of the electrical energy.
           *
           * With the use of the MySensors plugin and gateway, PhoneyTV is intended to
           * be used with a controller (e.g. Vera or Raspberry PI).
           *
           * Sketch does not use any delays to create the random blinking as a way to
           * assure that communication back to the gateway is as unaffected as possible.
           *
           * You can adjust the length of the blink interval and its "twitchyness" by
           * modifying the random number generators, if you prefer more/less 'motion' in
           * in your unit.  The lines are highlighted in the code, play around to create the
           * random effect you like.
           *
           * Sketch takes advantage of available PWM on pins 3, 5 & 6 using the white/blue LEDs
           * to allow fluctuations in the intensity of the light, enhancing the PhoneyTV's
           * realistic light effects.
           *
           * Created 12-APR-2014
           * Free for distrubution
           * Credit should be given to MySensors.org for their base code for relay control
           * and for the radio configuration.  Thanks Guys.
           *
           * 29-May-2014
           * Version 2:  Simplified the code, removing all redundant relay setup from original
           * code.  Added an on/off momentary pushputton option to be set up on pin 2.  Inproved
           * the dark dips for longer duration (can be configured) at intervals.
           *
           * 6-Jun-2015
           * Version 3.1
           * Updated for MySensors V1.4.1
           * Contributed by Jim (BulldogLowell@gmail.com) Inspired by Josh >> Deltanu1142@gmail.com
           */
          //
          #include <MySensor.h>
          #include <SPI.h>
          #include <Bounce2.h>
          //
          #define SKETCH_NAME "PhoneyTV"
          #define SKETCH_VERSION "3.1.1"
          //
          #define RADIO_RESET_DELAY_TIME 20
          //
          #define BUTTON_PIN  2  // Arduino Digital I/O pin number for button 
          #define CHILD_ID 1   // 
          #define RADIO_ID 5  //AUTO
          //
          #define DEBUG_ON
          //
          #ifdef DEBUG_ON
          #define DEBUG_PRINT(x)   Serial.print(x)
          #define DEBUG_PRINTLN(x) Serial.println(x)
          #define SERIAL_START(x)  Serial.begin(x)
          #else
          #define DEBUG_PRINT(x)
          #define DEBUG_PRINTLN(x)
          #define SERIAL_START(x)
          #endif
          //
          MySensor gw;
          MyMessage msg(CHILD_ID, V_LIGHT);
          //
          byte ledPin3 =  3;      // White using PWM
          byte ledPin4 =  4;      // Red
          byte ledPin5 =  5;      // Blue using PWM
          byte ledPin6 =  6;      // Blue using PWM
          byte ledPin7 =  7;      // Green
          byte ledPin8 =  8;      // White (No PWM)
          //
          Bounce debouncer = Bounce();
          byte oldValue = 0;
          boolean state = false;
          boolean oldState = false;
          int dipInterval = 10;
          int darkTime = 250;
          unsigned long currentDipTime;
          unsigned long dipStartTime;
          unsigned long currentMillis;
          byte ledState = LOW;
          unsigned long previousMillis = 0UL;
          byte led = 5;
          unsigned long interval = 2000UL;
          int twitch = 50;
          int dipCount = 0;
          int analogLevel = 100;
          boolean timeToDip = false;
          boolean gotAck=false;
          //
          void setup()
          {
            SERIAL_START(115200);
            pinMode(ledPin3, OUTPUT);
            pinMode(ledPin4, OUTPUT);
            pinMode(ledPin5, OUTPUT);
            pinMode(ledPin6, OUTPUT);
            pinMode(ledPin7, OUTPUT);
            pinMode(ledPin8, OUTPUT);
            pinMode(BUTTON_PIN, INPUT_PULLUP);
            //
            debouncer.attach(BUTTON_PIN);
            debouncer.interval(50);
            //
            gw.begin(incomingMessage, RADIO_ID, true, 0);  // configured as a repeating node!!
            gw.sendSketchInfo(SKETCH_NAME, SKETCH_VERSION);
            gw.wait(RADIO_RESET_DELAY_TIME);
            gw.present(CHILD_ID, S_LIGHT);
            gw.wait(RADIO_RESET_DELAY_TIME);
            while(!gw.send(msg.set(state), false))
            {
              gw.wait(RADIO_RESET_DELAY_TIME);
            }
            gw.wait(RADIO_RESET_DELAY_TIME);
            DEBUG_PRINTLN(F("Sensor Presentation Complete"));
          }
          //
          void loop()
          {
            gw.process();
            debouncer.update();
            byte value = debouncer.read();
            if (value != oldValue && value == 0)
            {
              state = !state;
              while(!gotAck)
              {
                gw.send(msg.set(state), true);
                gw.wait(RADIO_RESET_DELAY_TIME);
              }
              gotAck = false;
              DEBUG_PRINT(F("State Changed to:"));
              DEBUG_PRINTLN(state? F("PhoneyTV ON") : F("PhoneyTV OFF"));
            }
            oldValue = value;
            if (state)
            {
              if (timeToDip == false)
              {
                currentMillis = millis();
                if (currentMillis - previousMillis > interval)
                {
                  previousMillis = currentMillis;
                  interval = random(750, 4001); //Adjusts the interval for more/less frequent random light changes
                  twitch = random(40, 100); // Twitch provides motion effect but can be a bit much if too high
                  dipCount = dipCount++;
                }
                if (currentMillis - previousMillis < twitch)
                {
                  led = random(3, 9);
                  analogLevel = random(50, 255); // set the range of the 3 pwm leds
                  ledState = !ledState;
                  switch (led) //for the three PWM pins
                  {
                    case 3:
                      pwmWrite();
                      break;
                    case 5:
                      pwmWrite();
                      break;
                    case 6:
                      pwmWrite();
                      break;
                    default:
                      digitalWrite(led, ledState);
                  }
                  if (dipCount > dipInterval)
                  {
                    timeToDip = true;
                    dipCount = 0;
                    dipStartTime = millis();
                    darkTime = random(50, 150);
                    dipInterval = random(5, 250); // cycles of flicker
                  }
                }
              }
              else
              {
                DEBUG_PRINTLN(F("Dip Time"));
                currentDipTime = millis();
                if (currentDipTime - dipStartTime < darkTime)
                {
                  for (int i = 3; i < 9; i++)
                  {
                    digitalWrite(i, LOW);
                  }
                }
                else
                {
                  timeToDip = false;
                }
              }
            }
            else
            {
              if (state != oldState)
              {
                for (int i = 3; i < 9; i++)
                {
                  digitalWrite(i, LOW);
                }
              }
            }
            oldState = state;
          }
          //
          void incomingMessage(const MyMessage &message)
          {
            if (message.isAck())
            {
              DEBUG_PRINTLN(F("This is an ack from gateway"));
              gotAck = true;
            }
            if (message.type == V_LIGHT)
            {
              state = message.getBool();
              DEBUG_PRINT(F("Incoming change for sensor... New State = "));
              DEBUG_PRINTLN(state? F("ON") : F("OFF"));
            }
          }
          //
          void pwmWrite()
          {
            if (ledState == HIGH) 
            {
              analogWrite(led, analogLevel);
            }
            else 
            {
              digitalWrite(led, LOW);
            }
          }
          
          1 Reply Last reply
          0
          • 5546dug5 Offline
            5546dug5 Offline
            5546dug
            wrote on last edited by
            #29

            @BulldogLowell Thanks
            I will try. 3.1.1 when I get home

            1 Reply Last reply
            0
            • 5546dug5 Offline
              5546dug5 Offline
              5546dug
              wrote on last edited by
              #30

              @BulldogLowell
              here is screen shot of error codeArduino: 1.6.5 (Windows 8.1), Board: "Arduino Nano, ATmega328"

              Using library MySensors in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors (legacy)

              Using library SPI in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI

              Using library Bounce2 in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 (legacy)

              C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp -o C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp.o

              phoney_tv_july_20_3.1.1.ino: In function 'void setup()':
              phoney_tv_july_20_3.1.1.ino:111:6: error: 'class MySensor' has no member named 'wait'
              phoney_tv_july_20_3.1.1.ino:113:6: error: 'class MySensor' has no member named 'wait'
              phoney_tv_july_20_3.1.1.ino:116:8: error: 'class MySensor' has no member named 'wait'
              phoney_tv_july_20_3.1.1.ino:118:6: error: 'class MySensor' has no member named 'wait'
              phoney_tv_july_20_3.1.1.ino: In function 'void loop()':
              phoney_tv_july_20_3.1.1.ino:133:10: error: 'class MySensor' has no member named 'wait'
              'class MySensor' has no member named 'wait'

              B 1 Reply Last reply
              0
              • 5546dug5 5546dug

                @BulldogLowell
                here is screen shot of error codeArduino: 1.6.5 (Windows 8.1), Board: "Arduino Nano, ATmega328"

                Using library MySensors in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors (legacy)

                Using library SPI in folder: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI

                Using library Bounce2 in folder: C:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 (legacy)

                C:\Program Files (x86)\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\variants\eightanaloginputs -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\MySensors -IC:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Users\Carolyn & Doug\Documents\Arduino\libraries\Bounce2 C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp -o C:\Users\CAROLY~1\AppData\Local\Temp\build5063782765207672318.tmp\phoney_tv_july_20_3.1.1.cpp.o

                phoney_tv_july_20_3.1.1.ino: In function 'void setup()':
                phoney_tv_july_20_3.1.1.ino:111:6: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino:113:6: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino:116:8: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino:118:6: error: 'class MySensor' has no member named 'wait'
                phoney_tv_july_20_3.1.1.ino: In function 'void loop()':
                phoney_tv_july_20_3.1.1.ino:133:10: error: 'class MySensor' has no member named 'wait'
                'class MySensor' has no member named 'wait'

                B Offline
                B Offline
                BulldogLowell
                Contest Winner
                wrote on last edited by
                #31

                @5546dug

                I think you need to update your MySensors IDE.

                1 Reply Last reply
                0
                • 5546dug5 Offline
                  5546dug5 Offline
                  5546dug
                  wrote on last edited by
                  #32

                  Ok I will try that also
                  Thanks

                  1 Reply Last reply
                  0
                  • 5546dug5 Offline
                    5546dug5 Offline
                    5546dug
                    wrote on last edited by
                    #33

                    @BulldogLowell I downloaded lib 1.4.1 and just like that your code worked 100% THANKS.

                    It is something I could not have done.

                    Just a question, when in your code 3.1.1 you have a few scattered lines through out the declaration code with only // on these lines does it mean anything in particular ?
                    I couldn't find anything wrote up like the notations of /* and */ for writing comments and paragraphs .

                    B 1 Reply Last reply
                    0
                    • 5546dug5 5546dug

                      @BulldogLowell I downloaded lib 1.4.1 and just like that your code worked 100% THANKS.

                      It is something I could not have done.

                      Just a question, when in your code 3.1.1 you have a few scattered lines through out the declaration code with only // on these lines does it mean anything in particular ?
                      I couldn't find anything wrote up like the notations of /* and */ for writing comments and paragraphs .

                      B Offline
                      B Offline
                      BulldogLowell
                      Contest Winner
                      wrote on last edited by
                      #34

                      @5546dug said:

                      Just a question, when in your code 3.1.1 you have a few scattered lines through out the declaration code with only // on these lines does it mean anything in particular ?

                      Adding the "//" is only a personal preference of mine to use the comment marks rather than leaving a blank line. for me, with a certain text editor that I use, it is easier to edit and not inadvertently delete some curly brace and screw up my code!

                      @5546dug said:

                      your code worked 100% THANKS.

                      happy to hear you are going now, sorry about the mixup.

                      1 Reply Last reply
                      0

                      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


                      18

                      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