Guten Tag,
Ich habe eine Frage. Wie kann ich den Code auf mehrere Reflexkoppler an einem Arduino anwenden?
Ziel ist es 8 oder mehr mit einem Arduino Uno (gleichzeitig) abzufragen. Mit einem Funktioniert es sehr gut. Ist auch unendfindlich gegen Fremdlicht.
int led_1 = 13;
int led_send_1 = 12;
int led_empf_1 = 11;
int merker_an = 0;
int merker_aus = 0;
bool merker_led = false;
bool zustand_1 = false;
unsigned long alte_Zeit = 0;
int intervall = 1;
void setup() {
Serial.begin (9600);
pinMode (led_1, OUTPUT);
pinMode (led_send_1, OUTPUT);
pinMode (led_empf_1, INPUT_PULLUP);
}
void loop() {
abfrage_ls();
auswertung_ls();
}
void abfrage_ls() {
if ((digitalRead (led_empf_1) == LOW) && (zustand_1 == false)) {
merker_aus ++;
alte_Zeit = millis();
digitalWrite (led_send_1, LOW);
zustand_1 = true;
//Serial.print ("Merker_aus = ");
//Serial.println (merker_aus);
}
if ((digitalRead (led_empf_1) == HIGH) && (zustand_1 == true)) {
merker_an ++;
alte_Zeit = millis();
digitalWrite (led_send_1, HIGH);
zustand_1 = false;
//Serial.print ("Merker_an = ");
//Serial.println (merker_an);
}
}
void auswertung_ls() {
if ((merker_aus == 3) || (merker_an == 2)&&(merker_led == false)) {
Serial.println ("LED An");
//alte_Zeit = millis();
merker_led = true;
//merker_aus = 0;
//merker_an = 0;
digitalWrite (led_1, HIGH);
}
if ((millis() - alte_Zeit >= intervall)) {
digitalWrite (led_1, LOW);
digitalWrite (led_send_1, HIGH);
merker_aus = 0;
merker_an = 0;
merker_led = false;
//Serial.println ("LED AUS");
}
}
Mit freundlichen Grüßen
Acki
Wäre doch schön, wenn du uns mitteilen könntest, welchen Sensor du verwendest.
Ein Link (Hyperlink zum Anklicken) ist da optimal.
Im übrigen, gleichzeitig wird nicht funktionieren, aber sehr schnell hintereinander, wenn dein Sketch das zulässt.
Hallo Dieter,
Es werden folgende Reflexkoppler verwendet:
ITR8307
Gruß Acki
Du brauchst für jeden Empfangs-Eingang einen digitalen Pin und wenn es deine Anwendung auch verlangt, für jeden Sender-Ausgang. Die Pins A0 - A5 kannst du auch als digitale Pins verwenden.
Musst du denn die Sende Led auch schalten ?
Ja soweit ist mir das klar.
Ich hatte es ja volgendender Masen gelöst. Die Sende LED wird eingeschaltet --> jetzt wird über die Empfangs LED geprüft ob sie eingeschaltet ist. Wenn Ja wird Zähler an um 1 erhöht wenn nein Springe wieder zum Anfang. Wenn ja schalte Sende LED aus und überprüfe mit Empfangs LED ob sie ausgeschalten ist (funktioniert nur wenn sich ein Objekt darüber befindet) Wenn ja zähle zum Zähler LED aus 1 dazu. Wenn nein dann springe wieder zum Anfang. Das wird dann 3 mal wiederholt und zum schluss werden die Zähler miteinander verglichen und ausgewertet.
Hatte auch nach einigen suchen diesen Code gefunden. Leider werden mit diesem nur sehr langsame Objekte erkannt.
http://trains4africa.co.za/wp-content/uploads/S88_IR_v130.txt
Ok, wenn du mit deinem Sketch klar kommst, musst du den doch nur auf die anderen Leds verteilen.
Acki1985:
Hatte auch nach einigen suchen diesen Code gefunden. Leider werden mit diesem nur sehr langsame Objekte erkannt.
http://trains4africa.co.za/wp-content/uploads/S88_IR_v130.txt
Naja nicht wirklich. Es werden nur sehr langsame Objekte erkannt. Finde aber nicht herraus warum. Deshalb habe ich es mit dem 1. code versucht. Dieser müsste jetzt aber auf 8 oder mehr Reflexkoppler erweitert werden. Finde da aber keinen Ansatz.
Acki1985:
Naja nicht wirklich. Es werden nur sehr langsame Objekte erkannt. Finde aber nicht herraus warum. Deshalb habe ich es mit dem 1. code versucht. Dieser müsste jetzt aber auf 8 oder mehr Reflexkoppler erweitert werden. Finde da aber keinen Ansatz.
Ich meinte ja auch deinen eigenen Sketch, bzw. den geposteten.
Den musst du doch nur mehrfach einsetzen und jeweils einen anderen Pin verwenden.
Noch besser geht es natürlich, wenn du die Abfrage der Reflex-Lichtschranke in einer Funktion durchführst, dann kannst du die mit geänderten Parameter mehrfach einsetzen und aufrufen.
Wenn das funktioniert, baust du es mit einer Funktion und startest diese mit angepassten Parameter.
Hm... wie meinst du das mit der Funktion?
Acki1985:
Hm... wie meinst du das mit der Funktion?
Dann sieh dir mal deine "void abfrage_ls();" an, das ist auch eine Funktion.
So baust du das auch auf, nur mit eigenem Namen.
Alles weiter findest du sicher im Web.
Ah ok. Ich glaube jetzt weis ich wie. Ich danke dir.
Acki1985:
Ah ok. Ich glaube jetzt weis ich wie. Ich danke dir.
Alles klar und gerne.
Wenn man es erst mal durchblickt hat, ist es auch kein Problem mehr.
Zeige einfach, wenn du nicht weiter kommst.