Arduino IR LCD Würfel

Hallo Gemeinde ,

Ich möchte es noch einmal probieren.

Habe ja doch ein wenig dazu gelehrt und daraus ist dieser Sketch endstanden.

#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int Zufallszahl; 
int receiver = 2; 
IRrecv irrecv(receiver);
decode_results results;

byte SpecialChar0[8]={B00011,B00111,B01111,B11111,B00000,B00000,B00000,B00000};
byte SpecialChar1[8]={B11000,B11100,B11110,B11111,B00000,B00000,B00000,B00000};
byte SpecialChar2[8]={B11111,B11111,B11111,B11111,B00000,B00000,B00000,B00000};
byte SpecialChar3[8]={B11111,B11110,B11100,B11000,B00000,B00000,B00000,B00000};
byte SpecialChar4[8]={B11111,B01111,B00111,B00011,B00000,B00000,B00000,B00000};
byte SpecialChar5[8]={B00011,B00111,B01111,B11111,B11111,B11111,B11111,B11111};
byte SpecialChar6[8]={B11000,B11100,B11110,B11111,B11111,B11111,B11111,B11111}; 
byte SpecialChar7[8]={B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111};

void setup()
{
  lcd.begin(20,4); 
  Serial.begin(9600);
 
  irrecv.enableIRIn();

    lcd.createChar(0, SpecialChar0);
    lcd.createChar(1, SpecialChar1);
    lcd.createChar(2, SpecialChar2);
    lcd.createChar(3, SpecialChar3);
    lcd.createChar(4, SpecialChar4);
    lcd.createChar(5, SpecialChar5);
    lcd.createChar(6, SpecialChar6);
    lcd.createChar(7, SpecialChar7);
}

void loop()
{
  if (irrecv.decode(&results))
  {
    translateIR(); 
    irrecv.resume();
  }  
}
void translateIR()
{
  switch(results.value)
  {

  case 0xD7E84B1B: 
    for(int i = 1; i <= 24 ; i++)
    {
    delay (50);
    for(int i = 1; i <= 6; i++)
    {
      switch (i){
   Serial.println("#####"); // platzhalter ! ( Switch ) !!!      
    }}
   Zufallszahl = random(6)+1;
   switch (Zufallszahl)
 {

  case 0xE318261B: Serial.println(" Zurück");   break; 

    case 1:                                                             
  lcd.setCursor(9,1);
  lcd.write((byte)0);
  lcd.write((byte)7);
  lcd.print (" ");
  lcd.setCursor(9,2);
  lcd.print (" ");
  lcd.write((byte)7);
  lcd.print (" ");
  lcd.setCursor(9,3);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.write((byte)2);  
      break;
    case 2:   

  lcd.setCursor(9,1);
  lcd.write((byte)0);
  lcd.write((byte)2);
  lcd.write((byte)6);
  lcd.setCursor(9,2);
  lcd.write((byte)5);
  lcd.write((byte)2);
  lcd.write((byte)3);
  lcd.setCursor(9,3);
  lcd.write((byte)4);  
  lcd.write((byte)2);
  lcd.write((byte)2);
      break;
    case 3:    

  lcd.setCursor(9,1);
  lcd.write((byte)0);
  lcd.write((byte)2);
  lcd.write((byte)6);
  lcd.setCursor(9,2);
  lcd.print (" ");
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.setCursor(9,3);
  lcd.write((byte)4);  
  lcd.write((byte)2);
  lcd.write((byte)3);
      break;
    case 4:   
  lcd.setCursor(9,1);
  lcd.write((byte)5);
  lcd.print (" "); 
  lcd.write((byte)7);
  lcd.setCursor(9,2);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.setCursor(9,3);
  lcd.print (" "); 
  lcd.print (" "); 
  lcd.write((byte)2);
      break;
    case 5:   
  lcd.setCursor(9,1);
  lcd.write((byte)7);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.setCursor(9,2);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.setCursor(9,3);
  lcd.write((byte)4);
  lcd.write((byte)2);
  lcd.write((byte)3);
      break;
   case 6:   
  lcd.setCursor(9,1);
  lcd.write((byte)5);
  lcd.write((byte)2);
  lcd.write((byte)1);
  lcd.setCursor(9,2);
  lcd.write((byte)7);
  lcd.write((byte)2);
  lcd.write((byte)6);
  lcd.setCursor(9,3);
  lcd.write((byte)4);
  lcd.write((byte)2);
  lcd.write((byte)3);
      break;
    }
   }
  }
 }

