Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

BitShifting mit zwei Register und 16 LEDs

26. September 2012

Als zweite und doch auch komplexere Aufgabe habe ich mir die Verbindung von zwei Schieberegister vorgenommen. Ein Lichtsensor misst die Helligkeit, deren Wert wiederum die Anzeige auf der LED-Reihe steuert. Kniffe gab es beim Ansteuern des zweiten Schieberegisters. Lösung siehe Code, mehr kann ich leider nicht dazu sagen.

 #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);

}

&nbsp;