errors compiling this button library
i made library jeff saltzman button reading code getting errors when trying use , compile in sketch:
here arduino sketch:
and library files:
button.h:
button.c:
code: [select]
/users/admin/documents/arduino/libraries/button/button.h:17: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'button'
/users/admin/documents/arduino/libraries/button/button.c:19: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' token
/users/admin/documents/arduino/libraries/button/button.c:51: error: expected '=', ',', ';', 'asm' or '__attribute__' before ':' tokenhere arduino sketch:
code: [select]
#include <button.h>
#define mybuttonpin 19
#define ledpin1 17 // digital output pin led 1
#define ledpin2 16 // digital output pin led 2
#define ledpin3 15 // digital output pin led 3
#define ledpin4 14 // digital output pin led 4
button mybutton(mybuttonpin);
// led variables
boolean ledval1 = false; // state of led 1
boolean ledval2 = false; // state of led 2
boolean ledval3 = false; // state of led 3
boolean ledval4 = false; // state of led 4
//=================================================
void setup()
{
// set led output pins
pinmode(ledpin1, output);
digitalwrite(ledpin1, ledval1);
pinmode(ledpin2, output);
digitalwrite(ledpin2, ledval2);
pinmode(ledpin3, output);
digitalwrite(ledpin3, ledval3);
pinmode(ledpin4, output);
digitalwrite(ledpin4, ledval4);
}
void loop()
{
// button event , act accordingly
int b = mybutton.checkbutton();
if (b == 1) clickevent();
if (b == 2) doubleclickevent();
if (b == 3) holdevent();
if (b == 4) longholdevent();
}
//=================================================
// events trigger click , press+hold
void clickevent()
{
ledval1 = !ledval1;
digitalwrite(ledpin1, ledval1);
}
void doubleclickevent()
{
ledval2 = !ledval2;
digitalwrite(ledpin2, ledval2);
}
void holdevent()
{
ledval3 = !ledval3;
digitalwrite(ledpin3, ledval3);
}
void longholdevent()
{
ledval4 = !ledval4;
digitalwrite(ledpin4, ledval4);
}and library files:
button.h:
code: [select]
/*
* button.h
*
*
* library created danjel van tijn on 30/10/09 using code
* jeff saltzman oct. 13, 2009 .
*
*
*/
#ifndef button_h
#define button_h
#include "wprogram.h"
class button
{
public:
button(int pin);
int checkbutton();
// button timing variables
int debounce; // ms debounce period prevent flickering when pressing or releasing button
int dcgap; // max ms between clicks double click event
int holdtime; // ms hold period: how long wait press+hold event
int longholdtime; // ms long hold period: how long wait press+hold event
private:
int buttonpin
boolean buttonval; // value read button
boolean buttonlast; // buffered value of button's previous state
boolean dcwaiting; // whether we're waiting double click (down)
boolean dconup; // whether register double click on next release, or whether wait , click
boolean singleok; // whether it's ok single click
long downtime; // time button pressed down
long uptime; // time button released
boolean ignoreup; // whether ignore button release because click+hold triggered
boolean waitforup; // when held, whether wait event
boolean holdeventpast; // whether or not hold event happened already
boolean longholdeventpast;// whether or not long hold event happened already
}
#endif
button.c:
code: [select]
/*
* button.c
*
*
* library created danjel van tijn on 30/10/09 using code
* jeff saltzman oct. 13, 2009 .
*
*
*/
#include "button.h"
#include "wprogram.h"
/******************************************************************************
* constructor
******************************************************************************/
button::button(int pin)
{
buttonpin = pin;
pinmode(buttonpin, input);
digitalwrite(buttonpin, high );
// button timing variables
debounce = 20; // ms debounce period prevent flickering when pressing or releasing button
dcgap = 250; // max ms between clicks double click event
holdtime = 2000; // ms hold period: how long wait press+hold event
longholdtime = 5000; // ms long hold period: how long wait press+hold event
// other button variables
buttonval = high; // value read button
buttonlast = high; // buffered value of button's previous state
dcwaiting = false; // whether we're waiting double click (down)
dconup = false; // whether register double click on next release, or whether wait , click
singleok = true; // whether it's ok single click
downtime = -1; // time button pressed down
uptime = -1; // time button released
ignoreup = false; // whether ignore button release because click+hold triggered
waitforup = false; // when held, whether wait event
holdeventpast = false; // whether or not hold event happened already
longholdeventpast = false;// whether or not long hold event happened already
}
/******************************************************************************
* public methods
******************************************************************************/
int button::checkbutton()
{
int event = 0;
// read state of button
buttonval = digitalread(buttonpin);
// button pressed down
if (buttonval == low && buttonlast == high && (millis() - uptime) > debounce)
{
downtime = millis();
ignoreup = false;
waitforup = false;
singleok = true;
holdeventpast = false;
longholdeventpast = false;
if ((millis()-uptime) < dcgap && dconup == false && dcwaiting == true) dconup = true;
else dconup = false;
dcwaiting = false;
}
// button released
else if (buttonval == high && buttonlast == low && (millis() - downtime) > debounce)
{
if (not ignoreup)
{
uptime = millis();
if (dconup == false) dcwaiting = true;
else
{
event = 2;
dconup = false;
dcwaiting = false;
singleok = false;
}
}
}
// test normal click event: dcgap expired
if ( buttonval == high && (millis()-uptime) >= dcgap && dcwaiting == true && dconup == false && singleok == true)
{
event = 1;
dcwaiting = false;
}
// test hold
if (buttonval == low && (millis() - downtime) >= holdtime)
{
// trigger "normal" hold
if (not holdeventpast)
{
event = 3;
waitforup = true;
ignoreup = true;
dconup = false;
dcwaiting = false;
//downtime = millis();
holdeventpast = true;
}
// trigger "long" hold
if ((millis() - downtime) >= longholdtime)
{
if (not longholdeventpast)
{
event = 4;
longholdeventpast = true;
}
}
}
buttonlast = buttonval;
return event;
}
just wild guess:
it breaks on class definitions. can button.c should renamed button.cpp?
will make compiler recognize c+?
john
it breaks on class definitions. can button.c should renamed button.cpp?
will make compiler recognize c+?
john
Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > errors compiling this button library
arduino
Comments
Post a Comment