INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
"Programmierunterstützung" gesucht
12.02.2014, 10:39
Beitrag #1
"Programmierunterstützung" gesucht
Hallo Ihr,

bin noch ziemlich neu in der Arduino Welt. Meine Programmierkenntnisse sind auch noch nicht allzu fortgeschritten. Hatte in der Berufsschule vor einigen Jahren C "gelernt" also auch eher nur die Basics. Für mein jetziges Projekt ist aber zum Glück nicht so viel Programmierkönnen gefragt.

Würde gerne eure Ideen und Anregungen hören bzw. Hilfe in Anspruch nehmen Smile


Ich habe folgendes vor:
Eine GUI mit Java basteln, die einige Toggle Buttons hat.


[1]
[2]
[3]
[4]
[5]

Button 1, 2, 3, 4, 5 sollen die Toggle Buttons sein.

Wenn Button 1 gedrückt, läuft Programm 1 ab.
Wenn Button 2 gedrückt, läuft Programm 2 ab.
Wenn Button 3 gedrückt, läuft Programm 3 ab.
Wenn Button 4 gedrückt, läuft Programm 4 ab.
Wenn Button 5 gedrückt, läuft Programm 5 ab.


Button 1, 2, 3 und 5 sind zusammengehörend. d.h. Programm 5 ist aktiv, ich drücke auf Button 1 -> Programm 5 stoppt und Programm 1 läuft ab.
So soll auch mit den anderen Möglichkeiten Verfahren werden.

Programm 4 ist unabhängig von 1,2,3 und 5. d.h. Programm 4 Endet nur wenn Togglebutton 4 wieder gedrückt wird.


Könnt ihr mir hier bitte einen kleinen Denkanstoß geben, wie ich die 4 Programme "verschachteln" kann damit das so funktioniert wie ich möchte.

Arbeite ich da mit switch, case oder nehm ich eine schleife dafür? Falls Schleife, bitte noch sagen welche genau Smile

Bin noch recht frisch im Programmieren, daher bitte etwas Nachsicht für die vielleicht "doofe" Frage.

Mir reicht hier ein Ansatz wie ich das Programmieren sollte, damit das so funktioniert wie ich das haben möchte. In den Rest lese und arbeite ich mich dann noch ein! Smile

Ich hoffe Ihr versteht was ich vor habe Big Grin


Vielen Dank schonmal vorab! Angel
Gruß
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.02.2014, 22:54
Beitrag #2
RE: "Programmierunterstützung" gesucht
Hallo Stefan,
Zitat:Ich hoffe Ihr versteht was ich vor habe
Im wesentlichen schon, aallerdings sagst du
Zitat:Eine GUI mit Java basteln, die einige Toggle Buttons hat.
Und da liegt das Problem. Huh
Du wirst hier kaum jemanden finden der/die dir einen Java-Code vorschlägt.
Davon abgesehen sind natürlich schon die Konstrukte zur Steuerung des Programmablaufs in vielen Sprachen ähnlich.
Zitat:Arbeite ich da mit switch, case oder nehm ich eine schleife dafür? Falls Schleife, bitte noch sagen welche genau
Ob switch case oder mehrere If-Anweisungen hintereinander ist eher unerheblich. Das mit der Schleife ist schon relevanter. Der Arduino (um den gehts hier nun mal) arbeitet zB. mit der Loop() - Schleife (was eine schwachsinnige Formulierung meinerseits Smile ), aber ich habe in deiner Frage nix bzgl. Arduino gefunden HuhHuh Naja, un der versteht im wesentlichen ein Subset von C.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.02.2014, 08:54 (Dieser Beitrag wurde zuletzt bearbeitet: 13.02.2014 09:36 von stfN2128.)
Beitrag #3
RE: "Programmierunterstützung" gesucht
Hallo Ricardo,

danke für deine Antwort.

