1
0
mirror of https://github.com/2martens/uni.git synced 2026-05-06 11:26:25 +02:00

[ES-Blatt2] Added sketch for 2.3

Signed-óff-by: Jim Martens <github@2martens.de>
This commit is contained in:
2015-04-22 19:33:23 +02:00
parent e25a54050a
commit 1c5ac1f6ca
2 changed files with 142 additions and 1 deletions

View File

@ -5,3 +5,8 @@ generate_arduino_firmware(uebung2-1
SKETCH uebung2-1 SKETCH uebung2-1
PROGRAMMER usbtinyisp PROGRAMMER usbtinyisp
NO_AUTOLIBS) NO_AUTOLIBS)
generate_arduino_firmware(uebung2-3
SKETCH uebung2-3
PROGRAMMER usbtinyisp
NO_AUTOLIBS)

View File

@ -0,0 +1,136 @@
// these variables describe the used hardware pins
// adjust them when you use other pins
// hardware pin for the LED
int ledPin = 7;
// hardware pin for button 1
int buttonOnePin = 5;
// hardware pin for button 2
int buttonTwoPin = 3;
// used to achieve a 1kHz frequency
// don't touch them
int compareValue = 60;
int rc = 10499;
// this variable is affected by the buttonOne and buttonTwo actions
int volatile counter = 0;
// these values are used by the TC0_Handler
// do not use them at all
int timesPressedOne = 0;
int timesPressedTwo = 0;
bool buttonOneActionPerformed = false;
bool buttonTwoActionPerformed = false;
/**
* Setup function for initial setup code
*/
void setup() {
pmc_set_writeprotect(false);
pmc_enable_periph_clk(ID_TC0);
// configure hardware timer
TC_Configure(TC0, 0, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK2) ;
TC_SetRC(TC0, 0, rc);
TC0->TC_CHANNEL[0].TC_IER=TC_IER_CPCS; // IER = interrupt enable register
TC0->TC_CHANNEL[0].TC_IDR=~TC_IER_CPCS;
NVIC_ClearPendingIRQ(TC0_IRQn);
NVIC_EnableIRQ(TC0_IRQn);
// start hardware timer
TC_Start(TC0, 0);
// Configure button pins for input mode
pinMode(buttonOnePin, INPUT);
pinMode(buttonTwoPin, INPUT);
// initialize serial port
Serial.begin(9600);
}
/**
* Loop function for main code
*/
void loop() {
// write the current counter to the LED pin
analogWrite(ledPin, counter);
// print the current LED value in the serial for debugging purposes
Serial.print("LED: ");
Serial.println(counter);
}
/**
* Performs the action for button one.
*
* Has to be changed for the specific use case.
*/
void buttonOneAction() {
if (counter < 255) {
counter += 1;
}
}
/**
* Performs the action for button two.
*
* Has to be changed for the specific use case.
*/
void buttonTwoAction() {
if (counter > 0) {
counter -= 1;
}
}
/**
* Used to increase/decrease a counter when the corresponding button is pressed.
*/
void TC0_Handler()
{
// request static for some magic behind the curtain
TC_GetStatus(TC0, 0);
// variables used to determine if the corresponding button is pressed
bool buttonPressedOne = (digitalRead(buttonOnePin) == LOW);
bool buttonPressedTwo = (digitalRead(buttonTwoPin) == LOW);
// handles the plus button
if (buttonPressedOne){
timesPressedOne += 1;
}
else {
if (buttonOneActionPerformed) {
buttonOneActionPerformed = false;
}
timesPressedOne = 0 ;
}
// handles the minus button
if (buttonPressedTwo){
timesPressedTwo += 1;
}
else {
if (buttonTwoActionPerformed) {
buttonTwoActionPerformed = false;
}
timesPressedTwo = 0 ;
}
// performs button one action if button has been pressed long enough
if (timesPressedOne >= compareValue) {
if (!buttonOneActionPerformed) {
buttonOneAction();
}
buttonOneActionPerformed = true;
timesPressedOne = 0;
}
// performs button two action if button has been pressed long enough
if (timesPressedTwo >= compareValue) {
if (!buttonTwoActionPerformed) {
buttonTwoAction();
}
buttonTwoActionPerformed = true;
timesPressedTwo = 0;
}
}