Advertisement
TolentinoCotesta

Untitled

Jan 14th, 2019
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const int optoPin = 8; //questo è il pin a cui è collegato l'optoswitch
  2. const int relePin = 3;
  3. int pin;
  4. int value;
  5. bool optoState; //stato dell'opto
  6. bool lastOptoState; //stato precedente dell'opto
  7. int coins = 0;
  8. unsigned long startTime;
  9. #define TIMEOUT 10000
  10.  
  11. void setup() {
  12.   pinMode(optoPin, INPUT_PULLUP);
  13.   pinMode(relePin, OUTPUT);
  14.   digitalWrite(relePin, LOW);
  15.   Serial.begin(9600); //inizio comunicazione seriale
  16.   optoState = digitalRead(optoPin);
  17. }
  18.  
  19. void loop() {
  20.   checkForCredits();
  21.   releaseTokens();
  22.   tokensCountDown();
  23. }
  24.  
  25. void checkForCredits() {
  26.   while (Serial.available() > 0) {
  27.     value = Serial.parseInt();
  28.     if (Serial.read() == 'x') {
  29.       if (value > 0) {
  30.         coins ++;
  31.       }
  32.     }
  33.   }
  34. }
  35.  
  36. void releaseTokens() {
  37.   if (coins > 0) {
  38.     // Se il motore è fermo, memorizzo il momento in cui parte.
  39.     // In questo modo mi assicuro di impostare la variabile solo al fronte di salita di relePin
  40.     if(digitalRead(relePin) == LOW){
  41.       startTime = millis();
  42.     }
  43.     digitalWrite(relePin, HIGH); //rilascio gettoni
  44.     optoState = digitalRead(optoPin);
  45.   }
  46.   else {
  47.     digitalWrite(relePin, LOW); //STOP rilascio gettoni
  48.   }
  49.  
  50.   // Solo se il motore è ancora acceso, dopo 10 secondi dall'attivazione, resetto l'uscita  
  51.   if(digitalRead(relePin) == HIGH){
  52.     if(millis() - startTime > TIMEOUT ){
  53.       digitalWrite(relePin, LOW); //STOP rilascio gettoni
  54.       Serial.println("refill");
  55.       delay(100);
  56.     }
  57.   }
  58.  
  59. }
  60.  
  61. void tokensCountDown() {
  62.   if (optoState != lastOptoState) { // se lo stato dell'opto è cambiato (cioè qualcosa sta passando, in entrata o uscita)
  63.     lastOptoState = optoState;
  64.     delay (100); //debounce "economico" (questo serve perchè nel passaggio di stato possono esserci fluttuazioni che portano a conteggi errati)
  65.     if (lastOptoState == LOW && coins > 0) {
  66.       coins = coins - 1 ; //decremento gettoni
  67.       Serial.print("numero gettoni:");
  68.       Serial.println(coins);
  69.     }
  70.   }
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement