PhoneyTV for Vera is Here!
-
@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 -
@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.
-
@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.
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); } } -
@BulldogLowell Thanks
I will try. 3.1.1 when I get home -
@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' -
@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'I think you need to update your MySensors IDE.
-
@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 . -
@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 .@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.