Würde gerne ein int Wert haben z.B.

int A = 1 ( ein Würfel)
int A = 2 ( zwei Würfel)
int A = 3 ( drei Würfel)

Habe überhaubt keinen ansatz oder irgend ein Beispiel.

Es sollen alle Würfel nebeneinander sein und mit einem druck alle Würfel kullern.

Und dann am Ende wieder alle beschimpfen (hier und hier), wenn es nicht nach Deinen Vorstellungen läuft und Du ja nicht programmieren lernen willst.

Nein Danke.

Gruß Tommy

Es ist ja ein Versuch wert.

Es gibt hier bestimmt noch nette Leute.
Wenn man jemanden nicht helfen möchte dann sollte man Es einfach lassen
Und einfach nichts schreiben.

Mit freundlichen Grüßen TSW68

Wann und wozu ich schreibe, solltest Du schon mir überlassen.

Gruß Tommy

Mit sowelchen Kommentaren Mülst du nur alles voll .
Du musst ja nicht helfen !
Vielleicht möchtest du auch das mir keiner Hilfe Stellung gibt.
Müll das Forum rurch voll .

Man soll die Hoffnung nicht aufgeben .

Hilfe oder nicht ich werde es sehen.

LG tsw68

So erreichst Du von mir auch keine Hilfe.
Grüße Uwe

TSW68:
Mit sowelchen Kommentaren Mülst du nur alles voll .
Du musst ja nicht helfen !
Vielleicht möchtest du auch das mir keiner Hilfe Stellung gibt.
Müll das Forum rurch voll .

Man soll die Hoffnung nicht aufgeben .

Hilfe oder nicht ich werde es sehen.

LG tsw68

Glaubst du wirklich mit so dumpfen Sprüchen bekommst du hier irgend eine Hilfe??

Du schreibst, dass du nichts lernen willst. OK, ist ja deine Sache, aber was machst du dann hier? Hier gibt es nur Unterstützung beim Lernen. Nicht mal deine dummen Sprüche sind besonders gut, sonst könnte man wenigstens die ein bischen ausbauen.

Suche dir eine Firma die dir das baut und programmiert was du brauchst. Dem kannst du dann ganz locker ins Gesicht sagen, dass du das nicht lernen, aber haben willst. Er nimmt Geld dafür, du machst ein paar Tausender locker, und jeder hat was er will. Du seine "Hilfe" er dein Geld. Und das völlig ohne jeden Stress.

Franz

TSW68:
Würde gerne ein int Wert haben z.B.

int A = 1 ( ein Würfel)
int A = 2 ( zwei Würfel)
int A = 3 ( drei Würfel)

Habe überhaubt keinen ansatz oder irgend ein Beispiel.

Es sollen alle Würfel nebeneinander sein und mit einem druck alle Würfel kullern.

beschreibe genau deinen gewünschten Ablauf,
durch welche Aktion soll was ausgelöst werden

dann beschreibst du was dein Sketch macht

Welches Display verwendest du, lade Bilder hoch wo man gegebenenfalls den Fehler erkennen soll.

dann stelle eine konkrete Frage.

Damit bekommst du vieleicht Input.

OT: alles was Offtopic ist, lässt du am besten komplett weg, das hilft dir nicht weiter.

Hi

noiasca:
beschreibe genau deinen gewünschten Ablauf,
durch welche Aktion soll was ausgelöst werden

dann beschreibst du was dein Sketch macht

Welches Display verwendest du, lade Bilder hoch wo man gegebenenfalls den Fehler erkennen soll.

dann stelle eine konkrete Frage.

Damit bekommst du vieleicht Input.

OT: alles was Offtopic ist, lässt du am besten komplett weg, das hilft dir nicht weiter.

Da scheitert Es ja schon.
Selber was zusammen bringen: Fehlanzeige
Auf Anmerkungen eingehen: hehehe ... Du lustiger Mensch Du :wink: Nicht mit Ihm hier!
Beliebig oft den gleichen Kauderwelsch absondern und ganz nebenbei andere Leute anmachen: Ja, dafür bist Du hier richtig.

Mir ist leider nicht ganz klar, wieso ich mir die TSW-Threads überhaupt noch anschaue ... zumindest große Buchstaben und Satzzeichen sind nicht ganz unbekannt - leider reicht Das aber nicht.

Wie im echten Leben: Wer fi??en will, muß freundlich sein - ist aber hier noch nicht verinnerlicht worden.

Bei weiteren Antworten werde ich, gegen besseres Wissen, trotzdem hier lesend aufschlagen, viel Mehr aber wohl nicht.
Kann mich auch beleidigen lassen, ohne vorher was für Ihn geschrieben zu haben :wink:

MfG

Hi,
Ich versuche es!

Ein IR LCD Würfel soll sein
ein Elektronischer Würfel auf ein 20x4 I2C LCD zum Spielen wie z.B Kniffel
oder Mensch ärger dich nicht.

Kniffel Spielt man mit 3 Würfel und Mensch ärger dich nicht mit einem Würfel.

IR steht für Fernbedienung

hier ein Bild von meiner FB aus einem Starter Kid Arduino Uno R3

Im Sketch oben ist es so das man auf der FB Play drückt und eine zufallszahl mit Big Font erscheint
auf dem lcd.

Vor jedem Würfeln laufen die zahlen ein paar mal duch bevor man sehen kann was man Gewürfelt hat.

Jetzt meine frage

Wie bekomme ich jetzt 1-2 oder 3 Würfel angezeigt.

Taste 1 = 1 Würfel
Taste 2 = 2 Würfel
Taste 3 = 3 Würfel
Play = Würfeln

MFG tsw68

Hi

Ich weiß - ich sollte Es besser wissen ... nun gut ...

WAS soll denn Deine ELektronik machen?
Sie soll 1 bis 3 Würfel (bzw. Deren Augenzahlen) anzeigen.

Dazu hast Du eine IR-Fernbedienung.

Kannst Du die verschiedenen Tasten der Fernbedienung beriets im Arduino unterscheiden?
Ja?
Dann zeig Mal her!

Mit den Tasten 1 bis 3 setzt Du einen Merker auf die Anzahl der Würfel, also 1, 2 oder 3.
Vl.. lässt Du auch bei jedem Setzen die boardeigene LED x Mal aufblinken, damit man weiß, wie viele Würfel 'gleich' gewürfelt werden.

Bei Druck auf 'Play' werden x Zufallszahlen 1...6 gezogen.
Jetzt ist es an der Zeit, diese Zahlen auf dem Display anzuzeigen.

(persönlich würde ich immer alle Würfel würfeln und nur Die anzeigen, Die ich sehen will)

Bekommst Du die IR-Fernbedienung ausgelesen?
Bekommst Du Text auf Dein Display?

Wenn DU diese beiden Fragen mit einem Ja beantworten kannst - wo ist Dein Problem?

Wie schon öfter geschrieben - ohne Dein Zutun, wird Das hier bestenfalls eine Lehrveranstalltung für zukünftige Leser - halt nur ohne Lösung.
Diese MUSS von Dir kommen und es wäre ein Fest, wenn Diese von Dir dann auch veröffentlicht wird!

MfG

zunächst will ich dich mal motivieren
20180216_212440.png

du hast jetzt wenigstens mal beschrieben was du haben willst.

ich meinte oben du sollst dir einen ABLAUF zurechtlegen

Ein ABLAUF ist aus meiner Sicht in etwa so:

startup,         // 0: wait for IR start command to roll the dices
rolling,           // 1: an IR comannd was received and the dices started to roll for a defined time
show,            // 2: the dices slowed down and show the final result and we wait again for IR
idle                // 3: just waiting for the next IR start command

hat man einen Ablauf mal auf ein Blatt Papier geschrieben, dann fällt die Realisierung auch leichter.
Nun kannst dir überlegen wie du von einem Status in den nächsten kommst.
Apropos Status ... das wäre das Stichwort für "state maschine", endlicher Automat, "Nachtwärter Erklärung" ... hast du das im Forum schon gesucht und gefunden?

