26. September 2012
![2012-09-26-11.01](../../../../files/2012/09/2012-09-26-11.01.png)
#define LATCH_PIN 8 //Pin zu ST_CP vom 74HC595 #define CLOCK_PIN 12 //Pin zu SH_CP vom 74HC595 #define DATA_PIN 11 //Pin zu DS vom 74HC595 #define LED_9 6 #define LED_10 7 #define TASTER_PLUS 2 #define TASTER_MINUS 3 #define BRIGHTNESS A0</code> int lastButtonState[] = {1,1}; long lastDebounceTime = 0; // Die letzte Zeit als der Taster gedrückt wurde long timeSinceWait = 0; long debounceDelay = 20; // Die Verzögerung des Tasters int counter = 0; boolean buttonPlusPressed = false; boolean buttonMinusPressed = false; boolean wait = false; boolean press = false; boolean lookForWait = false; void setup() { pinMode(TASTER_PLUS, INPUT); digitalWrite(TASTER_PLUS, HIGH); pinMode(TASTER_MINUS, INPUT); digitalWrite(TASTER_MINUS, HIGH); pinMode(LATCH_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(DATA_PIN, OUTPUT); pinMode(LED_9, OUTPUT); pinMode(LED_10, OUTPUT); Serial.begin(9600); } void loop() { if(digitalRead(TASTER_PLUS) == LOW && buttonPlusPressed == false) { buttonPlusPressed = true; lastDebounceTime = millis(); timeSinceWait = millis(); } if(digitalRead(TASTER_MINUS) == LOW && buttonMinusPressed == false) { buttonMinusPressed = true; lastDebounceTime = millis(); timeSinceWait = millis(); } if(millis()-lastDebounceTime > debounceDelay && buttonPlusPressed == true && wait == false || millis()-lastDebounceTime > debounceDelay && buttonMinusPressed == true && wait == false) { // AKtion Serial.println("HERE"); lookForWait = true; if(buttonMinusPressed && counter < 15 ){ counter++; } if(buttonPlusPressed && counter > 0){ counter--; } Serial.print("counter: "); Serial.println(counter); // lastDebounceTime = millis(); wait = true; if(press){ wait = false; } } counter = map(analogRead(BRIGHTNESS), 50, 400, 0,15); if(millis()-timeSinceWait > 1000 && lookForWait){ wait = false; press = true; } registerWrite(counter, HIGH); if(digitalRead(TASTER_PLUS) == HIGH && buttonPlusPressed) { buttonPlusPressed = false; wait = false; press = false; lookForWait = false; Serial.println("FALSE"); } if(digitalRead(TASTER_MINUS) == HIGH && buttonMinusPressed) { buttonMinusPressed = false; wait = false; press = false; lookForWait = false; } } void registerWrite(int _whichPin, int _whichState) { byte bitsToSend1 = 0; // Dieses Byte hat acht Bits also: 00000000 byte bitsToSend2 = 0; digitalWrite(LATCH_PIN, LOW); digitalWrite(LED_9, LOW); digitalWrite(LED_10, LOW); if(_whichPin =8) { bitWrite(bitsToSend1, _whichPin-8, _whichState); } Serial.println(_whichPin); Serial.print(bitsToSend1, BIN); Serial.print(" "); Serial.print(bitsToSend2, BIN); Serial.println(); shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bitsToSend1); shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bitsToSend2); //shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bitsToSend2); /* if(_whichPin < 8){ bitWrite(bitsToSend1, _whichPin, _whichState); // Hier wird das entsprechende Bit im Byte gesetzt (z.B. 00100000) shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bitsToSend1); shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, 0); } if(_whichPin >= 8){ bitWrite(bitsToSend2, _whichPin, _whichState); // Hier wird das entsprechende Bit im Byte gesetzt (z.B. 00100000) shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, 0); shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bitsToSend2); } */ digitalWrite(LATCH_PIN, HIGH); }