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);
}
}
#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 );
}
}
angelo73:
Sto notando l'utilizzo di classi come in C++ e Objective-c
copierò molti codici belli pronti ] ]
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)
... 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 ...
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..