einen Guten,

Bekommst Du die IR-Fernbedienung ausgelesen?
Bekommst Du Text auf Dein Display?

Die IR-Fernbedienung bekomme ich ausgelesen.

Taste 1: 9716BE3F
Taste 2: 3D9AE3F7
Taste 3: 6182021B
Taste Play: D7E84B1B

Text bekomme ich auch auf das LCD.

Habe mal ein paar Bilder angehängt.

LCD : 1-2 oder 3 Würfel
jetzt drückt man 1,2 oder3 auf der Fernbedinung.
man sieht irgendeine Augenzahl in einem Big Font.
Play um zu Würfeln.
Augenzahl lauft ungefähr 5x schnell durch wie bei einer Uhr die secunden nur schneller.
soll das Würfeln simulieren.
Augenzahl bleibt stehen bis erneut gewürfeld wird.

Um die Augenzahl auf dem LCD zu sehen habe ich diesen Sketch
aber weiter bin ich noch nicht gekommen.

#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int Zufallszahl; 
int receiver = 2; 

int x = 4;
IRrecv irrecv(receiver);
decode_results results;

byte SpecialChar0[8]={B00011,B00111,B01111,B11111,B00000,B00000,B00000,B00000};
byte SpecialChar1[8]={B11000,B11100,B11110,B11111,B00000,B00000,B00000,B00000};
byte SpecialChar2[8]={B11111,B11111,B11111,B11111,B00000,B00000,B00000,B00000};
byte SpecialChar3[8]={B11111,B11110,B11100,B11000,B00000,B00000,B00000,B00000};
byte SpecialChar4[8]={B11111,B01111,B00111,B00011,B00000,B00000,B00000,B00000};
byte SpecialChar5[8]={B00011,B00111,B01111,B11111,B11111,B11111,B11111,B11111};
byte SpecialChar6[8]={B11000,B11100,B11110,B11111,B11111,B11111,B11111,B11111}; 
byte SpecialChar7[8]={B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111};

void setup()
{
  lcd.begin(20,4); 

    lcd.createChar(0, SpecialChar0);
    lcd.createChar(1, SpecialChar1);
    lcd.createChar(2, SpecialChar2);
    lcd.createChar(3, SpecialChar3);
    lcd.createChar(4, SpecialChar4);
    lcd.createChar(5, SpecialChar5);
    lcd.createChar(6, SpecialChar6);
    lcd.createChar(7, SpecialChar7);
}

void eins () {                                                             
  lcd.setCursor(x,1);
  lcd.write((byte)0);
  lcd.write((byte)7);
  lcd.print (" ");
  lcd.setCursor(x,2);
  lcd.print (" ");
  lcd.write((byte)7);
  lcd.print (" ");
  lcd.setCursor(x,3);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.write((byte)2);  
}

void zwei () {   
  lcd.setCursor(x,1);
  lcd.write((byte)0);
  lcd.write((byte)2);
  lcd.write((byte)6);
  lcd.setCursor(x,2);
  lcd.write((byte)5);
  lcd.write((byte)2);
  lcd.write((byte)3);
  lcd.setCursor(x,3);
  lcd.write((byte)4);  
  lcd.write((byte)2);
  lcd.write((byte)2);
}

void drei () { 
  lcd.setCursor(x,1);
  lcd.write((byte)0);
  lcd.write((byte)2);
  lcd.write((byte)6);
  lcd.setCursor(x,2);
  lcd.print (" ");
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.setCursor(x,3);
  lcd.write((byte)4);  
  lcd.write((byte)2);
  lcd.write((byte)3);
}

void vier () {  
  lcd.setCursor(x,1);
  lcd.write((byte)5);
  lcd.print (" "); 
  lcd.write((byte)7);
  lcd.setCursor(x,2);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.setCursor(x,3);
  lcd.print (" "); 
  lcd.print (" "); 
  lcd.write((byte)2);
}

void fuemf () {  
  lcd.setCursor(x,1);
  lcd.write((byte)7);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.setCursor(x,2);
  lcd.write((byte)2);
  lcd.write((byte)2);
  lcd.write((byte)7);
  lcd.setCursor(x,3);
  lcd.write((byte)4);
  lcd.write((byte)2);
  lcd.write((byte)3);
}

