ajmckay Posted February 18, 2013 Share Posted February 18, 2013 Today I got my LED array working! It's awesome but has no dimming (yet).I have 2 questions that hopefully I can correct (with help).#1) I'm using revision 13 of the typhon 1.0 code. For some reason the test LEDs I have hooked up (no driver - just on a breadboard) operate opposite what the display options indicate. In other words when I set them to "off" they're on and when I set them to 100% they're off. I'm guessing it has something to do with the inverted 0-5v requirement for the buckpucks but I don't know how to find that in the code. At least I'm assuming it's the code, I don't know what would cause this behavior in the way I hooked it up.#2) I'm going to be setting my start/end times a lot for testing and such, but it's a huuuuge pain to scan through a 24 hour clock in 1 minute push button intervals. Is it possible to alter the code so that each button moves the time ahead or back by 10 minutes instead? I'm not going to get that specific with my lighting schedule anyways.The hardware is as follows:- Arduino duemilanove (MEGA 168 - no space for typhon v2 on there)- Meanwell LDD drivers (0-5v pwm signal)- RTC (DS1307)- 16x2 (HD44780 interface)- The link to the code is above (rather than copy/paste here)Thanks in advance. Quote Link to comment
ajmckay Posted February 18, 2013 Author Share Posted February 18, 2013 Still haven't figured out the code, but I decided to mess with the pwm on the drivers vs. the test leds on a breadboard... Okay so I wasn't getting any dimming when I connected the white PWM circuit to the i/o pin on my arduino... I did some googling and figured that it was probably something to do with the ground. So I tested it by connecting the pwm to the (-) input on the driver. That turned the LEDs off, but no control. Then I had the brilliant idea of connecting the other end of the PWM circuit to the (-) wire output on the driver. I touched it, it made a sound, so I immediately broke the connection. Then over about 2-3 seconds the LEDs flickered a bunch and the driver EXPLODED! Seriously it blew a bunch of resin out the back and started shooting out smoke like a firecracker. It smells horrible. FYI the LEDs aren't burned out at least. They all test fine with my AA battery tester. So now I'm in want of an extra meanwell LDD driver, (LDD-1000HW) anyone have an extra? Lesson learned: electronics noob + wires + guessing = fail Quote Link to comment
ajmckay Posted February 19, 2013 Author Share Posted February 19, 2013 Disaster averted! 1) Due to living very close to a certain well-known figure in the aquarium LED world I was able to pick up another meanwell LDD-1000h - I've lost track of how many times he's helped me out. This one has pins out the back instead of wires, but I found a $.99 IC socket at radio shack that fits this thing perfectly! 2) I figured out the PWM dimming and successfully tested it out on one of my LED strings. I decided to go over an RC thread about the LDD drivers once more in-case I missed something and indeed there was a good schematic on post #523 on page 21 of said RC thread. Turns out it's really simple and I almost stumbled on it on my own... So the last thing to do is learn how to reprogram the start/end times using 5 or 10 minute increments vs. the mad button pushing that happens when I can only scroll through 1 minute at a time. Quote Link to comment
ajmckay Posted March 23, 2013 Author Share Posted March 23, 2013 Okay people... Seriously I need to figure out how to advance the time for LED on/off by 10 minute increments instead of 1 minute increments (that's 1,440 button pushes vs. only 144). So here's my code, any suggestions? I'm concurrently researching the topic and trying to figure it out, but if someone has any hints that would rock. /* // Typhon firmware // v0.2 alpha 2010-23-11 // N. Enders, R. Ensminger // // This sketch provides firmware for the Typhon LED controller. // It provides a structure to fade 4 independent channels of LED lighting // on and off each day, to simulate sunrise and sunset. // // Current work in progress: // - store all LED variables in EEPROM so they are not reset by a loss of power // // Future developments may include: // - moon phase simulation // - storm simulation // // Sketch developed in Arduino-18 // Requires LiquidCrystal, Wire, EEPROM, EEPROMVar, and Button libraries. // Button is available here: http://www.arduino.cc/playground/Code/Button // EEPROMVar is available here: http://www.arduino.cc/playground/uploads/Profiles/EEPROMVar_01.zip */ // include the libraries: #include <LiquidCrystal.h> #include <Wire.h> #include <Button.h> #include <EEPROM.h> #include <EEPROMVar.h> /**** Define Variables & Constants ****/ /**************************************/ // set the RTC's I2C address #define DS1307_I2C_ADDRESS 0x68 // create the LCD LiquidCrystal lcd(8, 7, 5, 4, 16, 2); // set up backlight int bkl = 6; // backlight pin byte bklIdle = 10; // PWM value for backlight at idle byte bklOn = 70; // PWM value for backlight when on int bklDelay = 10000; // ms for the backlight to idle before turning off unsigned long bklTime = 0; // counter since backlight turned on // create the menu counter int menuCount = 1; int menuSelect = 0; //create manual override variables boolean override = false; byte overmenu = 0; int overpercent = 0; // create the buttons Button menu = Button(12,PULLDOWN); Button select = Button(13,PULLDOWN); Button plus = Button(14,PULLDOWN); Button minus = Button(15,PULLDOWN); // LED variables. These control the behavior of lighting. Change these to customize behavoir int minCounter = 0; // counter that resets at midnight. int oldMinCounter = 0; // counter that resets at midnight. int oneLed = 9; // pin for channel 1 int twoLed = 10; // pin for channel 2 int threeLed = 11; // pin for channel 3 int fourLed = 3; // pin for channel 4 int oneVal = 0; // current value for channel 1 int twoVal = 0; // current value for channel 2 int threeVal = 0; // current value for channel 3 int fourVal = 0; // current value for channel 4 // Variables making use of EEPROM memory: EEPROMVar<int> oneStartMins = 750; // minute to start this channel. EEPROMVar<int> onePhotoPeriod = 720; // photoperiod in minutes for this channel. EEPROMVar<int> oneMax = 100; // max intensity for this channel, as a percentage EEPROMVar<int> oneFadeDuration = 60; // duration of the fade on and off for sunrise and sunset for // this channel. EEPROMVar<int> twoStartMins = 810; EEPROMVar<int> twoPhotoPeriod = 600; EEPROMVar<int> twoMax = 100; EEPROMVar<int> twoFadeDuration = 60; EEPROMVar<int> threeStartMins = 810; EEPROMVar<int> threePhotoPeriod = 600; EEPROMVar<int> threeMax = 100; EEPROMVar<int> threeFadeDuration = 60; EEPROMVar<int> fourStartMins = 480; EEPROMVar<int> fourPhotoPeriod = 510; EEPROMVar<int> fourMax = 100; EEPROMVar<int> fourFadeDuration = 60; /* int oneStartMins = 1380; // minute to start this channel. int onePhotoPeriod = 120; // photoperiod in minutes for this channel. int oneMax = 100; // max intensity for this channel, as a percentage int oneFadeDuration = 60; // duration of the fade on and off for sunrise and sunset for // this channel. int twoStartMins = 800; int twoPhotoPeriod = 60; int twoMax = 100; int twoFadeDuration = 15; int threeStartMins = 800; int threePhotoPeriod = 60; int threeMax = 100; int threeFadeDuration = 30; int fourStartMins = 800; int fourPhotoPeriod = 120; int fourMax = 100; int fourFadeDuration = 60; */ /****** RTC Functions ******/ /***************************/ // Convert decimal numbers to binary coded decimal byte decToBcd(byte val) { return ( (val/10*16) + (val%10) ); } // Convert binary coded decimal to decimal numbers byte bcdToDec(byte val) { return ( (val/16*10) + (val%16) ); } // Sets date and time, starts the clock void setDate(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-31 byte month, // 1-12 byte year) // 0-99 { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.send(0); Wire.send(decToBcd(second)); Wire.send(decToBcd(minute)); Wire.send(decToBcd(hour)); Wire.send(decToBcd(dayOfWeek)); Wire.send(decToBcd(dayOfMonth)); Wire.send(decToBcd(month)); Wire.send(decToBcd(year)); Wire.endTransmission(); } // Gets the date and time void getDate(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS1307_I2C_ADDRESS); Wire.send(0); Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); *second = bcdToDec(Wire.receive() & 0x7f); *minute = bcdToDec(Wire.receive()); *hour = bcdToDec(Wire.receive() & 0x3f); *dayOfWeek = bcdToDec(Wire.receive()); *dayOfMonth = bcdToDec(Wire.receive()); *month = bcdToDec(Wire.receive()); *year = bcdToDec(Wire.receive()); } /****** LED Functions ******/ /***************************/ //function to set LED brightness according to time of day //function has three equal phases - ramp up, hold, and ramp down int setLed(int mins, // current time in minutes int ledPin, // pin for this channel of LEDs int start, // start time for this channel of LEDs int period, // photoperiod for this channel of LEDs int fade, // fade duration for this channel of LEDs int ledMax // max value for this channel ) { int val = 0; //fade up if (mins > start || mins <= start + fade) { val = map(mins - start, 0, fade, 0, ledMax); } //fade down if (mins > start + period - fade && mins <= start + period) { val = map(mins - (start + period - fade), 0, fade, ledMax, 0); } //off or post-midnight run. if (mins <= start || mins > start + period) { if((start+period)%1440 < start && (start + period)%1440 > mins ) { val=map((start+period-mins)%1440,0,fade,0,ledMax); } else val = 0; } if (val > ledMax) {val = ledMax;} if (val < 0) {val = 0; } analogWrite(ledPin, map(val, 0, 100, 0, 255)); if(override){val=overpercent;} return val; } /**** Display Functions ****/ /***************************/ // format a number of minutes into a readable time (24 hr format) void printMins(int mins, //time in minutes to print boolean ampm //print am/pm? ) { int hr = (mins%1440)/60; int mn = mins%60; if(hr<10){ lcd.print(" "); } lcd.print(hr); lcd.print(":"); if(mn<10){ lcd.print("0"); } lcd.print(mn); } // format hours, mins, secs into a readable time (24 hr format) void printHMS (byte hr, byte mn, byte sec //time to print ) { if(hr<10){ lcd.print(" "); } lcd.print(hr, DEC); lcd.print(":"); if(mn<10){ lcd.print("0"); } lcd.print(mn, DEC); lcd.print(":"); if(sec<10){ lcd.print("0"); } lcd.print(sec, DEC); } void ovrSetAll(int pct){ analogWrite(oneLed,map(pct,0,100,0,255)); analogWrite(twoLed,map(pct,0,100,0,255)); analogWrite(threeLed,map(pct,0,100,0,255)); analogWrite(fourLed,map(pct,0,100,0,255)); } /**** Setup ****/ /***************/ void setup() { Wire.begin(); pinMode(bkl, OUTPUT); lcd.begin(16, 2); digitalWrite(bkl, HIGH); lcd.print("Typhon-Reef"); lcd.setCursor(0,1); lcd.print(""); delay(5000); lcd.clear(); analogWrite(bkl,bklIdle); } /***** Loop *****/ /****************/ void loop() { byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDate(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); oldMinCounter = minCounter; minCounter = hour * 60 + minute; //check & set fade durations if(oneFadeDuration > onePhotoPeriod/2 && onePhotoPeriod >0){oneFadeDuration = onePhotoPeriod/2;} if(oneFadeDuration<1){oneFadeDuration=1;} if(twoFadeDuration > twoPhotoPeriod/2 && twoPhotoPeriod >0){twoFadeDuration = twoPhotoPeriod/2;} if(twoFadeDuration<1){twoFadeDuration=1;} if(threeFadeDuration > threePhotoPeriod/2 && threePhotoPeriod >0){threeFadeDuration = threePhotoPeriod/2;} if(threeFadeDuration<1){threeFadeDuration=1;} if(fourFadeDuration > fourPhotoPeriod/2 && fourPhotoPeriod > 0){fourFadeDuration = fourPhotoPeriod/2;} if(fourFadeDuration<1){fourFadeDuration=1;} //check & set any time functions //set outputs if(!override){ oneVal = setLed(minCounter, oneLed, oneStartMins, onePhotoPeriod, oneFadeDuration, oneMax); twoVal = setLed(minCounter, twoLed, twoStartMins, twoPhotoPeriod, twoFadeDuration, twoMax); threeVal = setLed(minCounter, threeLed, threeStartMins, threePhotoPeriod, threeFadeDuration, threeMax); fourVal = setLed(minCounter, fourLed, fourStartMins, fourPhotoPeriod, fourFadeDuration, fourMax); } else{ ovrSetAll(overpercent); } //turn the backlight off and reset the menu if the idle time has elapsed if(bklTime + bklDelay < millis() && bklTime > 0 ){ analogWrite(bkl,bklIdle); menuCount = 1; lcd.clear(); bklTime = 0; } //iterate through the menus if(menu.uniquePress()){ analogWrite(bkl,bklOn); bklTime = millis(); if(menuCount < 20){ menuCount++; }else { menuCount = 1; } lcd.clear(); } if(menuCount == 1){ //main screen turn on!!! if (minCounter > oldMinCounter){ lcd.clear(); } lcd.setCursor(0,0); printHMS(hour, minute, second); lcd.setCursor(0,1); lcd.print(oneVal); lcd.setCursor(4,1); lcd.print(twoVal); lcd.setCursor(8,1); lcd.print(threeVal); lcd.setCursor(12,1); lcd.print(fourVal); //debugging function to use the select button to advance the timer by 1 minute //if(select.uniquePress()){setDate(second, minute+1, hour, dayOfWeek, dayOfMonth, month, year);} } if(menuCount == 2){ //Manual Override Menu lcd.setCursor(0,0); lcd.print("Manual Overrides"); lcd.setCursor(0,1); lcd.print("All: "); if(select.uniquePress()){ if(menuSelect < 3){menuSelect++;} else{menuSelect = 0;} bklTime = millis(); } if(menuSelect == 0){ lcd.print("Timer"); override = false;} if(menuSelect == 1){ lcd.print("ON "); overpercent = 100; override = true;} if(menuSelect == 2){ lcd.print("OFF "); overpercent = 0; override = true;} if(menuSelect == 3){ override = true; lcd.print(overpercent,DEC); lcd.print("% "); if(plus.uniquePress() && overpercent <100){ overpercent++; bklTime = millis();} if(minus.uniquePress() && overpercent > 0){ overpercent--; bklTime = millis();} } } if(menuCount == 3){ //set start time for channel one lcd.setCursor(0,0); lcd.print("Channel 1 Start"); lcd.setCursor(0,1); printMins(oneStartMins, true); if(plus.uniquePress() && oneStartMins < 1440){ oneStartMins++; if(onePhotoPeriod >0){onePhotoPeriod--;} else{onePhotoPeriod=1439;} bklTime = millis(); } if(minus.uniquePress() && oneStartMins > 0){ oneStartMins--; if(onePhotoPeriod<1439){onePhotoPeriod++;} else{onePhotoPeriod=0;} bklTime = millis(); } } if(menuCount == 4){ //set end time for channel one lcd.setCursor(0,0); lcd.print("Channel 1 End"); lcd.setCursor(0,1); printMins(oneStartMins+onePhotoPeriod, true); if(plus.uniquePress()){ if(onePhotoPeriod < 1439){ onePhotoPeriod++;} else{ onePhotoPeriod=0; } bklTime = millis(); } if(minus.uniquePress()){ if(onePhotoPeriod >0){ onePhotoPeriod--;} else{ onePhotoPeriod=1439; } bklTime = millis(); } } if(menuCount == 5){ //set fade duration for channel one lcd.setCursor(0,0); lcd.print("Channel 1 Fade"); lcd.setCursor(0,1); printMins(oneFadeDuration, false); if(plus.uniquePress() && (oneFadeDuration < onePhotoPeriod/2 || oneFadeDuration == 0)){ oneFadeDuration++; bklTime = millis(); } if(minus.uniquePress() && oneFadeDuration > 1){ oneFadeDuration--; bklTime = millis(); } } if(menuCount == 6){ //set intensity for channel one lcd.setCursor(0,0); lcd.print("Channel 1 Max"); lcd.setCursor(1,1); lcd.print(oneMax); if(plus.uniquePress() && oneMax < 100){ lcd.clear(); oneMax++; bklTime = millis(); } if(minus.uniquePress() && oneMax > 0){ lcd.clear(); oneMax--; bklTime = millis(); } } if(menuCount == 7){ //set start time for channel two lcd.setCursor(0,0); lcd.print("Channel 2 Start"); lcd.setCursor(0,1); printMins(twoStartMins, true); if(plus.uniquePress() && twoStartMins < 1440){ twoStartMins++; if(twoPhotoPeriod >0){twoPhotoPeriod--;} else{twoPhotoPeriod=1439;} bklTime = millis(); } if(minus.uniquePress() && twoStartMins > 0){ twoStartMins--; if(twoPhotoPeriod<1439){twoPhotoPeriod++;} else{twoPhotoPeriod=0;} bklTime = millis(); } } if(menuCount == 8){ //set end time for channel two lcd.setCursor(0,0); lcd.print("Channel 2 End"); lcd.setCursor(0,1); printMins(twoStartMins+twoPhotoPeriod, true); if(plus.uniquePress()){ if(twoPhotoPeriod < 1439){ twoPhotoPeriod++;} else{ twoPhotoPeriod=0; } bklTime = millis(); } if(minus.uniquePress()){ if(twoPhotoPeriod >0){ twoPhotoPeriod--;} else{ twoPhotoPeriod=1439; } bklTime = millis(); } } if(menuCount == 9){ //set fade duration for channel two lcd.setCursor(0,0); lcd.print("Channel 2 Fade"); lcd.setCursor(0,1); printMins(twoFadeDuration, false); if(plus.uniquePress() && (twoFadeDuration < twoPhotoPeriod/2 || twoFadeDuration == 0)){ twoFadeDuration++; bklTime = millis(); } if(minus.uniquePress() && twoFadeDuration > 1){ twoFadeDuration--; bklTime = millis(); } } if(menuCount == 10){ //set intensity for channel two lcd.setCursor(0,0); lcd.print("Channel 2 Max"); lcd.setCursor(1,1); lcd.print(twoMax); if(plus.uniquePress() && twoMax < 100){ lcd.clear(); twoMax++; bklTime = millis(); } if(minus.uniquePress() && twoMax > 0){ lcd.clear(); twoMax--; bklTime = millis(); } } if(menuCount == 11){ //set start time for channel three lcd.setCursor(0,0); lcd.print("Channel 3 Start"); lcd.setCursor(0,1); printMins(threeStartMins, true); if(plus.uniquePress() && threeStartMins < 1440){ threeStartMins++; if(threePhotoPeriod >0){threePhotoPeriod--;} else{threePhotoPeriod=1439;} bklTime = millis(); } if(minus.uniquePress() && threeStartMins > 0){ threeStartMins--; if(threePhotoPeriod<1439){threePhotoPeriod++;} else{threePhotoPeriod=0;} bklTime = millis(); } } if(menuCount == 12){ //set end time for channel three lcd.setCursor(0,0); lcd.print("Channel 3 End"); lcd.setCursor(0,1); printMins(threeStartMins+threePhotoPeriod, true); if(plus.uniquePress()){ if(threePhotoPeriod < 1439){ threePhotoPeriod++;} else{ threePhotoPeriod=0; } bklTime = millis(); } if(minus.uniquePress()){ if(threePhotoPeriod >0){ threePhotoPeriod--;} else{ threePhotoPeriod=1439; } bklTime = millis(); } } if(menuCount == 13){ //set fade duration for channel three lcd.setCursor(0,0); lcd.print("Channel 3 Fade"); lcd.setCursor(0,1); printMins(threeFadeDuration, false); if(plus.uniquePress() && (threeFadeDuration < threePhotoPeriod/2 || oneFadeDuration == 0)){ threeFadeDuration++; bklTime = millis(); } if(minus.uniquePress() && threeFadeDuration > 1){ threeFadeDuration--; bklTime = millis(); } } if(menuCount == 14){ //set intensity for channel three lcd.setCursor(0,0); lcd.print("Channel 3 Max"); lcd.setCursor(1,1); lcd.print(threeMax); if(plus.uniquePress() && threeMax < 100){ lcd.clear(); threeMax++; bklTime = millis(); } if(minus.uniquePress() && threeMax > 0){ lcd.clear(); threeMax--; bklTime = millis(); } } if(menuCount == 15){ //set start time for channel four lcd.setCursor(0,0); lcd.print("Channel 4 Start"); lcd.setCursor(0,1); printMins(fourStartMins, true); if(plus.uniquePress() && fourStartMins < 1440){ fourStartMins++; if(fourPhotoPeriod >0){fourPhotoPeriod--;} else{fourPhotoPeriod=1439;} bklTime = millis(); } if(minus.uniquePress() && fourStartMins > 0){ fourStartMins--; if(fourPhotoPeriod<1439){fourPhotoPeriod++;} else{fourPhotoPeriod=0;} bklTime = millis(); } } if(menuCount == 16){ //set end time for channel four lcd.setCursor(0,0); lcd.print("Channel 4 End"); lcd.setCursor(0,1); printMins(fourStartMins+fourPhotoPeriod, true); if(plus.uniquePress()){ if(fourPhotoPeriod < 1439){ fourPhotoPeriod++;} else{ fourPhotoPeriod=0; } bklTime = millis(); } if(minus.uniquePress()){ if(fourPhotoPeriod >0){ fourPhotoPeriod--;} else{ fourPhotoPeriod=1439; } bklTime = millis(); } } if(menuCount == 17){ //set fade duration for channel four lcd.setCursor(0,0); lcd.print("Channel 4 Fade"); lcd.setCursor(0,1); printMins(fourFadeDuration, false); if(plus.uniquePress() && (fourFadeDuration < fourPhotoPeriod/2 || oneFadeDuration == 0)){ fourFadeDuration++; bklTime = millis(); } if(minus.uniquePress() && fourFadeDuration > 1){ fourFadeDuration--; bklTime = millis(); } } if(menuCount == 18){ //set intensity for channel four lcd.setCursor(0,0); lcd.print("Channel 4 Max"); lcd.setCursor(1,1); lcd.print(fourMax); if(plus.uniquePress() && fourMax < 100){ lcd.clear(); fourMax++; bklTime = millis(); } if(minus.uniquePress() && fourMax > 0){ lcd.clear(); fourMax--; bklTime = millis(); } } if(menuCount == 19){ //set hours lcd.setCursor(0,0); lcd.print("Set Time: Hrs"); lcd.setCursor(0,1); printHMS(hour, minute, second); if(plus.uniquePress() && hour < 23){ hour++; bklTime = millis(); } if(minus.uniquePress() && hour > 0){ hour--; bklTime = millis(); } setDate(second, minute, hour, dayOfWeek, dayOfMonth, month, year); } if(menuCount == 20){ //set minutes lcd.setCursor(0,0); lcd.print("Set Time: Mins"); lcd.setCursor(0,1); printHMS(hour, minute, second); if(plus.uniquePress() && minute < 59){ minute++; bklTime = millis(); } if(minus.uniquePress() && minute > 0){ minute--; bklTime = millis(); } setDate(second, minute, hour, dayOfWeek, dayOfMonth, month, year); } } Quote Link to comment
damage31 Posted March 24, 2013 Share Posted March 24, 2013 I would think that you would just need to change the handful of variables you are interested in that are similar to "oneStartMins++;" to be "oneStartMins = oneStartMins+10;" "++" after a variable name means to increment the variable value up by +1 I saw a few places in there that had the ++ that you'd want to update I would think. So, something like this should work: (untested code here) if(menuCount == 7){ //set start time for channel two lcd.setCursor(0,0); lcd.print("Channel 2 Start"); lcd.setCursor(0,1); printMins(twoStartMins, true); if(plus.uniquePress() && twoStartMins < 1440){ twoStartMins= twoStartMins+10; if(twoPhotoPeriod >0){twoPhotoPeriod--;} else{twoPhotoPeriod=1439;} bklTime = millis(); } if(minus.uniquePress() && twoStartMins > 0){ twoStartMins= twoStartMins-10; if(twoPhotoPeriod<1439){twoPhotoPeriod++;} else{twoPhotoPeriod=0;} bklTime = millis(); } } 2 Quote Link to comment
ajmckay Posted March 24, 2013 Author Share Posted March 24, 2013 Figured it out... Xxxstartmin=xxxstartmin+10. Also do it w/photoperiod. Also have to do it -10. Quote Link to comment
ajmckay Posted March 24, 2013 Author Share Posted March 24, 2013 Sorry damage I didn't refresh the page before I posted that. A friend suggested += 10 but that didn't work so then I tried the above solution and that works beautifully. But I really appreciate the post, and your response was clearer than mine so hopefully this can help out someone else! Quote Link to comment
Picogoby Posted January 28, 2020 Share Posted January 28, 2020 Hi, an old thread, but looking to put together a controller and wondered if the code here is working? If so I can copy and paste. ta! Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.