Aiuto per gestire output in mame

Tutto quello che c'è da sapere lo trovate qui.
Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 12/01/2019, 17:01

Te lo dico solo se ritesti il mio codice...


Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 12/01/2019, 18:27

eccerto che lo ritesto [shake2.gif] ti invio un pm

L'ho appena ricaricato il tuo ultimo sketch, quando vuoi torniamo a provare [Laie_73.gif]

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 12/01/2019, 18:39

Basta che modifichi la parte finale mettendo "if credito < 0"

Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 12/01/2019, 18:45

ma questo per quanto riguarda il mio sketch giusto ? mentre per il tuo ? che facciamo ? io sono rimasto alla prova del rele e che non parte , in effetti l'ho ritestato , mi arriva segnale da mamehook pero poi non parte il rele.

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 12/01/2019, 20:40

Speravo che avendo risolto la parte hardware anche il mio potesse partire
Si, la modifica è per il tuo: un credito in più
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 12/01/2019, 20:53

comunque non va , nemmeno con il mio , ma cercando in rete ho trovato questo e lo sto testando a debug con il monitor seriale.

#define SENSOR 2
#define RELAY 3

int pulse=0,count;
char sen,temp;
unsigned long int timer;

void setup()
{
Serial.begin(9600);
pinMode(SENSOR,INPUT_PULLUP);
pinMode(RELAY,OUTPUT);
Serial.println("Coin Hopper ready");
sen=digitalRead(SENSOR);
}

void loop()
{
if(Serial.available())
{
timer=millis();
temp=Serial.read()-'0';
if((temp>0)&(temp<10)) digitalWrite(RELAY,HIGH);
}

sen=(sen<<1)|digitalRead(SENSOR);
sen&=0x03;
if(sen==1)
{
timer=millis();
pulse++;
if(pulse>=temp)
{
digitalWrite(RELAY,LOW);
Serial.println("You get RM"+String(0.5*pulse,2));
pulse=0;
temp=0;
}
}

if((digitalRead(RELAY)==HIGH)&(millis()-timer>2000))
{
digitalWrite(RELAY,LOW);
Serial.println("Out of coin. You get RM"+String(0.5*pulse,2));
pulse=0;
temp=0;
}
}

Dunque con questo e con al posto del sensore un semplice bottone (giusto per test) ho la seguente situazione: appena invio un numero via seriale e do invio il rele si attiva e parte l'erogazione , pero appena premo il bottone una volta si ferma , e a monitor seriale mi da un singolo messaggio , come se fosse passata solo una moneta insomma .
Ora mi chiedo , da questo qui possiamo strutturare per ricevere da mamehook input e aggiustare la parte del conteggio da parte del sensore ? o e troppo sbattimento ?

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 13/01/2019, 9:39

Ma come! Avevi detto che il tuo funzionava a parte la questione del gettone in meno! Non ci capisco piu niente
Questo metodo di prendere codici in giro per la rete, verificarne l'ovvio malfunzionamento (dato che nascono per usi diversi) e modificarli non porta da nessuna parte. Ricominci da zero ogni volta così.
Ripeto: se vuoi venirne fuori DEVI comprendere al 100% Il codice, riga per riga, e poi fare le opportune modifiche.
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 11:45

e si . Allora ti spiego bene. Con il mio codice funziona l'erogazione il conteggio e tutto solo che mi eroga sempre e solo una moneta in meno rispetto a quello che deve erogare.
Per esempio mamehook dice di erogare 10 gettoni e me ne eroga 9 cosi via se sono 8 eroga 7. Anche cambiando la variabile che mi hai suggerito.
Inoltre con il mio ho notato anche che di tanto in tanto come se si blocca , ossia dopo n. x di pagamenti non riceve piu comunicazione da mamehook e sono costretto a riavviare il tutto (anche il pc)
Ragion per cui avrei voluto inserire nello skecth una sorta di riavvio di arduino a completamento delle funzioni.
Mentre per quel che riguarda la parte degli sketch presi in giro in rete, è per prima cosa avere un resoconto a monitor seriale , per testare il funzionamento dei singoli componenti (Sensore , rele ecc) successivamente è anche per imparare , ossia la butto li , come mai il mio sketch usa gli interrupt e il tuo no?
Lo so e traviante la cosa , ma io credo anche che il problema 'è davvero una cosa semplice tutto sta a capire dove sta il problema

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 13/01/2019, 12:36

