<div dir="ltr"><div><div>anyway, will this work?<br><br><br>/*<br></div> 4 channel dmx ac dimmer<br></div> with AC Light Control & DMXSerialRecv<br><div><div> AC Light Control<br> Ryan McLaughlin <<a href="mailto:ryanjmclaughlin@gmail.com">ryanjmclaughlin@gmail.com</a>><br> with slight modifications<br></div><div> DMXSerialRecv<br></div><div> mathertel <a href="https://github.com/mathertel/DMXSerial/tree/master/examples/DmxSerialRecv">https://github.com/mathertel/DMXSerial/tree/master/examples/DmxSerialRecv</a><br></div><div> with modifications<br></div><div>*/<br><br>#include <DMXSerial.h>         // <a href="https://github.com/mathertel/DMXSerial/blob/master/src/DMXSerial.h">https://github.com/mathertel/DMXSerial/blob/master/src/DMXSerial.h</a><br>#include <TimerOne.h>           // <a href="http://www.arduino.cc/playground/Code/Timer1">http://www.arduino.cc/playground/Code/Timer1</a><br>#define PINS 4<br>volatile int pinCount[PINS];    // make volatile to make available in interrupt<br>volatile boolean zero_cross=0;  // Boolean to store a "switch" to tell us if we have crossed zero<br>int AC_pins[] = {3,4,5,6};        // Stup the pin numbers<br>int AC_dim[PINS];               // Holds Dimming levels (0-128)  0 = on, 128 = 0ff<br>int freqStep = 65;              // Set the delay for the frequency of power (65 for 60Hz, 78 for 50Hz) per step (using 128 steps)<br>                                // freqStep may need some adjustment depending on your power the formula <br>                                // you need to us is (500000/AC_freq)/NumSteps = freqStep<br><br>void setup() {<br>  DMXSerial.init(DMXReceiver);        // Setup external mode signal, Hardware & Enable receiver and Receive interrupt<br> <br>  for(int a=0; a < PINS; a++) { //set the pins to output<br>   pinMode(AC_pins[a],OUTPUT);<br>   pinCount[a] = 0;             // keeps track of the time in the cycle <br>   AC_dim[a] = 0;               // dimming level set to zero<br>  }<br>  attachInterrupt(0, zero_cross_detect, FALLING);  // Attach Interrupt to Pin 2 (interrupt 0) for Zero Cross Detection<br>  Serial.begin(9600);<br>  Timer1.initialize(freqStep);                     // Initialize TimerOne library for the freq we need<br>  Timer1.attachInterrupt(dim_check, freqStep);     // Use the TimerOne Library to attach an interrupt<br>                                                   // to the function we use to check to see if it is <br>                                                   // the right time to fire the triac.  This function <br>                                                   // will now run every freqStep in microseconds.                                            <br>}<br><br>void zero_cross_detect() {        // function to be fired at the zero crossing                           <br>   zero_cross = 1;                // set flag to tell dimming function zero cross has occured<br>}                                 // End zero_cross_detect<br><br>void dim_check() {                   // Function will fire the triac at the proper time<br> if(zero_cross == 1) {               // First check to make sure the zero-cross has happened else do nothing<br>   for(int a=0; a < PINS; a++) {<br>     if(pinCount[a] >= AC_dim[a]) {       // Check and see if i has reached the dimming value we want<br>       digitalWrite(AC_pins[a], HIGH);    // Fire the Triac <br>       delayMicroseconds(5);              // Pause briefly to ensure the triac turned on<br>       digitalWrite(AC_pins[a], LOW);     // Turn off the Triac gate (Triac will turn off at the next zero cross)<br>       pinCount[a] = 0;                   // Reset the accumulator<br>       zero_cross = 0;                    // Reset the zero_cross so it may be turned on again at the next zero_cross_detect    <br>     } else {<br>       pinCount[a]++;                     // If the dimming value has not been reached, incriment the counter<br>     }    <br>   }<br> }<br>}<br><br>void loop() {<br>  // Calculate how long no data backet was received<br>  unsigned long lastPacket = DMXSerial.noDataSince();<br>  <br>  if (lastPacket < 5000) {<br>    // read recent DMX values and set dimmer levels <br>    analogWrite(AC_pins[a],,   DMXSerial.read[a]);<br><br>  // *This is simply making all outputs cycle through bright-dark, out of time with each other.<br> for(int i=0; i<127; i ++) {<br>   for(int a=0; a < PINS; a++) {<br>      int ii = i+42;               //this is the bit that puts the blinking lights out of sync with one another<br>      if(ii > 127) ii -= 127;<br>      AC_dim[a] = ii;<br>    }<br>    delay(50);<br>  }*//<br>}<br><br><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 25, 2016 at 8:57 AM, robb <span dir="ltr"><<a href="mailto:sf99er@gmail.com" target="_blank">sf99er@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">using an esp8266 w/it's <a href="http://www.instructables.com/id/ESP8266-NodeMCU-CPU-Speed-Test/" target="_blank">80 or 160mhz</a> clock might be the way to go tho<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 25, 2016 at 8:33 AM, robb <span dir="ltr"><<a href="mailto:sf99er@gmail.com" target="_blank">sf99er@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><a href="http://danfredell.com/df/Projects/Entries/2013/1/6_DMX_Dimmer.html" target="_blank">Dan Fredell's</a> 4 channel design uses a 20mhz clock<br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 25, 2016 at 1:01 AM, Jake <span dir="ltr"><<a href="mailto:jake@spaz.org" target="_blank">jake@spaz.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">send links along with claims like this<div><div><br>
<br>
On Wed, 24 Aug 2016, robb wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
and<br>
 why do you need a 20MHz crystal?<br>
apparently you need 20mhz for 4 stable channels when using the timer method<br>
<br>
</blockquote>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>