25. September 2012
Eine Eingabe/Ausgabe Situation, welche über zwei Taster und einen Bargraph erlaubt eine stufenweise Einstellung vorzunehmen. VIDEO CODE BEISPIEL 1:
#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 BUTTON_W 7
#define BUTTON_B 6
int counter = 1;
boolean buttonState_White = false;
boolean buttonState_Black = false;
long debounceDelay = 500; // Diese Zeit bestimmt die Verzögerung beim Drücken des Buttons
long lastDebounceTime = 0;
void setup()
{
Serial.begin(9600);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(BUTTON_W, INPUT);
pinMode(BUTTON_B, INPUT);
}
void loop()
{
int buttonStateW = digitalRead(BUTTON_W);
int buttonStateB = digitalRead(BUTTON_B);
// Serial.print(digitalRead(7));
if(buttonStateW == 0 && (millis()-lastDebounceTime)>debounceDelay && buttonState_White == false)
{
counter--; // Den counter um 1 erhöhen
if (counter > 9)
{counter = 9;}
glow();
lastDebounceTime = millis(); // Den aktuellen Zeitpunkt speichern
buttonState_White = true; // buttonState auf true setzen
}
if(buttonStateW == 1)
{
buttonState_White = false; // buttonState auf false setzen
}
if(buttonStateB == 0 && (millis()-lastDebounceTime)>debounceDelay && buttonState_Black == false)
{
counter++; // Den counter um 1 erhöhen
if (counter <=0)
{counter = 1;}
glow();
lastDebounceTime = millis(); // Den aktuellen Zeitpunkt speichern
buttonState_Black = true; // buttonState auf true setzen
}
if(buttonStateB == 1)
{
buttonState_Black = false; // buttonState auf false setzen
}
}
void glow(){
Serial.println(counter);
for(int i=0; i<counter; i++){
if (i < counter){
registerWrite(i, HIGH); // Entsprechende LED anmachen
delay(50);
}else if (i > counter){
registerWrite(i, LOW);
}
}
}
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);
//DATA_PIN: daten pin; CLOCK_PIN: timing; bitOrder: richtung; wert:high/low
digitalWrite(LATCH_PIN, HIGH);
if(_whichPin == 7){
digitalWrite(9, LOW);
digitalWrite(10,LOW);
}
if(_whichPin == 8){
digitalWrite(9, HIGH);
digitalWrite(10,LOW);
}
if(_whichPin == 9){
digitalWrite(9, LOW);
digitalWrite(10,HIGH);
}
}
CODE BEISPIEL 2:
#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 BUTTON_W 7
#define BUTTON_B 6
int bla =100;
int counter = -1;
boolean buttonState_White = false;
boolean buttonState_Black = false;
long debounceDelay = 500; // Diese Zeit bestimmt die Verzögerung beim Drücken des Buttons
long lastDebounceTime = 0;
long wechselZeit = 0;
void setup()
{
Serial.begin(9600);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(BUTTON_W, INPUT);
pinMode(BUTTON_B, INPUT);
}
void loop()
{
int buttonStateW = digitalRead(BUTTON_W);
int buttonStateB = digitalRead(BUTTON_B);
// Serial.print(digitalRead(7));
if(buttonStateW == 0 && (millis()-lastDebounceTime)>debounceDelay && buttonState_White == false)
{
counter--; // Den counter um 1 erhöhen
if (counter > 9){
counter = 9;
}
registerWrite(counter, HIGH);
lastDebounceTime = millis(); // Den aktuellen Zeitpunkt speichern
buttonState_White = true; // buttonState auf true setzen
wechselZeit = millis();
}
if(millis()-wechselZeit > 700 && buttonState_White == true){
counter--;
registerWrite(counter, HIGH);
wechselZeit = millis();
}
if(buttonStateW == 1)
{
buttonState_White = false; // buttonState auf false setzen
}
if(buttonStateB == 0 && (millis()-lastDebounceTime)>debounceDelay && buttonState_Black == false)
{
counter++; // Den counter um 1 erhöhen
if (counter <0)
{counter = 0;}
registerWrite(counter, HIGH);
lastDebounceTime = millis(); // Den aktuellen Zeitpunkt speichern
buttonState_Black = true; // buttonState auf true setzen
wechselZeit = millis();
}
if(millis()-wechselZeit > 700 && buttonState_Black == true){
counter++;
registerWrite(counter, HIGH);
wechselZeit = millis();
}
if(buttonStateB == 1)
{
buttonState_Black = false; // buttonState auf false setzen
}
Serial.println(counter);
}
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);
//DATA_PIN: daten pin; CLOCK_PIN: timing; bitOrder: richtung; wert:high/low
digitalWrite(LATCH_PIN, HIGH);
if(_whichPin == 7){
digitalWrite(9, LOW);
digitalWrite(10,LOW);
}
if(_whichPin == 8){
digitalWrite(9, HIGH);
digitalWrite(10,LOW);
}
if(_whichPin == 9){
digitalWrite(9, LOW);
digitalWrite(10,HIGH);
}
}