Hi,
ich versuche gerade mein Sensor, den ich im letzten Post gebaut habe zu erweitern
(http://arduino.cc/forum/index.php/topic,110628.0.html),
damit ich später einmal mehrere Sensoren gleichzeitig laufen lassen kann.
Den 74hc165 habe ich bei Conrad bestellt. Leider sind im Datenblatt widersprüchliche Informationen zu entnehmen:
http://www.produktinfo.conrad.com/datenblaetter/150000-174999/164453-da-01-en-74HC165.pdf
Schaubild PIN CONNECTIONS (Seite 1):
Clock Pin 2
Complementary Output PIN 7
Serial Output PIN9
Schaubild PIN DESCRIPTION (Seite 3):
Clock Pin 9
Complementary Output PIN 2
Serial Output PIN 7
Ich vermute mal Pin Description ist die richtige Belegung?!
Um die Sensoren auszulesen habe ich mir folgendes überlegt:
Ich nehme über den 8 Bit Schieberegister die Signale auf. Das Signal kann nur High oder Low sein demzufolge würde ich mit 8 Sensoren an einem 74hc165 256 Kombinationen auslesen können.
Werden nun zum Beispiel Signale am Eingang 1 und 4 wahrgenommen sollte der Wert 00001001 eingehen (über den ShiftIn Befehl?). Mit diesem Wert würde ich dann ein genauen Befehl an Leds zuweisen die bei bestimmten Werten anspringen sollen, . Hab ich das Prinzip richtig verstanden? Ich bin mir nicht so sicher.. Um die Schaltung zu testen habe ich eine Led am Pin 3 angebracht die aufleuchten soll, wenn der Sensor ein Signal registriert.
Mein Code => Zuerst die Deklaration des Schieberegister und der Led:
const int dataPin = 11;
const int clockPin = 12;
const int latchPin = 13;
const int ledPin = 3;
byte switchVar1 = 72; //01001000 habe gelesen man sollte es möglich zuerst nicht auf null lassen, da es zu Problemen kommen kann
void setup() {
Serial.begin(9600);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
pinMode(ledPin, OUTPUT);
}
Soweit ok denke ich. Jetzt die Loop-und ShiftIn Funktion (soll ich diese Überhaupt benutzen? Wie genau programmiere ich sie damit sie genauso agiert wie oben beschrieben?). Ich finde wenige Gute Anleitungen, die meisten sind für den 74hc595. Ich habe jetzt alles irgendwie versucht aber so richtig klappen will es nicht. Der Sensor funktioniert, zumindest ging die Led kurz aus, wenn ich in die nähe der IR LED komme aber sonst Blinkt sie nur wild herum:
void loop() {
digitalWrite(latchPin,0);
delayMicroseconds(20);
digitalWrite(latchPin,1);
switchVar1 = shiftIn(dataPin, clockPin);
delay (1);
if (switchVar1>250) {
digitalWrite(ledPin, LOW);
}
else {
digitalWrite(ledPin, HIGH);
}
}
byte shiftIn(int myDataPin, int myClockPin) {
int i;
int temp = 0;
int pinState;
byte myDataIn = 0;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, INPUT);
for (i=7; i>=0; i--)
{
digitalWrite(myClockPin, 0);
delayMicroseconds(0.2);
temp = digitalRead(myDataPin);
if (temp) {
pinState = 1;
myDataIn = myDataIn | (1 << i);
}
else {
pinState = 0;
}
digitalWrite(myClockPin, 1);
}
return myDataIn;
}