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.

Schritt für Schritt

25. September 2012

Der Input soll intuitiv funktionieren. Wird der Input links gedrückt geht auch der Output nach Links. Steht der Output auf einer Seite am Ende, ist er nicht weiter erhöhbar. Beim anschliessen der letzten 2 LEDs gabs probleme, da die gleichen Wiederstände wie bei den anderen Inputs des LED-Streifen nicht funktioniert haben. Der Code ist nicht sehr flexibel, funktioniert aber 😉
#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 LEFT 2 // Taster an digitalPin 2
#define RIGHT 4 // Taster an digitalPin 4

#define LIGHT7 7
#define LIGHT8 6

boolean delayerRight = false;
boolean delayerLeft = false;
int wert = 0;

void setup()
{
  Serial.begin(9600);

  pinMode(LATCH_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(DATA_PIN, OUTPUT);

  pinMode(LIGHT7, OUTPUT);
  pinMode(LIGHT8, OUTPUT);


  for ( int i = 0; i < 8; i++ )
  {
    registerWrite(i,LOW);   
  }

}

void loop()
{
  pinMode(LEFT, INPUT); // TasterPin als Input nutzen
  pinMode(RIGHT, INPUT); // TasterPin als Input nutzen

  if ( wert >= 11 )
  {
    wert = 10;
  } else if ( wert <= 0 )
  {
    wert = 0;
  }

  if (digitalRead(RIGHT) == HIGH && delayerRight == false)
  {
    Serial.println("Right High");
    ///////////////////////////////
    delayerRight = true;
    wert = wert++;
  } 
  else if (digitalRead(RIGHT) == LOW && delayerRight == true) {
    delayerRight = false;
  }

  if (digitalRead(LEFT) == HIGH && delayerLeft == false)
  {
    Serial.println("Left High");
    ///////////////////////////////
    delayerLeft = true;
    wert = wert - 1;
  } 
  else if (digitalRead(LEFT) == LOW && delayerLeft == true) {
    delayerLeft = false;
  }

  Serial.println(wert);
  switch ( wert )
  {
  case 0:
    break;

  case 1:
    registerWrite(0,HIGH);
    break;

  case 2:
    registerWrite(1,HIGH);
    break;

  case 3:
    registerWrite(2,HIGH); 
    break;

  case 4:
    registerWrite(3,HIGH); 
    break;

  case 5:
    registerWrite(4,HIGH);  
    break;

  case 6:
    registerWrite(5,HIGH); 
    break;

  case 7:
    registerWrite(6,HIGH); 
    break;

  case 8:
    registerWrite(7,HIGH);
    digitalWrite(LIGHT7, false);
    break;

  case 9:
    digitalWrite(LIGHT7, true);
    registerWrite(7,LOW); 
    digitalWrite(LIGHT8, false);  
    break;

  case 10:
    digitalWrite(LIGHT8, true);  
    digitalWrite(LIGHT7, false);
    break;

  default:
    break;

  } 
}

void registerWrite(int _whichPin, int _whichState)
{
  byte bitsToSend = 0; // Dieses Byte hat acht Bits also: 00000000
  digitalWrite(LATCH_PIN, LOW);
  bitWrite(bitsToSend, _whichPin, _whichState); // Hier wird das entsprechende Bit im Byte gesetzt (z.B. 00100000)
  shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, bitsToSend);
  digitalWrite(LATCH_PIN, HIGH);
}
VIDEO