初始化提交
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
/*
|
||||
Copyright (c) 2014-2015 NicoHood
|
||||
See the readme for credit to other people.
|
||||
|
||||
PinChangeInterrupt_TickTock
|
||||
Demonstrates how to use the library
|
||||
|
||||
Connect a button/cable to pin 10/11 and ground.
|
||||
The value printed on the serial port will increase
|
||||
if pin 10 is rising and decrease if pin 11 is falling.
|
||||
|
||||
PinChangeInterrupts are different than normal Interrupts.
|
||||
See readme for more information.
|
||||
Dont use Serial or delay inside interrupts!
|
||||
This library is not compatible with SoftSerial.
|
||||
|
||||
The following pins are usable for PinChangeInterrupt:
|
||||
Arduino Uno/Nano/Mini: All pins are usable
|
||||
Arduino Mega: 10, 11, 12, 13, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64),
|
||||
A11 (65), A12 (66), A13 (67), A14 (68), A15 (69)
|
||||
Arduino Leonardo/Micro: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)
|
||||
HoodLoader2: All (broken out 1-7) pins are usable
|
||||
Attiny 24/44/84: All pins are usable
|
||||
Attiny 25/45/85: All pins are usable
|
||||
Attiny 13: All pins are usable
|
||||
Attiny 441/841: All pins are usable
|
||||
ATmega644P/ATmega1284P: All pins are usable
|
||||
*/
|
||||
|
||||
#include "PinChangeInterrupt.h"
|
||||
|
||||
// choose a valid PinChangeInterrupt pin of your Arduino board
|
||||
#define pinTick 10
|
||||
#define pinTock 11
|
||||
|
||||
volatile long ticktocks = 0;
|
||||
|
||||
void setup()
|
||||
{
|
||||
// start serial debug output
|
||||
Serial.begin(115200);
|
||||
Serial.println(F("Startup"));
|
||||
|
||||
// set pins to input with a pullup
|
||||
pinMode(pinTick, INPUT_PULLUP);
|
||||
pinMode(pinTock, INPUT_PULLUP);
|
||||
|
||||
// attach the new PinChangeInterrupts and enable event functions below
|
||||
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTick), tick, RISING);
|
||||
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTock), tock, FALLING);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
// integer to count the number of prints
|
||||
static int i = 0;
|
||||
delay(1000);
|
||||
|
||||
// print values
|
||||
Serial.print(i, DEC);
|
||||
Serial.print(F(" "));
|
||||
Serial.println(ticktocks);
|
||||
|
||||
// abort if we printed 100 times
|
||||
if (i >= 100) {
|
||||
Serial.println(F("Detaching Interrupts."));
|
||||
detachPinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTick));
|
||||
detachPinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTock));
|
||||
return;
|
||||
}
|
||||
else
|
||||
i++;
|
||||
|
||||
// Temporary pause interrupts
|
||||
if (ticktocks > 500) {
|
||||
Serial.println(F("Disabling Tick Interrupt."));
|
||||
disablePinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTick));
|
||||
enablePinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTock));
|
||||
}
|
||||
else if (ticktocks < -500) {
|
||||
Serial.println(F("Disabling Tock Interrupt."));
|
||||
disablePinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTock));
|
||||
enablePinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTick));
|
||||
}
|
||||
else {
|
||||
enablePinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTick));
|
||||
enablePinChangeInterrupt(digitalPinToPinChangeInterrupt(pinTock));
|
||||
}
|
||||
}
|
||||
|
||||
void tick(void) {
|
||||
// increase value
|
||||
ticktocks++;
|
||||
}
|
||||
|
||||
void tock(void) {
|
||||
// decrease value
|
||||
ticktocks--;
|
||||
}
|
||||
Reference in New Issue
Block a user