Gli interrupts si usano quando si vuole che un evento prioritario non venga perso durante l'esecuzione del loop. Può avere senso usarlo qui, ma onestamente può funzionare anche senza dal momento che il passaggio del gettone ha una durata relativamente lunga.
Appena ho tempo metto un po' di linee per il debug nel codice mio. Non ho tempo ne mmotivazione per studiarmi bene gli altri due, ma tu si!
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 13:17

infatti, sto guardando bene bene il tuo codice e al momento ho questa situazione .

const int optoPin = 8; //questo è il pin a cui è collegato l'optoswitch
const int relePin = 3;
int pin;
int value;
bool optoState; //stato dell'opto
bool lastOptoState; //stato precedente dell'opto
int coins = 8;

void setup(){
pinMode(optoPin, INPUT);
pinMode(relePin, OUTPUT);
optoState = digitalRead(optoPin); //inizializzazione stato optoPin
digitalWrite(relePin, LOW);
Serial.begin(9600); //inizio comunicazione seriale
}

void loop(){
//checkForCredits();
releaseTokens();
tokensCountDown();
}

void checkForCredits(){
while (Serial.available() >= 0) {
pin = Serial.parseInt();
value = Serial.parseInt();
if (Serial.read() == 'x') {
if (value > 0){
coins=coins++;
}
}
}
}

void releaseTokens(){
if(coins > 0){
digitalWrite(relePin, HIGH); //rilascio gettoni
}
else {
digitalWrite(relePin, LOW); //STOP rilascio gettoni
}
}

void tokensCountDown(){
optoState = digitalRead(optoPin); //aggiorniamo lo stato dell'opto
if (optoState != lastOptoState){// se lo stato dell'opto è cambiato (cioè qualcosa sta passando, in entrata o uscita)
lastOptoState = optoState;
delay (100); //debounce "economico" (questo serve perchè nel passaggio di stato possono esserci fluttuazioni che portano a conteggi errati)
if(lastOptoState == LOW && coins > 0){
coins=coins - 1 ; //decremento gettoni
Serial.print("numero gettoni:");
Serial.println(coins);
}
}
}

