Go Down

Topic: Umstieg Von Mega zu Nano Ws2812 Ethernet problem (Read 89 times) previous topic - next topic

psyqjo

HI zusammen,Ich versuche gerade für eine Led Bar einen Code umzuschreiben den ich für mein Mega benutze.
Dieser soll auf dem Nano auch laufen, aber ich vermute da wird es Probleme mit dem Ethernet shield geben.
Vorweg, am Nano sollen Zukünftig folgende Teile angeschlossen und benutzt werden:
Arduino Nano V3.0  (Vorhanden)
0,9" OLED 128x64 Display I 2C (Vorhanden)
Ethernet Shield ENC28J60 (Vorhanden)
DMX Shield zum Empfangen von DMX Signalen (In Arbeit)

Folgender Code soll für die oben Genannten Komponenten Angepasst werden, wobei bislang nur der Ethernet Part Probleme macht.

Code: [Select]

#include <Artnet.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
#include <SPI.h>
#include <Adafruit_NeoPixel.h>


// Neopixel settings
const int numLeds = 165; // change for your setup
const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels)
const byte dataPin = 2;
Adafruit_NeoPixel leds = Adafruit_NeoPixel(numLeds, dataPin, NEO_GRB + NEO_KHZ800);

// Artnet settings
Artnet artnet;


const int startUniverse = 1; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0.

// Check if we got all universes
const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0);
bool universesReceived[maxUniverses];
bool sendFrame = 1;
int previousDataLength = 0;

// Change ip and mac address for your setup
byte ip[] = {192, 168, 178, 46};
byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};

EthernetClient client;



void setup()
{
 
 

 
  if (Ethernet.begin(mac) == 0) {
   
    for (;;)
      ;
  }
  // print your local IP address:
 
 
  //Serial.begin(115200);
  artnet.begin(mac, ip);
  leds.begin();
  initTest();

  // this will be called for each packet received
  artnet.setArtDmxCallback(onDmxFrame);
 
}

void loop()
{
  // we call the read function inside the loop
  artnet.read();
  }

void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data)
{
  sendFrame = 1;
  // set brightness of the whole strip
  if (universe == 15)
  {
    leds.setBrightness(data[0]);
    leds.show();
  }

  // Store which universe has got in
  if ((universe - startUniverse) < maxUniverses)
    universesReceived[universe - startUniverse] = 1;

  for (int i = 0 ; i < maxUniverses ; i++)
  {
    if (universesReceived[i] == 0)
    {
      //Serial.println("Broke");
      sendFrame = 0;
      break;
    }
  }

  // read universe and put into the right part of the display buffer
  for (int i = 0; i < length / 3; i++)
  {
    int led = i + (universe - startUniverse) * (previousDataLength / 3);
    if (led < numLeds)
      leds.setPixelColor(led, data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
  }
  previousDataLength = length;     
 
  if (sendFrame)
  {
    leds.show();
    // Reset universeReceived to 0
    memset(universesReceived, 0, maxUniverses);
  }
 
}

void initTest()
{
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 127, 0, 0);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 127, 0);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 0, 127);
  leds.show();
  delay(500);
  for (int i = 0 ; i < numLeds ; i++)
    leds.setPixelColor(i, 0, 0, 0);
  leds.show();
}


Kennt jemand eine Gute Lib für das Ethernet shield, und Ist diese mit dem Artnet kompatiebel?

sschultewolter

Und was funktioniert nicht? Speichermangel? Pins nicht kompatibel? Schaltplan?
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

HotSystems

Auch wenn es noch nicht das Problem ist, welche Library verwendest zu für dein Oled-Display?
Ich befürchte, du wirst Probleme mit dem Speicherplatz (Flash) bekommen.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme.

uwefed

Vergiß es.
NeoPixel brauchen RAM ( ca 500 Byte)
Der ENC28J60 braucht viel RAM da der Arduino das Protokoll verwalten muß und nicht wie der W5100 das intern macht.
DMX braucht sicher auch noch RAM und der NANO hat nur 2kByte.
OLED braucht auch noch RAM

Grüße Uwe

psyqjo

@Uwefed
Wäre das problem mit dem Eternet evtl behoben wenn man ein W5100 Shield mit dem Nano nutz?

Das Oled wird nur bei bedarf genutzt, heist solange ich im menüe etwas einstelle wie z.b. die dmx adresse soll das oled an sein ansonsten aus, erst wieder bei betätigung eines tasters. und es wird die U8Glib dafür genutzt.

Zum thema Adafruids, pro Nano werden nur 15 Ws2812 angesteuert, diese sollen am ende über DMX oder Artnet gesteuert werden. dies wird dann im menü eingestellt welches Protokoll genutzt werden soll.

Vorerst wäre aber erst einmal die funktion des ethernet Shieldes wichtig.

HotSystems

Das Oled wird nur bei bedarf genutzt, heist solange ich im menüe etwas einstelle wie z.b. die dmx adresse soll das oled an sein ansonsten aus, erst wieder bei betätigung eines tasters. und es wird die U8Glib dafür genutzt.
Die U8Glib braucht sehr viel Flash, wenn die Library nicht geändert wurde. Und auch wenn du das Display ausschaltest, wird der Speicher verbraucht. Da reich Flash mit den weiteren Modulen def. nicht aus.
I2C = weniger ist mehr: weniger Kabel, mehr Probleme.

sschultewolter

Schau dich für dein Vorhaben nach einem anderen AVR/ARM um. Atmega644 zB. ist auch im Dip Verfügbar.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy