LED-Matrix: Ein Smiley zeigt Gefühle



Im nächsten Experiment, ein Projekt von Martin Manz,  kommen viele Dinge zusammen.

1. Eine elektronische Schaltung kommuniziert mit dem Menschen über Gefühls-Symbolik.

2. Die Schaltung wird von einem Computerprogramm gesteuert, das mit Arduino über USB kommuniziert.


Gefühls-Symbolik:

Das Dot-Matrix-Display kann auf Knopfdruck lächeln oder traurig sein:









Schaltung:

Das hier verwendete Dot-Matrix-Display nennt sich: SBM788CSR E

Seine Anoden und Katoden sind leider in sehr ungeordneter Reihenfolge:


Hier unten steht die Beschriftung: SBM788CSR E

Wenn Du ein anderes Dot-Matrix-Display verwendest, besorg Dir dessen Datenblatt und sieh nach, wo sich die Anoden und Katoden Deines Displays befinden.

Zwischen jeder Anode und dem Arduino-Pin habe ich einen 220 Ohm Widerstand geschaltet.






Computerprogramm:



Hier kannst Du es herunterladen. Es ist ein in Java geschriebenes Programm, das auf jedem Betriebssystem läuft, das .jar-Dateien starten kann (es muss eine Java-Laufzeitumgebung vorhanden sein).

Das Programm sendet über die gewünschte serielle Schnittstelle entweder eine 1 (Froh) oder eine 0 (Traurig). Arduino empfängt diese 0 oder 1 und wertet sie aus:


Arduino-Code:
 

 int spalte[]  = { 2, 5, 6, 4, 7, 3, 18, 19 }; //Anoden
 int zeile[] = { 10, 8, 16, 9, 11, 15, 12, 14 }; //Katoden
 
 char sendeInhalt;
 int laufOn;
 
void setup()
{              
  pinMode(zeile[0], OUTPUT);
  pinMode(zeile[1], OUTPUT);
  pinMode(zeile[2], OUTPUT);
  pinMode(zeile[3], OUTPUT);
  pinMode(zeile[4], OUTPUT);
  pinMode(zeile[5], OUTPUT);
  pinMode(zeile[6], OUTPUT);
  pinMode(zeile[7], OUTPUT);
 
  pinMode(spalte[0], OUTPUT);
  pinMode(spalte[1], OUTPUT);
  pinMode(spalte[2], OUTPUT);
  pinMode(spalte[3], OUTPUT);
  pinMode(spalte[4], OUTPUT);
  pinMode(spalte[5], OUTPUT);
  pinMode(spalte[6], OUTPUT);
  pinMode(spalte[7], OUTPUT);

  //Alle Kathoden auf HIGH setzen
  for (int i=0; i<=7; i++) digitalWrite(zeile[i], HIGH);
 
  Serial.begin(9600);
  Serial.flush();
  delay(100);
}

void loop()
{  
    if (Serial.available() == 1)
  {
    sendeInhalt = Serial.read();  
  }

  if (sendeInhalt == '1' || sendeInhalt == '2')
  {
    laufOn=sendeInhalt;
  }

    if (laufOn == '1')
    {
      smileFroh(); 
    }

    if (laufOn == '2')
    {
      smileSad(); 
    }
}

void smileFroh()
{
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[2], LOW);   
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[3], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[3], LOW);   
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[4], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[4], LOW);   
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[5], LOW);   
  digitalWrite(zeile[1], LOW); digitalWrite(spalte[1], HIGH); 
  digitalWrite(zeile[1], HIGH); digitalWrite(spalte[1], LOW);   
  digitalWrite(zeile[1], LOW); digitalWrite(spalte[6], HIGH); 
  digitalWrite(zeile[1], HIGH); digitalWrite(spalte[6], LOW);   
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[2], LOW); 
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[5], LOW);   
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[3], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[3], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[3], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[3], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[4], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[4], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[4], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[4], HIGH); digitalWrite(spalte[2], LOW);   
  digitalWrite(zeile[4], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[4], HIGH); digitalWrite(spalte[5], LOW);   
  digitalWrite(zeile[4], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[4], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[3], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[3], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[4], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[4], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[6], LOW); digitalWrite(spalte[1], HIGH); 
  digitalWrite(zeile[6], HIGH); digitalWrite(spalte[1], LOW);   
  digitalWrite(zeile[6], LOW); digitalWrite(spalte[6], HIGH); 
  digitalWrite(zeile[6], HIGH); digitalWrite(spalte[6], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[2], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[3], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[3], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[4], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[4], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[5], LOW); 
}

void smileSad()
{
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[2], LOW);   
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[3], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[3], LOW);   
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[4], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[4], LOW);   
  digitalWrite(zeile[0], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[0], HIGH); digitalWrite(spalte[5], LOW);   
  digitalWrite(zeile[1], LOW); digitalWrite(spalte[1], HIGH); 
  digitalWrite(zeile[1], HIGH); digitalWrite(spalte[1], LOW);   
  digitalWrite(zeile[1], LOW); digitalWrite(spalte[6], HIGH); 
  digitalWrite(zeile[1], HIGH); digitalWrite(spalte[6], LOW);   
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[2], LOW); 
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[5], LOW);   
  digitalWrite(zeile[2], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[2], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[3], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[3], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[3], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[3], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[4], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[4], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[6], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[6], HIGH); digitalWrite(spalte[2], LOW);   
  digitalWrite(zeile[6], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[6], HIGH); digitalWrite(spalte[5], LOW);   
  digitalWrite(zeile[4], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[4], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[0], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[0], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[3], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[3], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[4], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[4], LOW);   
  digitalWrite(zeile[5], LOW); digitalWrite(spalte[7], HIGH); 
  digitalWrite(zeile[5], HIGH); digitalWrite(spalte[7], LOW);   
  digitalWrite(zeile[6], LOW); digitalWrite(spalte[1], HIGH); 
  digitalWrite(zeile[6], HIGH); digitalWrite(spalte[1], LOW);   
  digitalWrite(zeile[6], LOW); digitalWrite(spalte[6], HIGH); 
  digitalWrite(zeile[6], HIGH); digitalWrite(spalte[6], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[2], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[2], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[3], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[3], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[4], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[4], LOW);   
  digitalWrite(zeile[7], LOW); digitalWrite(spalte[5], HIGH); 
  digitalWrite(zeile[7], HIGH); digitalWrite(spalte[5], LOW);
 
}