void sechs () {   
  lcd.setCursor(x,1);
  lcd.write((byte)5);
  lcd.write((byte)2);
  lcd.write((byte)1);
  lcd.setCursor(x,2);
  lcd.write((byte)7);
  lcd.write((byte)2);
  lcd.write((byte)6);
  lcd.setCursor(x,3);
  lcd.write((byte)4);
  lcd.write((byte)2);
  lcd.write((byte)3);
}

void customsm()
{
  lcd.setCursor(x,1);
  lcd.write(255);
  lcd.setCursor(x, 2);
  lcd.write(7);
  lcd.setCursor(x, 3);
  lcd.write(7);
}

void bild() {
  eins ();
  x=x+4;
  zwei ();
  x=x+4;  
  drei ();
}

void loop() {
  
 bild(); {
 for (int positionw = 0; positionw < 23; positionw) {

    delay(500);  
  }
 }    
}

Im ersten Sketch von mir funktioniert ein Würfel so.

LG

IMG_4283.JPG

IMG_4284.JPG

IMG_4285.JPG

fein. Du kannst also große Ziffern schreiben. Teilaufgabe erledigt. Leg diesen Sketch nun zur Seite.

Du schreibst - IR kannst auslesen. Auch gut.

Jetzt mach einen simplen IR-Receiver der einerseits

  • auf die 3 Zifferntasten reagiert und
  • bei play drei Zufallszahlen am Serial ausgibt (oder einfach mal als Zahl am LCD ausgibt)
  • und anschließend wieder auf den IR wartet.

Das wär doch nett auf einem 0.96" anzuzeigen, wie der Würfel würfelt.

Das habe Ich

  if (irrecv.decode(&results))
  {
    translateIR(); 
    irrecv.resume();
  }  
}
  
void translateIR()
{
  switch(results.value)
  {

  case 0x9716BE3F: 
   Serial.println("Taste1"); // Taste1     
      break;
  case 0x3D9AE3F7: 
   Serial.println("Taste2"); // Taste2     
      break;
  case 0x6182021B: 
   Serial.println("Taste3"); // Taste3     
      break;
  case 0xD7E84B1B: 
   Serial.println("#Taste Play"); // Taste Play      
      break;
  }

das habe ich so :

   Zufallszahl = random(6)+1;
   switch (Zufallszahl)
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:

Das mache ich auch , möchte ja auch wissen ob alles so richtig ist.

In meinem ersten Sketsch #1
Functioniert ja ein Würfel so wie ich es möchte ist nur die frage
wie ich jetzt 2 oder 3 Würfel bekomme.
Oder alles von grund auf ?

Na gut.

alles erstmal auf Serial.print.
Playtaste gibt zufalszahl aus.
Die anderen Tasten 1-3 zeigen Taste 1 usw.

Nachtrag:

#include <LiquidCrystal_I2C.h>
#include <IRremote.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int Zufallszahl1; 
int Zufallszahl2; 
int Zufallszahl3; 
int receiver = 2; 

int x = 4;
IRrecv irrecv(receiver);
decode_results results;

void setup()
{
  Serial.begin(9600);
  lcd.begin(20,4); 
  irrecv.enableIRIn();

    lcd.setCursor (0, 1);
    lcd.print("1, 2, oder 3 Wuerfel");
}

void loop()
{
  if (irrecv.decode(&results))
  {
    translateIR(); 
    irrecv.resume();
  }  
}
  
void translateIR()
{

   Zufallszahl1 = random(6)+1;
   Zufallszahl2 = random(6)+1;
   Zufallszahl3 = random(6)+1;
      
  switch(results.value)
  {

  case 0x9716BE3F: 
   Serial.println("Taste1"); // Taste1  
    
      break;
  case 0x3D9AE3F7: 
   Serial.println("Taste2"); // Taste2 
        
      break;
  case 0x6182021B: 
   Serial.println("Taste3"); // Taste3     

      break;
  case 0xD7E84B1B: 
   Serial.println("#Taste Play"); // Taste Play      
   Serial.println(Zufallszahl1 ); 
   Serial.println(Zufallszahl2 ); 
   Serial.println(Zufallszahl3 );   
      break;
  }
}