Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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;
- unsigned long startTime;
- #define TIMEOUT 10000
- void setup() {
- pinMode(optoPin, INPUT_PULLUP);
- pinMode(relePin, OUTPUT);
- digitalWrite(relePin, LOW);
- Serial.begin(9600); //inizio comunicazione seriale
- optoState = digitalRead(optoPin);
- }
- 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) {
- // Se il motore è fermo, memorizzo il momento in cui parte.
- // In questo modo mi assicuro di impostare la variabile solo al fronte di salita di relePin
- if(digitalRead(relePin) == LOW){
- startTime = millis();
- }
- digitalWrite(relePin, HIGH); //rilascio gettoni
- optoState = digitalRead(optoPin);
- }
- else {
- digitalWrite(relePin, LOW); //STOP rilascio gettoni
- }
- // Solo se il motore è ancora acceso, dopo 10 secondi dall'attivazione, resetto l'uscita
- if(digitalRead(relePin) == HIGH){
- if(millis() - startTime > TIMEOUT ){
- digitalWrite(relePin, LOW); //STOP rilascio gettoni
- Serial.println("refill");
- delay(100);
- }
- }
- }
- void tokensCountDown() {
- 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);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement