Primi esercizi con arduino

Salve Arduini!

Sto seguendo gli esercizi del manuale ma mi sono imbattuto in un conflitto con la libreria bounce, del gioco dei dadi...
non ne vengo a capo, sembrerebbe che la classe implementata nella libreria non sia corretta, ma è l'unica libreria, forse i successivi aggiornamenti l'hanno resa incompatibili ed io non riesco a modificarla.
ecco il log:

Gioco_dadi:22: error: no matching function for call to 'Bounce::Bounce(const unsigned int&, const unsigned int&)'
/Users/angelo/Documents/Arduino/libraries/Bounce2/Bounce2.h:40: note: candidates are: Bounce::Bounce()
/Users/angelo/Documents/Arduino/libraries/Bounce2/Bounce2.h:36: note: Bounce::Bounce(const Bounce&)
Gioco_dadi:23: error: no matching function for call to 'Bounce::Bounce(const unsigned int&, const unsigned int&)'
/Users/angelo/Documents/Arduino/libraries/Bounce2/Bounce2.h:40: note: candidates are: Bounce::Bounce()
/Users/angelo/Documents/Arduino/libraries/Bounce2/Bounce2.h:36: note: Bounce::Bounce(const Bounce&)

ed il programma:

#include <Bounce2.h>


const unsigned int LED_BIT0 = 8;
const unsigned int LED_BIT1 = 7;
const unsigned int LED_BIT2 = 6;
const unsigned int START_BUTTON_PIN = 5;
const unsigned int GUESS_BUTTON_PIN = 3;
const unsigned int BAUD_RATE = 9600;

void setup() {
  pinMode(LED_BIT0, OUTPUT);
  pinMode(LED_BIT1, OUTPUT);
  pinMode(LED_BIT2, OUTPUT);
  pinMode(START_BUTTON_PIN, INPUT);
  pinMode(GUESS_BUTTON_PIN, INPUT);
  randomSeed(analogRead(A0));
  Serial.begin(BAUD_RATE);
}

const unsigned int DEBOUNCE_DELAY = 20;
Bounce start_button(START_BUTTON_PIN, DEBOUNCE_DELAY);
Bounce guess_button(GUESS_BUTTON_PIN, DEBOUNCE_DELAY);
int guess = 0;

void loop() {
  handle_guess_button();
  handle_start_button();
}

void handle_guess_button() {
  if (guess_button.update()) {
    if (guess_button.read() == HIGH) {
      guess = (guess % 6) + 1;
      output_result(guess);
      Serial.print("Guess: ");
      Serial.println(guess);
    }
  }
}

void handle_start_button() {
  if (start_button.update()) {
    if (start_button.read() == HIGH) {
      const int result = random(1, 7);
      output_result(result);
      Serial.print("Result: ");
      Serial.println(result);
      if (guess > 0) {
        if (result == guess) {
          Serial.println("You win!");
          hooray();
        } 
        else {
          Serial.println("You lose!");
        }
      }
      delay(2000);
      guess = 0;
    }
  }
}

void output_result(const long result) {
  digitalWrite(LED_BIT0, result & B001);
  digitalWrite(LED_BIT1, result & B010);
  digitalWrite(LED_BIT2, result & B100);
}
void hooray() {
  for (int i = 0; i < 3; i++) {
    output_result(7);
    delay(500);
    output_result(0);
    delay(500);
  }
  }

Vi ringrazio!

[EDIT] aggiunto Code Tags Uwe [/EDIT]

Ciao e Benvenuto.
Dovresti modificare il tuo precedente post (tasto modify in alto a destra) e in cludere il codice con i tag CODE come spiegato al punto 7 --> [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum
Il post diventa più leggibile.

La libreria è stata completamente modificata.
Vedi gli esempi qui --> https://github.com/thomasfredericks/Bounce-Arduino-Wiring/tree/master/Bounce2

Non ti manca un "Bounce debouncer = Bounce();" come presente nel esempio della libreria linkata da PaoloP?
https://github.com/thomasfredericks/Bounce-Arduino-Wiring/blob/master/Bounce2/examples/bounce/bounce.ino :

#include <Bounce2.h>

/* 
DESCRIPTION
====================
Simple example of the bounce library that switches the debug LED when a button is pressed.

CIRCUIT
====================
https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png
*/

#define BUTTON_PIN 2
#define LED_PIN 13

// Instantiate a Bounce object
Bounce debouncer = Bounce(); 

void setup() {
  // Setup the button
  pinMode(BUTTON_PIN,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN,HIGH);
  
  // After setting up the button, setup debouncer
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5);
  
  //Setup the LED
  pinMode(LED_PIN,OUTPUT);  
}

