PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Blinken in Progressing



Greensiver
02.11.2012, 23:06
Hi Leute!
Ich versuche eine Art RC-Car-Steuerrung für Aduino zu schreiben.
Bin jetzt beim Blinklicht angelangt.
Ich komme in Progressing gerade nicht weiter.

Ich hätte gedacht per z.B. incomingByte eine Schleife zu starten, die ein Blinkimpuls aussendet. Ich will aber aus der Schleife auch über incomingByte (aber diesmal ein anderes Byte) wieder herrauskommen, damit die Blinkerrei wieder aufhört (werdend des Blinkens sollte man auch noch fahren können). Und das für Links-Blink, Rechts-Blink und Warn-Blink.

Wer cool, wenn Ihr mir mit ein bischen Code aushelfen könntet, hab keinen Plan wie ich an dieses Problem herran gehen soll.:confused:
--> mit el. Schaltungen kann man das zwar umgehen, möchte es aber gern alles vom µC haben :)


PS: Rechtschreibbung ist immer nochnicht meine Stärke:rolleyes:

__________
Gruß Green

Bumbum
03.11.2012, 08:20
Hallo Greensiver,

du solltest deine Blink-Routinen in sogenannte Interrupts auslagern. Ich denke mit dem Suchbegriff "Interrupt" solltest du mal Google füttern und dich etwas einlesen. Es sollte recht einfach sein dann mit dem Datenblatt des µC eine LED per Interrupt blinken zu lassen.

Bei weiteren Fragen wird dir hier dann gerne wieder weiter geholfe.

Viele Grüße
Andreas

Greensiver
03.11.2012, 09:01
Nur mal vom Lesen her:


Bei einem Interrupt wird durch ein Ereignis (z.B. Timer, Signal von außen, ...) das Hauptprogramm loop() unterbrochen und ein vorab festgelegtes Unterprogramm ausgeführt. Nach Abarbeitung des Unterprogrammes wird das Hauptprogramm an der ursprünglichen Stelle weiter ausgeführt.

Das klingt ja so als ob ich beim Blinken nichts anderes machen könnte. Stimmt das?:confused: --> ist bei einer Autosteuerrung ungünstig, beim Blinken nicht fahren zu können:)
Ich recherchiere zwar noch, aber wer trotzdem gut, wenn mir jemand ein Beispiel zeigen könnte.

Bumbum
03.11.2012, 09:32
Das ist genau, dass was du suchst. Du unterbrichst kurz dein Hauptprogramm, um die LED im Interrupt ein- oder auszuschalten und kehrst dann wieder dorthin zurück. Das ganze verlassen und zurückkehren übernimmt dabei der µC für dich.

Das Stichwort Timer-Interrupt hilft dir weiter. In den Datenblättern der µC findest du dazu genügend Beispiele. Einfach einen Timer-Interrupt einrichten, der mit deiner gewünschten Blink-Frequenz aufgerufen wird (ich würde sagen ca. jede Sekunde)

Im Prinzip setzt du eine Variable, ob es blinken soll oder nicht, je nachdem welches Byte in deinem Hauptprogramm empfangen wurde.
Im Interrupt prüfst du dann diese Variable und schaltest dort die LED an oder aus.
Das Hin- und Hergespringe dabei übernimmt wie gesagt der µC.

Greensiver
03.11.2012, 09:56
Also sowas hier oder?




static volatile int interrupt0set; // Der Interrupt-Indikator

...

void interrupt0routine(void) { // Die Interrupt-Service-Routine
interrupt0set++; // Nur eine einzige Operation!
return; // Fertig!
}

...

void loop (void) {

if (interrupt0set) { // Indikator abfragen
// Interrupt bearbeiten
...
interrupt0set=0; // Fertig. Indikator zurücksetzen.
}

...

}

Bumbum
03.11.2012, 10:18
...eigentlich nicht sorry.

Du solltest erst mal versuchen eine LED (einen Ausgang) per Interrupt blinken zu lassen. Dazu würde ich mir im Datenblatt deines µC das Kapitel zu den Timer-Interrupts durchlesen und mithilfe der Beispiele dort den Interrupt so implementieren, dass er ca. jede Sekunde aufgerufen wird.
Wenn dies passiert ist und läuft kannst du die Interrupt-Routine so erweitern, dass der Ausgang der LED an- und abgeschaltet wird, jeweils abwechselnd nach jedem Aufruf.

Die Erweiterung und Anpassung an dein Programm ist dann nur noch ein kleines Stück.

Greensiver
03.11.2012, 10:34
Oje, bin leicht überfordert^^
Google hat nichts gescheites ausgespuckt, hab en bissel über Interrupts gelesen, nunja schlauer bin ich nochnicht geworden:(

Gibts den kein Codebeispiel?

i_make_it
03.11.2012, 10:50
1234567890

Günter49
03.11.2012, 11:06
Falls Du mit "Progressing" die Programmiersprache "Processing" meinst, schau mal hier:
http://www.jeremyblum.com/2011/03/07/arduino-tutorial-10-interrupts-and-hardware-debouncing/
Dort gibt es auch ein Code-Beispiel. Die Programme haben die Extension .pde. Scheinen Processing-files zu sein. Musst Du selber überprüfen, denn ich habe weder Ahnung von Processing noch vom Arduino.

Überhaupt scheinen alle Tutorials für Arduino und Processing interessant zu sein. Ab Tutorial 6 in Processing programmiert.
http://www.jeremyblum.com/category/arduino-tutorials/

Leider alles auf Englisch.

Gruß, Günter

Greensiver
03.11.2012, 12:31
Danke!
Ist ein guter Buchartickel, schön für Anfänger geschrieben!:Strahl
Mal sehen ob ich den Interrupt eingebastelt bekomme.

Thx i_make_it

@Günter49


PS: Rechtschreibbung ist immer nochnicht meine Stärke:rolleyes:
^^

Dass das in Englisch ist, is überhaupt kein Problem:)
Ich werde es mir gleich mal anschauen.

- - - Aktualisiert - - -

Hm.
@i_make_it

Ist zwar ganz interresannt. Der Teil beschäftigt sich aber ausschlieslich mit dem Externen Interrupt. für mich müsste aber der interne Relevant sein.

Bumbum
03.11.2012, 13:38
Gibts den kein Codebeispiel?

Doch! Darauf habe ich sogar schon mehrfach hingewiesen. --> Im Datenblatt des µC! ;-)

Greensiver
03.11.2012, 16:47
Ich komme irgentwie nicht klar.
Entweder wiederholt sich die schleife nicht, oder ich komme aus der nicht wieder raus...:(
und für den internernen Interrupt hab ich auch nocht soviel gefunden.

- - - Aktualisiert - - -

Was meinst du mit Datenblatt??
Ich hab ein Buch, dadrinn steht aber nicht viel über diesen Interrupt.

Nebenbei: Ich hab nen RoMeo (http://www.dfrobot.com/wiki/index.php/DFRduino_Romeo-All_in_one_Controller_%28SKU:DFR0004%29).
(Oder meinst du vieleicht sowas mit Datenblatt (klick auf RoMeo))

Und Programmieren tue ich den in Procressing.

Bumbum
04.11.2012, 12:54
Das Datenblatt zum Controller. In deinem Link steht, dass entweder ein Atmega 168 oder ein 328 verbaut ist. Das solltest du herausfinden, und dann auf www.atmel.com das passende Datenblatt finden. Dort findest du dann die Beispiele zu den Timer-Interrupts.