Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
projekte:dot-matrix-display [2016-06-28 09:39]
cracki
projekte:dot-matrix-display [2017-01-17 02:01] (current)
Line 10: Line 10:
 Zwei Dot Matrix Panels aus China, 32x16 Pixel Rot, 10 mm Pitch (P10). Keine Ahnung, wem die gehören. Zwei Dot Matrix Panels aus China, 32x16 Pixel Rot, 10 mm Pitch (P10). Keine Ahnung, wem die gehören.
  
-Arduino, Steckbrett, Netzteil sind Clubbesitz/​Getränkekasse.+Arduino, ESP8266 NodeMCU Devboard, Steckbrett, Netzteil sind Clubbesitz/​Getränkekasse.
  
   * http://​digital-wizard.net/​avr_projects/​p10_led_display_panel_interface   * http://​digital-wizard.net/​avr_projects/​p10_led_display_panel_interface
Line 17: Line 17:
   * https://​github.com/​freetronics/​DMD2   * https://​github.com/​freetronics/​DMD2
  
-Example Code mit Noise, gerade genug um es am laufen zu halten: +===== Pinbelegungen =====
-<​code>​ +
-/* +
-  Game of Life display+
  
-  ​Simulates Conway'​s Game of Life +  ​* 1: Output Enable (PWM-fähig) 
-  ​https://​en.wikipedia.org/​wiki/​Conway%27s_Game_of_Life +  ​* 2A mux 
- */+  4: B mux 
 +  * 8: Shift Clock (SPI clock) 
 +  * 10: Store Clock (SPI select) 
 +  * 12: R (SPI mosi)
  
-#include <​SPI.h>​ +===== Implementierung =====
-#include <​DMD2.h>​+
  
-// How many displays do you have? +  * modifizierte DMD2: https://github.com/​crackwitz/​DMD2 
-const int WIDTH = 2; +  * arduino sketch und lua script https://​github.com/​crackwitz/​esp8266-arduino-dmd2-pixelflut 
-const int HEIGHT = 1;+  * TCP pixelflut kommt *vielleicht* noch. wer ne implementierung in NodeMCU-Lua anschleppt
  
-SPIDMD dmd(WIDTH,​HEIGHT);​+==== MQTT Endpunkte ====
  
-void populate_random_cells() { +  * runlevel : shutdown/​launch 
-  // Populate the initial display randomly +    * kontrolliert,​ ob gameoflife laeuft oder alles aus 
-  ​for(int x = 0; x < dmd.width; x++) { +  ​* cracki/esp-devboard
-    ​for(int y 0; y < dmd.height; y++) { +    * reset : 
-      ​if(random(100) < 30) // Increase 30 to a higher number to set more initial pixels +      * "​arduino" ​resettet nur den Arduino 
-        ​dmd.setPixel(x,​y,​GRAPHICS_ON);​ +      ​* alles andere resettet den ganzen Apparat 
-      ​dmd.setPixel(x,y,​GRAPHICS_OFF);​ +    * solid : 0/1/255 
-    ​} +      * 0 und 1 setzen die pixel auf 0 oder 1 
-  } +      ​* 255 invertiert alles 
-}+    * dutycycle : 0-255 
 +      * sollte man nicht uebertreiben,​ sonst sperrt das alles komplettDie aktuelle Stromversorgung ​(und Verkabelung) sollte nicht weit ueber 20 getrieben werdensonst haengt das alles. 
 +    * pixelflut : PX <x> <y> <0/1> 
 +    ​* bitmap : 128 bytes 
 +    * text : Text vollhoch 
 +    * text1 : Text Zeile 1 
 +    * text2 : Text Zeile 2 
 +    * gameoflife : 0/1 
 +    * gameoflife/​noise : 0-255 
 +    * gameoflife/​autonoise : 0/1
  
-// the setup routine runs once when you press reset: +==== Pinbelegungen ====
-void setup() { +
-  Serial.begin(9600);​ +
-  dmd.setBrightness(50);​ +
-  dmd.begin();​+
  
-  randomSeed(analogRead(0));​ +Panel -> Arduino: 
-  ​populate_random_cells(); +  ​* 1 -> D9 (mit 100k pulldown, sonst legen die panels los, ueberlasten das netzteil, spannung am arsch, arduino kommt nicht hoch
-}+  * 4 -> D7 
 +  * 8 -> D13 
 +  * 10 -> D8 
 +  * 12 -> D11
  
-// the loop routine runs over and over again forever+Arduino mit ESP fuer netzwerk
-void loop() { +  * RXD <- ESP TXD0 
-  ​// Store the current generation by copying the current DMD frame contents +  * TXD <- ESP RXD0 
-  ​DMDFrame current_generation(dmd);​+  ​* reset <- ESP D2 
 +  ​* GND und VCC passend
  
-  long start = millis();+ESP als netzwerksklave an Arduino: 
 +  * erde, vcc 
 +  * TXD0 -> Arduino RX 
 +  * RXD0 -> Arduino TX 
 +  * D2 -> arduino reset
  
-  // Update next generation of every pixel +ungetestete alternative,​ falls man custom firmware fuer den ESP bauen will: 
-  ​bool change = false; +  ​* 2 (A mux) -> D1 
-  ​for(int x = 0; x < dmd.width; x++{ +  ​* 4 (B mux-> D2 
-    for(int y = 0; y < dmd.height; y++{ +  * 1 (OE) -> D3 (sollte PWM koennen
-      bool state = current_generation.getPixel(x,y); +  * 8 (SPI clock) -> D5 (HSCLK
-      int live_neighbours = 0;+  * 10 (store pulse) -> D0 (gpio) 
 +  * 12 (R) -> D7 (HMOSI)
  
-      // Count how many live neighbours we have in the current generation 
-      for(int nx = x - 1; nx < x + 2; nx++) { 
-        for(int ny = y - 1; ny < y + 2; ny++) { 
-          if(nx == x && ny == y) 
-            continue; 
-          if(current_generation.getPixel(nx,​ny)) 
-            live_neighbours++;​ 
-        } 
-      } 
  
-      // Update pixel count for the next generation 
-      if(state && (live_neighbours < 2 || live_neighbours > 3)) { 
-        state = false; 
-        change = true; 
-      } 
-      else if(!state && (live_neighbours == 3)) { 
-        state = true; 
-        change = true; 
-      } 
-      dmd.setPixel(x,​y,​state ? GRAPHICS_ON : GRAPHICS_OFF);​ 
-    } 
-  } 
- 
-  // random seed 
-  for (int k = 15; k > 0; k -= 1) 
-    dmd.setPixel(random(dmd.width),​ random(dmd.height),​ GRAPHICS_ON);​ 
- 
-  Serial.println(String("​Generation time: ") + (millis() - start) + " ms"); 
- 
-  if(!change && 0) { 
-    // We've made it to an unchanging state 
-    delay(500); 
-    populate_random_cells();​ 
-    // (We can't detect steady states where things change forward 
-    // and back, for these you need to press reset!) 
-  } 
-} 
-</​code>​ 
Navigation



You are not allowed to add pages