Hilfe bei IR Lichtschranke
|
07.07.2014, 06:49
Beitrag #25
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
Hi,
ich würde vorschlagen, dass du dir die Interrupt-Funktionalität in einem separaten Sketch erarbeitest. Starte mit der Doku auf dieser Seite: http://arduino.cc/de/Reference/AttachInterrupt Als Interrupt-Mode würde bei dir RISING passen, dann solltest du in deiner Interrupt-Routine (Handler, bzw. ISR) landen, wenn die Lichtschranke unterbrochen wird. Was kannst du dort machen? Dort solltest du dir die Zeit in einer Variable merken und ggf. noch ein Flag setzen, dass du drin warst. Die Zeit kannst du in deinem Fall mit micros() messen. Die Doku schreibst, dass die Zeit während der Interrupt-Routine nicht hochzählt. Daher wäre es sicherlich ganz gut, den ISR-Code nicht zu lang zu gestalten. Mein Vorschlag dahingegen, nur die entsprechenden micros() in der Rouine zu erfassen und in der normalen Programm-Hauptschleife diesen Wert zu verarbeiten. Hier kannst du solche Sachen machen wie: - entscheiden ob erster Wert oder zweiter und in entsprechenden Variablen zwischenspeichern - bei zweitem Wert entsprechend die Geschwindigkeit ausrechnen und anzeigen (Im Testprogramm erstmal über die serielle Schnittstelle) - Bei Timeout etc. in das Hauptmenü zurückspringen. Reicht das erstmal zum Starten? Gruß, Alex |
|||
07.07.2014, 07:52
(Dieser Beitrag wurde zuletzt bearbeitet: 07.07.2014 07:58 von cb_baer.)
Beitrag #26
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
Hi Alex, Danke erstmal für die Antwort. Den Link den du gepostet hast habe ich schon gelesen und auch teilweise verstanden. Ich habe aber Probleme damit das ganze umzusetzen. Ich hänge dabei die Zeit zwischenzuspeichern da ich nicht weiss wie ich das mit dem Interrupt zusammenbringe. Ich hab mir das Arduino Kochbuch besorgt und lese da schon eifrig aber das Ding hat 600 Seiten und ich beschäftige mich gerade mal 2 Wochen intensiv damit
![]() Hilfreich wäre ein Tut oder in Sketch in dem so etwas in der Art verwendet Wurde. Ich finde da versteht man die Zusammenhänge am besten. Etwas passendes woraus ich richtig schlau geworden bin war aber leider noch nicht dabei. Vlt muss ich im Buch mal ein paar Seiten Springen. Aber das mit dem Timeout ist eine gute Idee. soweit habe ich mich damit noch nicht gedacht ![]() Kann ich mir das ganze eigentlich wie eine Art funktion aufbauen die nur aufgerufen wird wenn ich dann einen Knopf drücke? Meinet Wegen, "Variabel1" und wenn ich den linken Knopf Drücke wird alles was in der "Variabel1" steht ausgefürt. Das müsste ja dann in der "void setup()" abgelegt werden. Richtig? |
|||
07.07.2014, 17:26
Beitrag #27
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
Hi,
falls das mit den Interrupts und so dir zu ungenau ist dann hätte ich dir hier noch einen Schaltungsvorschlag wo dann mit der pulsIn() Funktion zusammenspielen würde. Siehe Anhang. lg bk 1+1 = 10 ![]() ![]() |
|||
07.07.2014, 20:03
Beitrag #28
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
ist mit "IR1" und IR2" die fertigen IR Module gemeint? oder ein 3 poliger IR Transistor (wenn die so heissen) gemeint?
Ich habe mir nachdem das jemand vorgeschlagen hat, beides geholt und zur zeit die fertigen Module angeschlossen. und die geben mir ja schon ein richtiges High was ich über den Digitalen Eingang auslesen kann. |
|||
07.07.2014, 20:20
Beitrag #29
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
(07.07.2014 20:03)cb_baer schrieb: ist mit "IR1" und IR2" die fertigen IR Module gemeint? oder ein 3 poliger IR Transistor (wenn die so heissen) gemeint?genau die Module wo mal Eingangs erwähnt wurden. Man muß nur darauf achten das der Ausgangsimpuls bei passieren der LS Negativ ist. 1+1 = 10 ![]() ![]() |
|||
07.07.2014, 20:28
Beitrag #30
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
genau das ist er nicht, wenn der Ball die LS passiert sendet sie ein positives Signal. Ich wüsste auch nicht wie ich das umdrehen kann
|
|||
07.07.2014, 22:27
(Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2014 10:43 von Bitklopfer.)
Beitrag #31
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
(07.07.2014 20:28)cb_baer schrieb: genau das ist er nicht, wenn der Ball die LS passiert sendet sie ein positives Signal. Ich wüsste auch nicht wie ich das umdrehen kann Dann invertieren wir doch einfach die Eingänge und nehmen einen Schmitt-Trigger Baustein 4093 dazu was nochmals die Schaltflanken steiler macht. Die Widerstände R1+R2 würde ich auf alle Fälle reinmachen das bei offenen Eingängen nichts zu schwingen anfängt....CMOS ist da bei offenen Eingängen etwas anfällig dafür... Achja, und für die Zwei IC's die Stromversorgung nicht vergessen, für beide gilt Pin 7 = GND, Pin 14 = VCC in dem Fall 5V. 1+1 = 10 ![]() ![]() |
|||
09.07.2014, 20:58
(Dieser Beitrag wurde zuletzt bearbeitet: 09.07.2014 20:59 von cb_baer.)
Beitrag #32
|
|||
|
|||
RE: Hilfe bei IR Lichtschranke
So, ich bin gerade dabei und beschäftige mich mit der Interruppt Geschichte.
In einem einzelnem Sketch habe ich angefangen mit meinem LCD display und meinen beiden Lichtschranken zu spielen. #include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 4, 5, 6, 7); volatile int LS1 = LOW; volatile int LS2 = LOW; void setup() { lcd.begin(16, 2); Serial.begin(9600); attachInterrupt(0, Lichtschranke, RISING); attachInterrupt(1, Lichtschranke1, RISING); } void loop() { for (int i = 0; i < 1000; i++) { delay(1000); } } void Lichtschranke() { LS1 = !LS1; Serial.println("LS 1"); lcd.setCursor(0,0); lcd.print("Lichtschranke1"); } void Lichtschranke1() { LS1 = !LS1; Serial.println("LS 2"); lcd.setCursor(0,1); lcd.print("Lichtschranke2"); } So sieht das bisher aus. Nun Die Frage dazu: Beide Lichtschranken funktionieren und geben mir schon etwas auf dem Bildschirm aus. Aber ich bekomm es nicht hin dass die erste und 2 LS ihre Werte nehmen und miteinander vergleichen. UNd ich werde auch noch nicht ganz schlau aus dem teil { for (int i = 0; i < 1000; i++) { delay(1000); } } Ich habe noch keinen Leitfaden oder Text gefunden in dem näher auch die "for" befehle eingegangen wird. (ausser der Arduino.cc Seite) Kennt jemand von euch dazu ein gutes Werk oder kann mir erklären wie ich das mit den Werten machen kann? Und warum ist der Delay nötig? |
|||
|
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste