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 27.2k 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.

        BulldogLowellB 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.

          BulldogLowellB Offline
          BulldogLowellB 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'

              BulldogLowellB 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'

                BulldogLowellB Offline
                BulldogLowellB 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 .

                    BulldogLowellB 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 .

                      BulldogLowellB Offline
                      BulldogLowellB 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
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      18

                      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