Questo e il tuo sketch , ho modificato la if (lastoptostate == su LOW perche , con un pulsante al posto del sensore avevo comunque un gettone in meno sulla seriale, impostato su low mi conta i giusti gettoni e fa fermare il rele. A questo punto mancherebbe solo la comunicazione con mamehook e quindi la parte che ho commentato check for credits no?

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 13:28

dunque questo è lo sketch con il check for credits attivato , con al posto del sensore messo il bottone , e quando a monitor seriale invio 1x 1x 1x 1x 1x 1x , comincia l'erogazione e devo premere 6 volte il pulsante per far fermare il rele. Quindi sembra stia funzionando tutto.

const int optoPin = 8; //questo è il pin a cui è collegato l'optoswitch
const int relePin = 3;
int pin;
int value;
bool optoState; //stato dell'opto
bool lastOptoState; //stato precedente dell'opto
int coins = 0;

void setup(){
pinMode(optoPin, INPUT);
pinMode(relePin, OUTPUT);
optoState = digitalRead(optoPin); //inizializzazione stato optoPin
digitalWrite(relePin, LOW);
Serial.begin(9600); //inizio comunicazione seriale
}

void loop(){
checkForCredits();
releaseTokens();
tokensCountDown();
}

void checkForCredits(){
while (Serial.available() > 0) {
value = Serial.parseInt();
if (Serial.read() == 'x') {
if (value > 0){
coins ++;
}
}
}
}

void releaseTokens(){
if(coins > 0){
digitalWrite(relePin, HIGH); //rilascio gettoni
}
else {
digitalWrite(relePin, LOW); //STOP rilascio gettoni
}
}

void tokensCountDown(){
optoState = digitalRead(optoPin); //aggiorniamo lo stato dell'opto
if (optoState != lastOptoState){// se lo stato dell'opto è cambiato (cioè qualcosa sta passando, in entrata o uscita)
lastOptoState = optoState;
delay (100); //debounce "economico" (questo serve perchè nel passaggio di stato possono esserci fluttuazioni che portano a conteggi errati)
if(lastOptoState == LOW && coins > 0){
coins=coins - 1 ; //decremento gettoni
Serial.print("numero gettoni:");
Serial.println(coins);
}
}
}

adesso sostituisco il pulsante con il sensore e faccio sempre la prova a monitor seriale , dopodiche la metto sotto mamehook

Edit. anche con il sensore messo sta funzionando !!!

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 13/01/2019, 13:45

Non capisco perché prima non funzionasse, ma sono contento che adesso vada!
Non sarebbe male che mettessi qualche fotina o video di funzionamento così vediamo qualcosa anche noi
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 15:16

faccio subito una foto e un piccolo video e li uppo. Comunque sto facendo 1000 prove , ho notato che quando la ruota dell hopper è vuota , mi da i giusti gettoni, mentre quando gia c'e nel meccanismo di espulsione una moneta , questa il sensore non me la conta , sto provando a modificare il delay , ma senza successo . Come posso fare?

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 16:40

ho trovato il giusto compromesso tra delay e tutto e ora sembra stia funzionando . faccio un paio di milioni di test per vedere se effettivamente va .
L'unica cosa, quando non ci sono piu monete nell'hopper ovviamente questo skecth lo fara girare all'infinito, si puo mettere un temporizzatore che se ad esempio per 10 sec non passano monete dal sensore cmq si spegne il rele.

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 18:19

e che io ho voglia di imparare anche ...
ho provato ad aggiungere questo ma non funziona... dove sto sbagliando ???

void stopifempty() {
if (optoState = lastOptoState) {
optoState = lastOptoState;
delay (5000);
}
else {
digitalWrite(relePin, LOW); //STOP rilascio gettoni
}
}

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 13/01/2019, 19:13

Non puoi usare la funzione delay() perché, di fatto, blocca il loop per il tempo che gli imposti. Devi giocare con la funzione millis().
Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 20:40

e ho visto e come lo imposto ? Ti prego aiutami manca solo questo e poi ti prometto il video di tutto funzionante .. :D [joint.gif] [joint.gif]

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 20:49

ecco il video
Non hai i permessi necessari per visualizzare i file allegati in questo messaggio.

hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 13/01/2019, 21:01

unsigned long int timer;

if((digitalRead(optoPin)==LOW)&(millis()-timer>5000))
{
digitalWrite(relepin ,LOW);

è giusto???

Avatar utente
Barito
Arcade Maniac
Arcade Maniac
Messaggi: 3519
Iscritto il: 08/12/2015, 19:18
Reputation: 819

Re: Aiuto per gestire output in mame

Messaggio da Barito » 13/01/2019, 21:25

Lo sai già che non è giusto
Unsigned long, senza int
&&, non solo &
Inoltre devi ri-inizializzare la variabile timer o funzionerà (forse) una sola volta
timer = millis(); ma devi pensare quale condizione imporre (if coins == 0? If optopin == HIGH? Per esempio, ma bisogna pensarci un attimo).
Anche con queste modifiche non funzionerà: non sono al pc e sono di corsaaa







Dal ciglio della strada osservo sbraitando i lavori in corso nel mondo arcade...

Rispondi