void loop() {
 // Update the debouncer
  debouncer.update();
 
 // Get the update value
 int value = debouncer.read();
 
 // Turn on or off the LED
 if ( value == HIGH) {
   digitalWrite(LED_PIN, HIGH );
 } else {
    digitalWrite(LED_PIN, LOW );
 } 
}

Ciao e Benvenuto.
Dovresti modificare il tuo precedente post (tasto modify in alto a destra) e in cludere il codice con i tag CODE come spiegato al punto 7 --> [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum
Il post diventa più leggibile

Ciao grazie per le info, ora ci do uno sguardo al punto 7

Anche io zona Cagliari :slight_smile:

Sto notando l'utilizzo di classi come in C++ e Objective-c
copierò molti codici belli pronti ]:slight_smile: ]:smiley:

Non ti manca un "Bounce debouncer = Bounce();" come presente nel esempio della libreria linkata da PaoloP?

non so, la libreria è cambiata e non funge in un normale pulsante...
il mio codice è completo, trascritto dal manuale...

Non conoscendo il manuale posso solo suporre che potrebbe essere il codice con un errore.
Hai provato l' esempio che ho citato?
Ciao Uwe

angelo73:
Sto notando l'utilizzo di classi come in C++ e Objective-c
copierò molti codici belli pronti ]:slight_smile: ]:smiley:

Tieni conto che sei su un Arduino, quindi la memoria è molto limitata. Non è un PC nè un cellulare moderno.
E' pensato per "giocare" con l'elettronica non per fare roba spaziale come gestione video o suoni complessi (per quello c'e' il PC) :smiley:

E, a quanto ha detto Nid, aggiungo ...

... ricorda che non hai un "garbage collector" e che, se non stai più che attento con gli "oggetti", i 2KB di SRAM di Arduino ci mettono meno di "un battito di ciglia" a finire frammentati ed inutilizzabili e ... dato che non c'è un OS che controlla le cose, siglifica che ... ci metti meno di "un battito di ciglia" ad avere il programma in crash e fuori controllo ... :grin:

Guglielmo

Si ho notato, comunque mi da abbastanza soddisfazioni, quel manuale di skmidt ? troppo pretendenzioso, ora col piccolo manuale di arduino mi trovo meglio!
Ho deciso di digitarlo a mano il bounce tanto son due righe di programma, giusto una pausa di 20 millisecondi per assestare il pulsante..

Grazie

Ciao! Ho avuto anche io un pò di problemi con il libro di Schmidt, ma sono riuscito a sistemare il codice, a me ora funziona correttamente.

ciao
Gabriele

#include <Bounce2.h>

const unsigned int LED_BIT0=12;
const unsigned int LED_BIT1=11;
const unsigned int LED_BIT2=10;
const unsigned int START_BUTTON_PIN=5;
const unsigned int GUESS_BUTTON_PIN=7;
const unsigned int BAUD_RATE=9600;

Bounce start_button=Bounce();
Bounce guess_button=Bounce();
int guess=0;

void setup() {
  // put your setup code here, to run once:
 pinMode(LED_BIT0,OUTPUT);
 pinMode(LED_BIT1,OUTPUT);
 pinMode(LED_BIT2,OUTPUT);
 pinMode(START_BUTTON_PIN, INPUT);
 pinMode(GUESS_BUTTON_PIN, INPUT);
 randomSeed(analogRead(A0));
 Serial.begin(BAUD_RATE);
 
 start_button.attach(START_BUTTON_PIN);
 start_button.interval(5);
 guess_button.attach(GUESS_BUTTON_PIN);
 guess_button.interval(5);
}


void loop() {
  // put your main code here, to run repeatedly:
  handle_guess_button();
  handle_start_button();
  }
  
  void handle_guess_button() {
    if (guess_button.update()) {
      if (guess_button.read() == HIGH) {
        guess= ((guess % 6) +1);
        output_result(guess);
        Serial.print("Guess: ");
        Serial.println(guess);
       }
     }
   }  

void handle_start_button() {
  if (start_button.update()) {
    if (start_button.read() == HIGH) {
      const int result = random (1,7);
      output_result(result);
      Serial.print("Result: ");
      Serial.println(result);
      if (guess>0) {
        if (result == guess) {
          Serial.println("You win!");
          hooray();
          } else {
            Serial.println("You lose!");
            }
        }
        delay(2000);
        guess=0;
      }
    }
  }

void output_result(const long result) {
  digitalWrite(LED_BIT0, result & B001);
  digitalWrite(LED_BIT1, result & B010);
  digitalWrite(LED_BIT2, result & B100);
  }
  
 void hooray(){
   for (int i=0; i<3; i++){
     output_result(7);
     delay(500);
     output_result(0);
     delay(500);
     }
  }