Hallo ihr Lieben!
Ich bin ganz neu auf dem Gebiet Arduino / Mircocontroller, doch will dies gerne Lernen und habe mir ein ( für mich) riesen Projekt ausgesucht was ich Starten möchte.
Ich habe mich dafür entschieden da ich, so hoffe ich, den perfekten Start was das Programmieren angeht mache. Reines Lernen / Lesen führt bei mir dazu das ich schnell Vergesse was ich gerade "gelernt" habe.
Mein Projekt ist ein Geldspielautomat wie Ihr ihn aus Kneipen kennt zu Bauen. Dafür habe ich mir alte irreperable Geldspielautomaten besort um davon die Teile zu benutzen ( Stepper, Münzprüfer, Auszahleinheit ect.)
Nun habe ich schonmal den Anfang gemacht und der ersten schritte des Codes geschrieben.
Leider weiß ich zurzeit nicht weiter.
Ich will das der Automat sich beim einschalten "kalibriert". Das soll heißen dass die Stepper ( walzen) sich zum beginn drehen bis die Lichtschranke unterbrochen wird (Nullpunkt)
dies Dachte ich kann ich durch eine if else / else if machen kann.
Leider hat er sich Kalibriert sobald eine von drei Lichtschranken betätigt wurden.
vielleicht weiß jemand was ich hier ändern müsste.
Ich denke der Absatz vom Sketch reicht aus ( damit es hier übersichtlicher bleibt)
}
//Rotation der Walzen
void rotate(int cur, int x, int y, int z)
{
if (cur <= x) {
stepper1Forward();
}
if (cur <= y) {
stepper2Forward();
}
if (cur <= z) {
stepper3Forward();
}
}
void kalibrieren ()
{
bool initKal = true;
do {
//Walze 1
lichtwert1 = digitalRead (lichtschranke1);
Serial.println (lichtwert1);
//Walze 2
lichtwert2 = digitalRead (lichtschranke2);
Serial.println (lichtwert2);
//Walze 3
lichtwert3 = digitalRead (lichtschranke3);
Serial.println (lichtwert3);
if (lichtwert1 >=1 && lichtwert2 >=1 && lichtwert3 >=1)
rotate(1,1,1,1);
else if (lichtwert2 >=1 && lichtwert3 >=1)
rotate(1,0,1,1);
else if (lichtwert3 >=1)
rotate(1,0,0,1);
else if (lichtwert1 >=1 && lichtwert3 >=1)
rotate(1,1,0,1);
else if (lichtwert1 >=1)
rotate(1,1,0,0);
else if (lichtwert2 >=1)
rotate(1,0,1,0);
else if (lichtwert1 >=1 && lichtwert2 >=1)
rotate(1,1,1,0);
else
initKal=false;
delay (50);
} while (initKal);
kali = false;
}
void loop()
{
if (kali) {
kalibrieren();
delay(2000);
}
Zu meinem Zweiten problem.
Ich möchte das alle 3 Stepper ( walzen) gleichzeit starten und unterschiedlich lange Rotieren.
ich habe zwar ein Ansatz aber nicht die Lösung dazu.
Weiß da auch Jemand eine Lösung für mich?
}
int x = random(200, 600);
int y = random(600, 750);
int z = random(750, 1000);
for (int i = 0; i < x; i++) // ich weiß das das klar ist dass die sich nur nach x richten aber ich weiß nicht wie ich es sont machen soll
{
rotate(i, x, y, z);
}
delay( 1000 );
Zwar drehen die Sich unterschiedlich lange, aber wie man sieht möchte ich gerne das die hintereinander aufhören.
vielen Dank für tipps