Um den Java Code ansich geht es mir hier gar nicht, ich hab nach etlichen weiteren Info`s zu Java und Arduino erstma eine andere Lösung gesucht und gefunden.
Ansich sollte erstmal das Grundprogramm funktionieren, den Rest kann ich dann nach und nach erweitern.

Ich möchte die verschiedenen Programmabläufe über die Digitalen PIN`s ablaufen lassen.
Also statt dem Toggle Button einfach eine Abfrage meiner PIN´s -> wenn PIN 1 HIGH dann läuft Programm 1 ab.
Wenn PIN 2 HIGH dann ist PIN 1 LOW (elektrisch gesehen natürlich auch) und Programm 2 startet.

Meine Frage wäre dann hier: Nehme ich dafür einen 4 Poligen Schalter?
Oder reicht ein Taster? Also ich drück auf Taster 1 PIN 1 registriert HIGH und Pogramm läuft ab.
Oder brauche ich PIN 1 dann die ganze Zeit HIGH bis ich ein anderes Programm ablaufen lassen will?

Die Frage bzgl. der Arduino Programmierung war eben, wie ich das Programm schreiben muss damit ich immer jedes Programm ablaufen lassen kann. Also angenommen Prog. 3 läuft, PIN 1 wird HIGH gesetzt und das Prog 3 stoppt und das Prog 1 startet. Bin mir eben nicht ganz sicher wegen der loop() dass das eine Endlosschleife ist, ist mir schon bewusst. Also wird auch ständig der PIN Status meiner 4 deklarierten Eingänge abgefragt und dementsprechend das entsprechende Programm dann aufgerufen? Muss ich da nichts weiter beachten als:

in "void setup()" habe ich hoehe0 - hoehe3 als input pins deklariert.

void loop()
...
if (hoehe0 == HIGH)
{
....Programmcode....
}
if (hoehe1 == HIGH)
{
.....Programmcode.....
}
if (hoehe2 == HIGH)
{
....Programmcode....
}
if (hoehe3 == HIGH)
{
....Programmcode....
}

Ist jetzt nur mal grob der Ablauf. Ich muss meinen Code mal noch ein wenig überarbeiten, werde den hier dann mal posten damit man sich vorstellen kann wie das ganze aussieht und was passieren soll.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2014, 08:18
Beitrag #4
RE: "Programmierunterstützung" gesucht
Hey,

ich würde das ganze vom ersten Ansatz her mit Interrupthandlern versuchen. Also die Flanken an deinen Eingängen auswerten und die jeweilige Service Routine (ISR) starten. Deine normale loop() ist dann immer im idle, der Rest über die Handler. Ob du das dann mit einem oder mehreren Tastern/Schaltern machst (positive/negative Flanken), bleibt dir überlassen. Ich würde es mit 4 Tastern machen und dann Prioritäten festlegen.

Achja, zu deinen ganzen Info's, PIN's etc...
Schau mal hier vorbei: LINK Wink

MfG demo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2014, 15:38 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2014 15:38 von rkuehle.)
Beitrag #5
RE: "Programmierunterstützung" gesucht
Hallo Stefan,

da habe ich dich wohl anfänglich mißverstanden.
Den Hinweis von demokrit kann du umsetzen wenn du einen Arduino Mega benutzt. Der stellt genügend Hardware-Interrupts zur Verfügung. Wenn du allerdings einen Arduino Uno einsetzt klappt das nicht, der bietet nur zwei HW-Interrupts.
Wenn du keine Interrupts benutzt würde ich die Buttons mit der Bounce-Library entprellen und so vorgehen:
Für jeden Abschnitt den du mit "...Programmcode..." beschreibst würde ich eine globale Variable setzen. Diese sollte bei Aufruf des jeweiligen Codes auf true gesetzt werden. Die Abfrage der Buttons müsste dann erweitert werden.
Hier mal eine "Code-Skizze":
Code:
boolean prog0=false;
boolean prog1=false;
boolean prog2=false;
boolean prog3=false;
void loop()
{
if (hoehe0 == HIGH)
{
prog0=true;
if (prog1==true) prog1=false;
if (prog2==true) prog2=false;
if (prog3==true) prog3=false;
}
if (hoehe1 == HIGH)
{
prog1=true;
if (prog0==true) prog0=false;
if (prog2==true) prog2=false;
if (prog3==true) prog3=false;
}
// usw..
if (prog0==true) do_prog0();
if (prog1==true) do_prog1();
// usw...
}
void do_prog0()
{
...programmcode...
}
void do_prog1()
{
...programmcode...
}
// usw...

