2014年2月20日星期四

restructured Text

http://forrestyu.net/art/math-in-restructuredtext/

https://github.com/mcepl/reStPlugin

2014年2月7日星期五

Arduino - ButtonStateChange加入debounce

Arduino - ButtonStateChange



/*

  State change detection (edge detection)

 

 Often, you don't need to know the state of a digital input all the time,

 but you just need to know when the input changes from one state to another.

 For example, you want to know when a button goes from OFF to ON.  This is called

 state change detection, or edge detection.



 This example shows how to detect when a button or button changes from off to on

 and on to off.

 

 The circuit:

 * pushbutton attached to pin 2 from +5V

 * 10K resistor attached to pin 2 from ground

 * LED attached from pin 13 to ground (or use the built-in LED on

   most Arduino boards)



 created  27 Sep 2005

 modified 30 Aug 2011

 by Tom Igoe



This example code is in the public domain.

 

 http://arduino.cc/en/Tutorial/ButtonStateChange



 */



// this constant won't change:

const int  buttonPin = 2;    // the pin that the pushbutton is attached to

const int ledPin = 13;       // the pin that the LED is attached to



// Variables will change:

int buttonPushCounter = 0;   // counter for the number of button presses

int buttonState = 0;         // current state of the button

int lastButtonState = 0;     // previous state of the button



// the following variables are long's because the time, measured in miliseconds,

// will quickly become a bigger number than can be stored in an int.

long lastDebounceTime = 0;  // the last time the output pin was toggled

long debounceDelay = 50;    // the debounce time; increase if the output flickers





void setup() {

  // initialize the button pin as a input:

  pinMode(buttonPin, INPUT);

  // initialize the LED as an output:

  pinMode(ledPin, OUTPUT);

  // initialize serial communication:

  Serial.begin(9600);

}





void loop() {

  // read the pushbutton input pin:

  int reading = digitalRead(buttonPin);



  // compare the buttonState to its previous state

  if (reading != lastButtonState) {

    // reset the debouncing timer

    //Serial.println("state changed");

    lastDebounceTime = millis();

  }

 

  if( (millis() - lastDebounceTime) > debounceDelay ) {

    if (buttonState != reading) {  

      buttonState = reading;

      // if the state has changed, increment the counter

      if (buttonState == HIGH) {

        // if the current state is HIGH then the button

        // wend from off to on:

        buttonPushCounter++;

        Serial.println("on");

        Serial.print("number of button pushes:  ");

        Serial.println(buttonPushCounter);

        //Serial.println((millis() - lastDebounceTime));

      }

      else {

        // if the current state is LOW then the button

        // wend from on to off:

        Serial.println("off");

      }

    }

  }

  // save the current state as the last state,

  //for next time through the loop

  lastButtonState = reading;



 

  // turns on the LED every four button pushes by

  // checking the modulo of the button push counter.

  // the modulo function gives you the remainder of

  // the division of two numbers:

  if (buttonPushCounter % 4 == 0) {

    digitalWrite(ledPin, HIGH);

  } else {

   digitalWrite(ledPin, LOW);

  }

 

}