Aiuto per gestire output in mame

Tutto quello che c'è da sapere lo trovate qui.
hashmaker
Gamer
Gamer
Messaggi: 58
Iscritto il: 02/01/2019, 18:57
Reputation: 0

Re: Aiuto per gestire output in mame

Messaggio da hashmaker » 10/01/2019, 12:43

come da tuo consiglio sto cercado di ridurre all'osso lo skecth e quindi con il seguente , ho questa situazione . Appena lo collego e apro il monitor seriale , ad ogni passaggio di moneta mi conta 1 . Quindi da ignorante presumo che questa deve essere la base per tutto il resto.

int state=LOW;
int lastState=LOW;
int count=0;

void setup(){



Serial.begin(9600);
pinMode(8, INPUT);
state=digitalRead(8);
}
void loop(){
if (state==HIGH && lastState==LOW){
count++;
delay (100);
Serial.println(count);


}
lastState=state;
state=digitalRead(8);
}


questo e il risultato del monitor seriale ad ogni passaggio di moneta

12:39:24.690 -> 1
12:39:37.038 -> 2
12:39:37.297 -> 3
12:39:39.126 -> 4
12:39:40.331 -> 5
12:39:42.106 -> 6
12:39:43.531 -> 7
12:39:44.502 -> 8
12:39:45.395 -> 9
12:39:46.245 -> 10
12:39:46.830 -> 11
12:39:47.090 -> 12
12:39:47.536 -> 13



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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 10/01/2019, 12:56

hashmaker ha scritto:
10/01/2019, 12:36
ho appena testato quello sketch , e sul monitor seriale appena si avvia mi compare

12:35:13.967 -> numero gettoni:9

e se passo un dito davanti al sensore non succede nulla.
Avevo dimenticato di aggiornare lo stato dell'opto [on_eek.gif] . Questo dovrebbe andare

Codice: Seleziona tutto

int optoPin = 8; //questo è il pin a cui è collegato l'optoswitch
bool optoState; //stato dell'opto
bool lastOptoState; //stato precedente dell'opto
int coins = 10;//questo sarà inizializzato nella parte di codice che conta i coin in-game (le "x" insomma). Qui metto "10" per test

void setup(){
Serial.begin(9600);
pinMode(optoPin, INPUT); 
optoState = digitalRead(optoPin); //inizializzazione stato optoPin
}

void loop(){
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 == HIGH && coins > 0){
       coins--;   //decremento gettoni
       Serial.print("numero gettoni:");
       Serial.println(coins);
    }
}
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 » 10/01/2019, 15:34

sei un grande , funziona mi scala da 9 a 0 ... però adesso ? integrarlo con l'ingresso che arriva da seriale ad arduino e far accendere ìl rele , poi quando questo contatore ritorna a 0 farlo fermare no ?

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 10/01/2019, 16:36

Prova questo, ma dubito possa funzionare al primo colpo...

Codice: Seleziona 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) {
pin = Serial.parseInt();
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 == HIGH && coins > 0){
       coins--;   //decremento gettoni
       //Serial.print("numero gettoni:");
       //Serial.println(coins);
    }
}
}
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 » 10/01/2019, 18:11

gia... non parte il rele

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 10/01/2019, 18:27

È collegato al pin 3?
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 » 10/01/2019, 19:19

certo ho anche controllato

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 10/01/2019, 19:41

Ok. Dobbiamo testare la funzione "releaseTokens". Imposta a 10 la variabile coins e disabilita le altre due funzioni nel loop. Puoi semplicemente cancellarle (solo nel loop, non serve altrove) o mettere prima del call due slash // (cioè le rendi commento). Prova e vedi che fa.
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 » 10/01/2019, 20:39

allora con la variabile coins su 10 appena si avvia si accende anche il rele . Con la variabile a 0 si avvia con il rele spento

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 10/01/2019, 20:45

Ok, adesso abilita anche la funzione tokensCountDown lasciando disabilitata checkForCredits. Imposta 10 coins. Passa il dito di fronte all'opto per scalare crediti fino ad esaurimento e far fermare il relè.
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 » 10/01/2019, 20:54