Ich denke so könnte es klappen.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
14.02.2014, 20:56 (Dieser Beitrag wurde zuletzt bearbeitet: 14.02.2014 21:11 von stfN2128.)
Beitrag #6
RE: "Programmierunterstützung" gesucht
Hallo demo,

danke für deinen Vorschlag. Aktuell habe ich einen Uno, den würde ich für dieses Projekt auch gerne wenn möglich benutzen. Daher fällt das wegen den 2 Interrupts leider schonmal weg.

Bezüglich deines Links: Eigentlich weiß ich, dass es falsch ist Big Grin Hab das auf der Arbeit nebenbei geschrieben und irgendwie nicht so wirklich drüber nachgedacht. Aber danke für deinen Hinweis Smile


@Ricardo
Vielen Dank für die Mühe und die Idee, so hört sich das wirklich gut an. Nur was genau ist mit der "Bounce Library" gemeint und in wie fern entprellen?
Wie gesagt: ich bin noch Recht neu in der Arduino Welt und in der Programmierwelt leider auch noch mehr so "Laie" Big Grin
Ich arbeite dran einen besseren Durchblick zu bekommen^^

Meinen Code werde ich auf jeden Fall mal so umbauen wie du das vorgeschlagen hast! Nochmals vielen Dank dafür!!Wink

Gruß
Stefan



@eben mal kurz google bemüht:
Grob weiß ich nun was die bounce library ist, gibt es da Zufällig ein deutsches Tutorial o.ä. ?
Ansonsten muss ich morgen mal ein wenig das Hirn anstrengen, jetzt gehts mit Freundin auf die CouchRolleyes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2014, 10:41
Beitrag #7
RE: "Programmierunterstützung" gesucht
Hallo Stefan,

ich habe mal den Code um die Debounce-Funktionen erweitert und entsprechend kommentiert.
Dadurch sollte ersichtlich sein wie die Debounce-Lib arbeitet.
Generell ist diese Lib dazu gedacht das Verhalten von mechanischen Tastern/Buttons so zu verarbeiten, dass ein für das Programm eindeutiger Status (geöffnet/geschlossen) ermittelt werden kann. Dazu etwas lesen kann man ua. hier:
http://popovic.info/html/arduino/arduino...#Debouncen

