LcD display stückzähler

Hallo
ich bin neu auf dieser Plattform und habe ein Problem:
ich muss für meine Schule eine Abschlussarbeit machen (eine mechanische dosenpresse mit integriertem lcd Display) welches über ein arduino bzw. elegoo Board programmiert wird dieses Board dient zur Motivation diese Presse zu verwenden das lcd Display spuckt per Knopfdruck Sprüche wie Toll gemacht, Gratulation etc. aus so weit bin ich.

Jetzt würde ich noch gerne einen Stückzahler einbauen der die Dosen zählt wie viele schon gepresst worden sind

wäre nett wenn mir wer helfenkann
anbei der code und Bilder von der Steuerung

Lg David

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

char *players[]={
"Gut gemacht",
"Muskelpaket",
"Gratulation",
"Dosenprofi",
"Super!",
"Grossartig",
"Spitze",
"Pressmeister",
"Superman",
"TipTop",
};

long player;

int val1 = 0;
int BUTTON1 = 13;

void setup() {
lcd.begin(16, 2);
lcd.print("Dose einlegen!!!");
pinMode(BUTTON1,INPUT);

}

void loop() {
//lcd.setCursor(0,1);
//lcd.print(analogRead(0));
val1 = digitalRead(BUTTON1);
unsigned long seed=seedOut(50);
randomSeed(seed);
if (val1 == HIGH) {
for (int i=0;i<1;++i) {
player = (random(sizeof(players)/sizeof(char*)));
lcd.setCursor(0, 0);
lcd.print(players[player]);
delay(5000);
lcd.clear();
//lcd.print("Betätige den Hebel");
// break;
//lcd.clear();
}
}

else
{
return;
}
}

unsigned int bitOut(void) {
static unsigned long firstTime=1, prev=0;
unsigned long bit1=0, bit0=0, x=0, port=0, limit=10;
if (firstTime) {
firstTime=0;
prev=analogRead(port);
}
while (limit--) {
x=analogRead(port);
bit1=(prev!=x?1:0);
prev=x;
x=analogRead(port);
bit0=(prev!=x?1:0);
prev=x;
if (bit1!=bit0)
break;
}
return bit1;
}

unsigned long seedOut(unsigned int noOfBits) {
unsigned long seed=0;
for (int i=0;i<noOfBits;++i)
seed = (seed<<1) | bitOut();
return seed;
}

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

COOLERsplashy:
... Bilder von der Steuerung ...

Abgesehen von den Code-Tags hast Du wohl auch die Bilder vergessen.

Gruß

Gregor

COOLERsplashy:
ich muss für meine Schule eine Abschlussarbeit machen (eine mechanische dosenpresse mit integriertem lcd Display) ...

Eine Flüssigkristallanzeige (englisch liquid crystal display) wird LCD oder LC-Display abgekürzt. Auch wenn man es immer wieder anders liest, so sollte es in einer Abschlussarbeit schon richtig stehen. Zumindest der Lehrer freut sich.

Etwas irritiert bin ich, wenn jemand, der das vorhandene Programm erstellt hat, es nicht um einen Zähler erweitern kann. Wo hakt es denn? Gibt es fehlgeschlagene Versuche?

Hallo,

ich gehe mal davon aus das du den Sketch auch nicht selbst geschrieben hast , sonst hättest Du sicher kein Problem an der richtigen Stelle einen Zähler einzubauen.

Vorschlag:
Du schreibst 4 zusätzliche Zeilen.
ich hab das allerdings nicht nicht getestet

// oben im Allgemeinteil vor setup
int counter=0;

.
.
.
// unten bei der ausgabe des zufälligen Textes
counter++;
lcd.setCursor(1,1);
lcd.print("Stueckzahl :");
lcd.print(counter);

Heinz

Hi

Entweder fehlt bei dem Sketch die Hälfte, oder von diesem Sketch sind 2/3tel unnütz.
Vll. hätten mir Kommentare weiter geholfen.
Schön wäre Es auch gewesen, wenn eine Funktion, Die ein Bit zurück gibt, dafür kein unsigned int benutzen müsste.

Alles in Allem eine verdammt große Luftnummer, um vll. eine etwas zufälligere Zahl zu bekommen.
Tip(p): 1x seed reicht völlig aus - im Gegenteil: Bei identischem Startwert ist ebenfalls die erste Zufallszahl IMMER die Gleiche.
Wenn Du nur 1x den Startwert einstellst (Helligkeit eines LDR, unterste Bit eines unbeschalteten analog-IN - mehrere Bits einlesen) bekommst Du wirklich einen zufälligen Startwert - und von Diesem aus dann Zufallszahlen.

MfG

Man kann aus einem unbelegten Analogeingang auch mehrfach das niederwertige Bit bemutzen.
Die Routine ist nicht von mir, sondern hier aus dem Forum.

void seedRandom32(uint8_t analogPort) {
uint32_t wert = analogRead(analogPort) & 0x1;
  for(uint8_t i = 0; i < 32; i++) {
    wert = wert << 1;
    wert |= analogRead(analogPort) & 0x1;    
  }
  randomSeed(wert);
}

Wobei ich Dir Recht gebe dass der Code arg grauenvoll zusammenkopiert wurde. Der TO meldet sich ja auch nicht mehr.

Gruß Tommy