è da impazzirci non si ferma il rele ... passando 10 monete ... come passandone 100

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 10/01/2019, 21:06

Ma adesso stai ancora testando su breadboard o hai fatto modifiche hardware? Perché prima il count down lo faceva, mentre ora sembra di no dal comportamento del relè...
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 » 10/01/2019, 21:08

sono nudo e crudo su breadboard e nn ho fatto nessuna modifica hardware

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

Re: Aiuto per gestire output in mame

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

Fare debug senza hardware è un problema, che ti devo dire.
Fai un ultimo tentativo per stasera: abilita tutte le funzioni e sostituisci coins++ e coins-- rispettivamente con coins=coins+1 e coins=coins-1. Non cambierà un cazzo ma a volte...
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 » 10/01/2019, 21:22

niente da fare appena provato .se non altro sto anche provando direttamente dal gioco anche e , cosa che ci tengo a farti notare che dal segnale di mamehook adesso c'e sempre comunicazione con arduino (led rx e tx si accendono a intermittenza) pero come ti ho detto non parte il rele. Va beh , magari domani è un giorno migliore [throw.gif] [shake2.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 » 10/01/2019, 22:29

Bene ho una grandissima novità .
Con il seguente codice e con l'abbassare dei volt del motorino [ph34r.GIF.png] (da 24 volt sono sceso a 7.5) ho avuto il giusto compromesso tra velocita di erogazione dei gettoni e lettura da parte del sensore percio posso confermare che funziona. Adesso se riesco a portare la velocità di lettura del sensore a un valore piu alto riusciremo ad avere un erogazione di monete più veloci. E' giusto ? Oppure rischio qualcosa a fornire meno corrente a un motorino ?

#define TIME_OUT 500UL

int value = 0;
volatile int credito = 0;
unsigned long myMillis = 0;
bool riscossione = false;
volatile bool ritardo = false;
volatile bool ledONOFF = HIGH;
volatile bool attivaISR = false;

void setup() {
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
pinMode(2, INPUT);
Serial.begin(9600);
}

void loop() {
while (Serial.available() > 0) {
value = Serial.parseInt();
if (Serial.read() == 'x') {
riscossione = true;
myMillis = millis();
if (value > 0) {
credito ++;
}
}
}

if (riscossione && (millis() - myMillis > TIME_OUT)) {
riscossione = false;
attivaISR = true;
attachInterrupt(digitalPinToInterrupt(2), erogazione, FALLING);
digitalWrite(3, HIGH);
}
if (ritardo) {
digitalWrite(LED_BUILTIN, LOW);
delay(20);
digitalWrite(3, LOW);
ritardo = false;
detachInterrupt (digitalPinToInterrupt(2));
}
}

void erogazione() {
if (attivaISR) {
credito--;
digitalWrite(LED_BUILTIN, ledONOFF);
ledONOFF = !ledONOFF;
if (credito <= 0) {
ritardo = true;
attivaISR = false;
credito = 0;
}
}
}

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 11/01/2019, 6:24

Il relè andrebbe alimentato alla sua tensione nominale (che nel caso specifico è 5V... c'è pure scritto sopra). Questi modulini sono solitamente molto "di bocca buona" comunque, e per scassarli bisogna andare molto fuori specifica (tipo a 24V [surprice.gif] ).
Adesso però mi dispiace che il mio codice venga abbandonato al suo destino Immagine
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 » 11/01/2019, 12:49

no forse mi son spiegato male. Dico l'alimentazione esterna del motorino , non del rele , era originariamente a 24 volt. Io l'ho portata a 7.5 volt metre dalla parte dell'alimentazione del rele io quella la prendo direttamente da arduino (5v e gnd).

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

Re: Aiuto per gestire output in mame

Messaggio da Barito » 11/01/2019, 13:03

Ti sei spiegato bene, sono io che ho inteso male (sempre di corsa... [whistling.gif])
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, 16:31

attualmente, stesso codice , mi eroga sempre un gettone in meno di quelli previsti. [censored.gif] [censored.gif] [2guns.gif] [2guns.gif]

Rispondi