Hier der Code:
Code:
// Bounce - Lib einbinden -zu finden hier:  https://github.com/thomasfredericks/Bounce-Arduino-Wiring/archive/master.zip
#include <Bounce.h>
// Hier die Variablen der Pins an denen die Buttons hängen (bei dir  hoehe0 - hoehe3) Pinnummern anpassen
const int hoehe0 = 10;
const int hoehe1 = 11;
const int hoehe2 = 12;
const int hoehe3 = 13;
// Hier werden die "Debounce-Instanzen" der Pins deklariert
// die 10 bedeutet, dass über eine Zeit von 10 ms der Button/Pin abgefragt wird.  Nach persönlicher "Haptik" anpassen!
Bounce deb_hoehe0 = Bounce(hoehe0, 10);
Bounce deb_hoehe1 = Bounce(hoehe1, 10);
Bounce deb_hoehe2 = Bounce(hoehe2, 10);
Bounce deb_hoehe3 = Bounce(hoehe3, 10);
// Variablen für die Funktionssteuerung
boolean prog0 = false;
boolean prog1 = false;
boolean prog2 = false;
boolean prog3 = false;
void setup() {
}
void loop() {
  // Wenn sich der Status einer der Pins/Buttons geändert hat
  if (deb_hoehe0.update() || deb_hoehe1.update() || deb_hoehe2.update() || deb_hoehe3.update())
  {
    // Wenn Pin/Button auf HIGH geht
    if (deb_hoehe0.risingEdge())
    {
      prog0 = true;
      if (prog1 == true) prog1 = false;
      if (prog2 == true) prog2 = false;
      if (prog3 == true) prog3 = false;
    }
    if (deb_hoehe1.risingEdge())
    {
      prog1 = true;
      if (prog0 == true) prog0 = false;
      if (prog2 == true) prog2 = false;
      if (prog3 == true) prog3 = false;
    }
    if (deb_hoehe2.risingEdge())
    {
      prog2 = true;
      if (prog0 == true) prog0 = false;
      if (prog1 == true) prog1 = false;
      if (prog3 == true) prog3 = false;
    }
    if (deb_hoehe3.risingEdge())
    {
      prog3 = true;
      if (prog0 == true) prog0 = false;
      if (prog1 == true) prog1 = false;
      if (prog2 == true) prog2 = false;
    }
    // Je nachdem welche Variable true ist wird das entsprechende Programm ausgeführt
    if (prog0 == true) do_prog0();
    if (prog1 == true) do_prog1();
    if (prog2 == true) do_prog2();
    if (prog3 == true) do_prog3();
  }
}
void do_prog0()
{
  // ...programmcode...
}
void do_prog1()
{
  // ...programmcode...
}
void do_prog2()
{
  // ...programmcode...
}
void do_prog3()
{
  // ...programmcode...
}

Hoffe das hilft dir weiter.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.02.2014, 10:09
Beitrag #8
RE: "Programmierunterstützung" gesucht
Hallo Ricardo,

vielen vielen Dank, dass du dir die Mühe gemacht hast mit dem Code! Blush
Das hilft mir wirklich sehr viel weiter, habe jetzt mal umgebastelt das ganze. Wollte nun mal testen, bekomme aber eine Fehlermeldung:

'Bounce does not name a type'

Die Beispiele der Bounce Lib funktionieren. Habe auch schon mit #<Bounce2.h> probiert, leider selbe Fehlermeldung Sad

Hast du hier evtl. noch eine Idee an was es liegen kann?


Vielen lieben Dank vorab und viele Grüße
Stefan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 452 22.08.2016 08:07
Letzter Beitrag: b3ta
  Programmierer gesucht (einfaches Uni-Projekt) grt35a 2 272 12.08.2016 11:36
Letzter Beitrag: grt35a
  Grundlagen zur UART Kommunikation gesucht... torsten_156 10 888 16.12.2015 22:26
Letzter Beitrag: Bitklopfer
  Fehler gesucht bergfrei 6 1.177 07.08.2015 06:28
Letzter Beitrag: bergfrei
  Hobby Programierer gesucht gegen Entgelt. Haustechno 30 2.922 05.08.2015 19:31
Letzter Beitrag: Haustechno
  Programmierer gesucht SLY 5 1.508 17.07.2015 12:46
Letzter Beitrag: SLY
  Hilfe für Programmänderung benötigt/gesucht! Philipp.macht.Fotos 13 1.789 16.07.2015 17:16
Letzter Beitrag: HaWe
  Linien Diagramm Lib gesucht Thrillhouse 1 705 30.05.2015 21:59
Letzter Beitrag: Scherheinz
  gesucht: C-Funktion zum Einfügen eines Teilstrings in einen größeren HaWe 1 863 25.05.2015 10:30
Letzter Beitrag: HaWe
  Alternative zu delay gesucht Gelegenheitsbastler 3 1.231 28.03.2015 19:51
Letzter Beitrag: Gelegenheitsbastler

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste