Page 1 of 7 123 ... LastLast
Results 1 to 10 of 71

Thread: Help design new AC controller

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Help design new AC controller

    Hi everyone, so I am working on designing an AC controller that has triacs so it can be dimmed, similar to LOR or Renard. I may be selling these in the future or releasing files, so I thought I should ask you about how to design a few parts of it. So it will be using an atmega328p, the same chip that's in the arduino uno(Hopefully its fast enough). It will have both DMX and E131 inputs, and 16 120V AC outputs. I have just enough pins to have dip switches to select DMX address, and then 1 extra pin. I was planning on using this pin for a switch to select DMX or E131. But then we need some way to set ip address. I guess that will be a web page, but with no way to return back to the default IP with a button, you will need to look in your router's settings to find it. Is that a big problem? If it is, I can change that switch to a button that changes to a default IP, but then if you are using DMX, you will need to go to the webpage to select DMX or E131. And since you are using DMX it won't be connected to the network, so that would be a bit of a hastle to connect everything just to select DMX. Or I could just scrap the whole E131 thing since it wont be that useful anyways, and have 4 extra pins. One could be used for a status LED, but what about the others? Well there is 3 options and Im open to others, what do you think?

    Edit- Ill also need a name, so fire away.
    Last edited by Randomaker; 01-02-2021 at 06:43 PM.

  2. #2
    Join Date
    Oct 2012
    Posts
    304
    Post Thanks / Like

    Default Re: Help design new AC controller

    Any possibility of using an output as an input on power up? I've done that in the past where I check the status of the pin (setting to an input of course, internal pull up) and if its low it does its thing. If not, it sets it to be an output, and goes on with the execution.

  3. #3
    Join Date
    Aug 2008
    Location
    Delaware, OH
    Posts
    4,573
    Post Thanks / Like

    Default Re: Help design new AC controller

    With two pins you can connect a low cost OLED display for any type of status you want to provide.
    You can also go with a larger pin atmel processor and still run the arduino core, if that's what you are planning to do. (think arduino mega)
    You could force the config back to factory defaults by using the DMX dip switches set to all zero since that is an invalid DMX address to solve your 'lost' IP address issue.
    Finally, if you are going to utilize this group for design help, I'd like to suggest you open source the project.
    Most of this hobby is the fun of designing and sharing.
    A case in point are the wildly successful pixel stick controllers.
    Many variations, one software stack, and the core designs are open source.

  4. #4
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    Thats a good idea to set the IP to default, I didnt think of that. I may do that. Im already using i2c bus, so yes I could add a display without using any extra pins. If I have all dips off to return to default ip, is it worth the extra cost to add the screen though? The reason Im not using a 2560 (mega) is bc Im trying to stay to all tht components so anyone can build it. And yes, I am planning on making it open source once I build the first version to make sure this will even work.

    Edit- I guess I can make the screen optional, but that's another thing for an already underpowered (I think) arduino to do. But this project is for others as well as myself, so what do you think?
    Last edited by Randomaker; 01-02-2021 at 04:09 PM.

  5. #5
    Join Date
    Aug 2008
    Location
    Delaware, OH
    Posts
    4,573
    Post Thanks / Like

    Default Re: Help design new AC controller

    Isn't there an option to 'overclock' the 328 ?
    Quote Originally Posted by Randomaker View Post
    Thats a good idea to set the IP to default, I didnt think of that. I may do that. Im already using i2c bus, so yes I could add a display without using any extra pins. If I have all dips off to return to default ip, is it worth the extra cost to add the screen though? The reason Im not using a 2560 (mega) is bc Im trying to stay to all tht components so anyone can build it. And yes, I am planning on making it open source once I build the first version to make sure this will even work.

    Edit- I guess I can make the screen optional, but that's another thing for an already underpowered (I think) arduino to do. But this project is for others as well as myself, so what do you think?

  6. #6
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    You can overclock from 16mhz to 20, but then you run into some problems as the IDE is not set up for that. If Im using E131, Im also running into a problem with how to set mac addresses. The way I understand it, some ethernet modules have an eeprom chip on it that is pre programmed with a mac address that is not used on any other ethernet device in the world. That way you can just read the mac address from it and use that. But, I was planning on using the enc28J60 because its cheap and very easy to find, and that one doesnt have that chip. You must change the code for every single board you use to include a different mac address, and since I may be selling theese or something, I would need to buy the mac addresses. Then there is the problem with how to change the code everytime before uploading. So basically, I need to find a module that has that eeprom chip on it. I can look for one as they do exist but is it worth it? I mean, this is an AC controller. Who is really going to use E131? Origionally I was just planning on adding it because it was easy, so why not, but Im really starting to think its not worth ita dn I should just stick to DMX. If you disagree, its still possible, thats just what Im thinking.
    Last edited by Randomaker; 01-03-2021 at 01:26 PM.

  7. #7
    Join Date
    Dec 2011
    Location
    UK S80 postcode
    Posts
    1,519
    Post Thanks / Like

    Default Re: Help design new AC controller

    Quote Originally Posted by Randomaker View Post
    Thats a good idea to set the IP to default, I didnt think of that. I may do that. Im already using i2c bus, so yes I could add a display without using any extra pins. If I have all dips off to return to default ip, is it worth the extra cost to add the screen though? The reason Im not using a 2560 (mega) is bc Im trying to stay to all tht components so anyone can build it. And yes, I am planning on making it open source once I build the first version to make sure this will even work.

    Edit- I guess I can make the screen optional, but that's another thing for an already underpowered (I think) arduino to do. But this project is for others as well as myself, so what do you think?
    Hi, an I2C screen is quite easy to do. In the extract below it uses 4 pins (SCL, SDA and two buttons) If a button is pressed at boot it runs the setup function using the two buttons to change values. Once set, reboot and don’t press a button and the main code will run. Using this method it always defaults to the main code.
    Code:
    #include <Wire.h>
    #include <EEPROM.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define SSD1306_128_32
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    
    // variables for screen and menu
    int screen_position = 0; // button a postion.
    int A_100 = 0; // value for 100s digit.
    int A_10 = 0; // value for 10s digit.
    int A_1 = 0; // value for 1s digit.
    int B_100 = 0; // value for 100s digit.
    int B_10 = 0; // value for 10s digit.
    int B_1 = 0; // value for 1s digit.
    int A_eeprom; // stored pixel value.
    int B_eeprom; // stored pixel value.
    int button_1 = 12; // button pin.
    int button_2 = 11; // button pin.
    int screen_short = 8; // screen detect pin.
    
    // variables for screen pixel data splitting.
    int count_A; // T2 count value.
    int count_B; // T2 count value.
    
    
    void setup() {
      solid_led(); // sets onboard LED on.
      // read previously set values
      A_eeprom = ((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom.
      B_eeprom = ((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom.
      count_A = ((A_eeprom * 24) - 1); // convert pixels to bits.
      count_B = (((A_eeprom + B_eeprom) * 24) - 1); // convert pixels to bits.
    
      //  setup and menu if button pressed at power up.
      pinMode(button_2, INPUT_PULLUP); // set button input with pullup.
      delay(1);
      if (digitalRead(button_2) == LOW) { // check if pin is low - screen connected.
        pinMode(button_1, INPUT_PULLUP); // set button input with pullup.
        display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // start oled instance.
        display.clearDisplay(); // clear display.
        display.setTextSize(2); // set text size to 2.
        display.setTextColor(WHITE); // set text colour to white.
        A_100 = A_eeprom / 100; // calculate 100s digit.
        A_eeprom -= A_100 * 100; // subtract 100s digit.
        A_10 = A_eeprom / 10; // calculate 10s digit.
        A_eeprom -= A_10 * 10; // subtract 10s digit.
        A_1 = A_eeprom; // calculate 1s digit.
        B_100 = B_eeprom / 100; // calculate 100s digit.
        B_eeprom -= B_100 * 100; // subtract 100s digit.
        B_10 = B_eeprom / 10; // calculate 10s digit.
        B_eeprom -= B_10 * 10; // subtract 10s digit.
        B_1 = B_eeprom; // calculate 1s digit.
        pix_num_find(); // run the menu function.
      }
    
    //----MAIN FUNCTION CODE REMOVED FROM HERE-----
    
    // all below here is menu and screen functions only called if screen fitted.
    void pix_num_find() { // the menu function.
      for (;;) { // start endless loop.
        if (digitalRead(button_1) == LOW) screen_position++; // if button 'a' pressed increment position.
        if (screen_position > 7) screen_position = 1; // if at end of menu goto start.
        switch (screen_position) { // switch dependant on button 'a' value.
          case 0:
            display.clearDisplay(); // clear display.
            display.setCursor(0, 0); // set curser to line 0 left position.
            display.print("Renard"); // text to print on screen.
            display.setCursor(25, 16); // set curser to line 2 left position.
            display.print("PLUS 0.4"); // text to print on screen.
            display.display(); // update screen and display new text.
            delay(1000); // delay.
            break; // back to the start and do it all again.
    
          case 1:
            if (digitalRead(button_2) == LOW) A_100++; // if button 'b' pressed increment 100s value.
            if (A_100 > 9) A_100 = 0; // if value more than 9 set back to 0.
            set_screen(); // function to update screen with new values.
            delay(500); // delay.
            flash_screen_1(); // a screen update with the current digit masked out.
            delay(500); // delay.
            break; // back to the start and do it all again.
    
          case 2:
            if (digitalRead(button_2) == LOW) A_10++;
            if (A_10 > 9) A_10 = 0;
            set_screen();
            delay(500);
            flash_screen_2();
            delay(500);
            break;
    
          case 3:
            if (digitalRead(button_2) == LOW) A_1++;
            if (A_1 > 9) A_1 = 0;
            set_screen();
            delay(500);
            flash_screen_3();
            delay(500);
            break;
    
          case 4:
            if (digitalRead(button_2) == LOW) B_100++;
            if (B_100 > 9) B_100 = 0;
            set_screen();
            delay(500);
            flash_screen_4();
            delay(500);
            break;
    
          case 5:
            if (digitalRead(button_2) == LOW) B_10++;
            if (B_10 > 9) B_10 = 0;
            set_screen();
            delay(500);
            flash_screen_5();
            delay(500);
            break;
    
          case 6:
            if (digitalRead(button_2) == LOW) B_1++;
            if (B_1 > 9) B_1 = 0;
            set_screen();
            delay(500);
            flash_screen_6();
            delay(500);
            break;
    
          case 7: // the save values bit of the menu.
            if (digitalRead(button_2) == LOW) { // if button 'b' pressed to save.
              // add up 100s + 10s + 1s to gat a decimal value.
              EEPROM.update(0, ((A_100 * 100) + (A_10 * 10) + A_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(1, ((A_100 * 100) + (A_10 * 10) + A_1)); // write to eeprom bits [7:0].
              EEPROM.update(2, ((B_100 * 100) + (B_10 * 10) + B_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(3, ((B_100 * 100) + (B_10 * 10) + B_1)); // write to eeprom bits [7:0].
              delay(500); // delay
              display.clearDisplay(); // clear display.
              display.setCursor(0, 0); display.print("A now "); // set cursor and print text.
              display.print((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom and convert to decimal number.
              display.setCursor(0, 16); display.print("B now "); // set cursor and print text.
              display.print((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom and convert to decimal number.
              display.display(); // update display.
              screen_position = 1; // reset menu position to start.
              delay(5000); // delay.
              break; // back to the start and do it all again.
            }
            display.clearDisplay(); // if button 'b' not pressed.
            display.setCursor(0, 0); display.print("Set val's?"); // set cursor and print text.
            display.setCursor(0, 16); display.print((A_100 * 100) + (A_10 * 10) + A_1); // set cursor and calculate value as digits.
            display.print(" & "); display.print((B_100 * 100) + (B_10 * 10) + B_1); // set cursor and calculate value as decimal digits.
            display.display(); // update display.
            delay(1000); // delay.
            break; // back to the start and do it all again.
        }
      }
    }
    void set_screen() {
      display.clearDisplay();
      display.setTextSize(2);
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_1() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(" "); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_2() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(" "); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_3() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(" ");
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_4() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(" "); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_5() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(" "); display.print(B_1);
      display.display();
    }
    
    void flash_screen_6() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(" ");
      display.display();
    }
    
    void solid_led() {
      DDRB = DDRB | B00100000; // set port B [5] as output
      delayMicroseconds(1);
      PORTB = PORTB | B00100000; // set port B [5] high
      delay(1000);
    }
    void loop() {
      // put your main code here, to run repeatedly:
    }

  8. #8
    Join Date
    Aug 2008
    Location
    Delaware, OH
    Posts
    4,573
    Post Thanks / Like

    Default Re: Help design new AC controller

    Most excellent!
    Can't beat those adafruit libraries!!
    Quote Originally Posted by Barnabybear View Post
    Hi, an I2C screen is quite easy to do. In the extract below it uses 4 pins (SCL, SDA and two buttons) If a button is pressed at boot it runs the setup function using the two buttons to change values. Once set, reboot and donít press a button and the main code will run. Using this method it always defaults to the main code.
    Code:
    #include <Wire.h>
    #include <EEPROM.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define SSD1306_128_32
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    
    
    // variables for screen and menu
    int screen_position = 0; // button a postion.
    int A_100 = 0; // value for 100s digit.
    int A_10 = 0; // value for 10s digit.
    int A_1 = 0; // value for 1s digit.
    int B_100 = 0; // value for 100s digit.
    int B_10 = 0; // value for 10s digit.
    int B_1 = 0; // value for 1s digit.
    int A_eeprom; // stored pixel value.
    int B_eeprom; // stored pixel value.
    int button_1 = 12; // button pin.
    int button_2 = 11; // button pin.
    int screen_short = 8; // screen detect pin.
    
    // variables for screen pixel data splitting.
    int count_A; // T2 count value.
    int count_B; // T2 count value.
    
    
    void setup() {
      solid_led(); // sets onboard LED on.
      // read previously set values
      A_eeprom = ((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom.
      B_eeprom = ((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom.
      count_A = ((A_eeprom * 24) - 1); // convert pixels to bits.
      count_B = (((A_eeprom + B_eeprom) * 24) - 1); // convert pixels to bits.
    
      //  setup and menu if button pressed at power up.
      pinMode(button_2, INPUT_PULLUP); // set button input with pullup.
      delay(1);
      if (digitalRead(button_2) == LOW) { // check if pin is low - screen connected.
        pinMode(button_1, INPUT_PULLUP); // set button input with pullup.
        display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // start oled instance.
        display.clearDisplay(); // clear display.
        display.setTextSize(2); // set text size to 2.
        display.setTextColor(WHITE); // set text colour to white.
        A_100 = A_eeprom / 100; // calculate 100s digit.
        A_eeprom -= A_100 * 100; // subtract 100s digit.
        A_10 = A_eeprom / 10; // calculate 10s digit.
        A_eeprom -= A_10 * 10; // subtract 10s digit.
        A_1 = A_eeprom; // calculate 1s digit.
        B_100 = B_eeprom / 100; // calculate 100s digit.
        B_eeprom -= B_100 * 100; // subtract 100s digit.
        B_10 = B_eeprom / 10; // calculate 10s digit.
        B_eeprom -= B_10 * 10; // subtract 10s digit.
        B_1 = B_eeprom; // calculate 1s digit.
        pix_num_find(); // run the menu function.
      }
    
    //----MAIN FUNCTION CODE REMOVED FROM HERE-----
    
    // all below here is menu and screen functions only called if screen fitted.
    void pix_num_find() { // the menu function.
      for (;;) { // start endless loop.
        if (digitalRead(button_1) == LOW) screen_position++; // if button 'a' pressed increment position.
        if (screen_position > 7) screen_position = 1; // if at end of menu goto start.
        switch (screen_position) { // switch dependant on button 'a' value.
          case 0:
            display.clearDisplay(); // clear display.
            display.setCursor(0, 0); // set curser to line 0 left position.
            display.print("Renard"); // text to print on screen.
            display.setCursor(25, 16); // set curser to line 2 left position.
            display.print("PLUS 0.4"); // text to print on screen.
            display.display(); // update screen and display new text.
            delay(1000); // delay.
            break; // back to the start and do it all again.
    
          case 1:
            if (digitalRead(button_2) == LOW) A_100++; // if button 'b' pressed increment 100s value.
            if (A_100 > 9) A_100 = 0; // if value more than 9 set back to 0.
            set_screen(); // function to update screen with new values.
            delay(500); // delay.
            flash_screen_1(); // a screen update with the current digit masked out.
            delay(500); // delay.
            break; // back to the start and do it all again.
    
          case 2:
            if (digitalRead(button_2) == LOW) A_10++;
            if (A_10 > 9) A_10 = 0;
            set_screen();
            delay(500);
            flash_screen_2();
            delay(500);
            break;
    
          case 3:
            if (digitalRead(button_2) == LOW) A_1++;
            if (A_1 > 9) A_1 = 0;
            set_screen();
            delay(500);
            flash_screen_3();
            delay(500);
            break;
    
          case 4:
            if (digitalRead(button_2) == LOW) B_100++;
            if (B_100 > 9) B_100 = 0;
            set_screen();
            delay(500);
            flash_screen_4();
            delay(500);
            break;
    
          case 5:
            if (digitalRead(button_2) == LOW) B_10++;
            if (B_10 > 9) B_10 = 0;
            set_screen();
            delay(500);
            flash_screen_5();
            delay(500);
            break;
    
          case 6:
            if (digitalRead(button_2) == LOW) B_1++;
            if (B_1 > 9) B_1 = 0;
            set_screen();
            delay(500);
            flash_screen_6();
            delay(500);
            break;
    
          case 7: // the save values bit of the menu.
            if (digitalRead(button_2) == LOW) { // if button 'b' pressed to save.
              // add up 100s + 10s + 1s to gat a decimal value.
              EEPROM.update(0, ((A_100 * 100) + (A_10 * 10) + A_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(1, ((A_100 * 100) + (A_10 * 10) + A_1)); // write to eeprom bits [7:0].
              EEPROM.update(2, ((B_100 * 100) + (B_10 * 10) + B_1 >> 8)); // write to eeprom bits [15:8].
              EEPROM.update(3, ((B_100 * 100) + (B_10 * 10) + B_1)); // write to eeprom bits [7:0].
              delay(500); // delay
              display.clearDisplay(); // clear display.
              display.setCursor(0, 0); display.print("A now "); // set cursor and print text.
              display.print((EEPROM.read(0) * 256) + EEPROM.read(1)); // read eeprom and convert to decimal number.
              display.setCursor(0, 16); display.print("B now "); // set cursor and print text.
              display.print((EEPROM.read(2) * 256) + EEPROM.read(3)); // read eeprom and convert to decimal number.
              display.display(); // update display.
              screen_position = 1; // reset menu position to start.
              delay(5000); // delay.
              break; // back to the start and do it all again.
            }
            display.clearDisplay(); // if button 'b' not pressed.
            display.setCursor(0, 0); display.print("Set val's?"); // set cursor and print text.
            display.setCursor(0, 16); display.print((A_100 * 100) + (A_10 * 10) + A_1); // set cursor and calculate value as digits.
            display.print(" & "); display.print((B_100 * 100) + (B_10 * 10) + B_1); // set cursor and calculate value as decimal digits.
            display.display(); // update display.
            delay(1000); // delay.
            break; // back to the start and do it all again.
        }
      }
    }
    void set_screen() {
      display.clearDisplay();
      display.setTextSize(2);
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_1() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(" "); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_2() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(" "); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_3() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(" ");
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_4() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(" "); display.print(B_10); display.print(B_1);
      display.display();
    }
    
    void flash_screen_5() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(" "); display.print(B_1);
      display.display();
    }
    
    void flash_screen_6() {
      display.clearDisplay();
      display.setCursor(0, 0); display.print("OutA = "); display.print(A_100); display.print(A_10); display.print(A_1);
      display.setCursor(0, 16); display.print("OutB = "); display.print(B_100); display.print(B_10); display.print(" ");
      display.display();
    }
    
    void solid_led() {
      DDRB = DDRB | B00100000; // set port B [5] as output
      delayMicroseconds(1);
      PORTB = PORTB | B00100000; // set port B [5] high
      delay(1000);
    }
    void loop() {
      // put your main code here, to run repeatedly:
    }

  9. #9
    Join Date
    Apr 2020
    Posts
    62
    Post Thanks / Like

    Default Re: Help design new AC controller

    Im really thinking e131 isnt worth it anymore, Im running into a problem with MAC addresses now too. And like its an AC controller. Whats even the point of using E131? If you are just using theese controllers, then most likely you will be using DMX. Its easier and requires less hardware than E131. And if you are already using E131 for say pixel controllers, then most likely they have DMX outputs, so why buy extra switches to use e131 when its much easier to use DMX? Have you ever heard of a single other AC controller that has E131? And yes I know I could easily add a screen, but its not neccesary for just DMX. Without E131, I have plenty of pins to use dip switches with 4 extra pins, and thats how most other DMX devices do it. I mean yes I could use a screen and buttons to change DMX address, but the switches are cheaper and easier and will work just as well.
    Last edited by Randomaker; 01-03-2021 at 01:48 PM.

  10. #10
    Join Date
    Feb 2009
    Location
    Plymouth, MN
    Posts
    9,339
    Post Thanks / Like

    Default Re: Help design new AC controller

    I find it utterly fascinating that this thread has started. Could it be that the allure of pixels has perhaps peaked and a desire to get back to basics and a simpler time is starting to arise?


    http://digwdf.org/store/
    Even though the DIGWDF Store has been closed for two years, it's still awesome!
    User guides, documentation and other files are still free and available for downloading.

Page 1 of 7 123 ... LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •