Guten Abend liebes Forum
Ich benötige etwas Schützenhilfe bei der realisierung eines Münzzählers in ein Emulatorprojekt.
Der Münzzähler gibt Pulse aus für die erkannte Münze die eingeworfen worden ist. Am einfachsten wäre natürlich einfach aus jedem Puls ein Signal für einen coineinwurf zu machen.
Bei einem 2 Euro Stück wären das 20 Pulse, bei einer Pulsdauer von 20ms wären das ohne Pause schon 400 ms. Es wäre unwahrscheinlich das jemand in einer halben Sekunde noch mehr Geld einwirft, aber es ist möglich denke ich. (Oder ich irre mich hier?)
Also habe ich folgenden Code aus einem Beispiel zusammengebastelt.
Fragen die sich mir bei dem Code noch stellen:
Wie bekomme ich die Setup funktion für den Pi implementiert?
Wie kann ich die Variable money speichern, damit ich auch bei einem Neustart weiß wie viel Geld im Automat steckt?
Ist int wiringPiISR korrekt eingesetzt?
Vielleicht kann mir ja auch jemand dabei weiterhelfen wie ich die Taste oder das Signal zum Emulator in dem Retropie setup bekomme.
Meine Ansätze wären:
https://github.com/petrockblog/Re…ki/Db9_gpio_rpi
Hierrüber einen eigenen GPIO Pin zu finden den ich als Coin-taste einbinden könnte
oder eine Taste mit send.key zu senden falls das funktionieren sollte.
Die letzte Frage gehört eigentlich eher in die Elektronikecke aber vielleicht kann mir ja trotzdem jemand helfen
Der Münzsensor zählt automatisch alle Münzen solange er eingeschaltet ist, das ist aber hinderlich wenn man zB grade nicht in einem Emulator steckt. Gut wäre es den Münzzähler vom Strom zu trennen, wäre da ein Relais oder ein Transistor die bessere Idee?
#include <wiringPi.h>
#include <stdio.h>
void setup()
{
//coinpin is set as an input
pinMode(coinPin, INPUT);
//if the coinpin get a pulse, start coinISR()
int wiringPiISR (coinPin, INT_EDGE_RISING, coinISR())
}
// total amount of money collected;
float money = 0.0;
// gets reset when coin was recognized (after train of pulses ends);
volatile int pulses = 0; // how many pulses the coinacceptor get?
volatile long timeLastPulse = 0; // how many ms is the last pulse gone?
unsigned char coinPin = 0; // wich pin for the coin
// executed for every pulse;
void coinISR(void)
{
pulses++;
timeLastPulse = millis();
}
int main(void)
{ // Starte die WiringPi-Api (wichtig)
if (wiringPiSetup() == -1)
return 1;
while(1)
{
long timeFromLastPulse = millis() - timeLastPulse;
if (pulses > 0 && timeFromLastPulse > 200)
{
// sequence of pulses stopped; determine the coin type;
if (pulses == 1)//10 cent
{
money += .1;
}
else if (pulses == 2)//20 cent
{
money += .2;
}
else if (pulses == 3)//50 cent
{
money += .5;
}
else if (pulses == 4)//1 Euro
{
money += 1.0;
}
else if (pulses == 5)//2 Euro
{
money += 2.0;
}
else
{
//unknown coin
}
delay(10)
//reset the pulsecounter
pulses = 0;
}
}
}
Alles anzeigen
Mit Hilfe, Kritik oder Denkanstößen würdet ihr eine Studentin sehr glücklich machen
Liebe Grüße