errors compiling this button library


i made library jeff saltzman button reading code getting errors when trying use , compile in sketch:

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 ':' token


here 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


Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > errors compiling this button library


arduino

Comments