Lieber Besucher, herzlich willkommen bei: RCLine Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

BOcnc

RCLine Team

Wohnort: 26349 Jade

  • Nachricht senden

61

Mittwoch, 6. Dezember 2017, 21:46

Am einfachsten würde das mit bool gehen. Ich weis jetzt nicht ob es bei Arduino groß oder klein geschrieben wird.

Man kann das aber auch so machen

if((A == 0) && (B == 0) && (C == 0)) SequenzA();
if((A == 1) && (B == 0) && (C == 0)) SequenzB();
if((A == 0) && (B == 1) && (C == 0)) SequenzC();

& ist bitweise
&& bei Verknüpfung von false und true

A==0 ist entweder richtig oder falsch

habe es berichtigt
Ich habe nicht genug Geld um billig einzukaufen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BOcnc« (7. Dezember 2017, 08:41)


BOcnc

RCLine Team

Wohnort: 26349 Jade

  • Nachricht senden

62

Mittwoch, 6. Dezember 2017, 22:02

Wenn die 3 Schalter auf einen Port sind kann man auch den Port in A einlesen. Mit & die Bits von den Tastern rausfiltern. A&=0x....

Bei 3 Schalter würde ich das mit if machen.

Bei mehr mit switch.

Switch(A)
{
case ...:
....
break;
case.....



Default:

}

musst du dir mal ansehen
Ich habe nicht genug Geld um billig einzukaufen.

Klaus(i)

RCLine Team

Wohnort: Achim b. Bremen

  • Nachricht senden

63

Mittwoch, 6. Dezember 2017, 22:24

Wenn, wie in diesem Fall, nur jeweils eine von 3 Optionen gewählt werden soll, würde ich einen Drehschalter nehmen und auf drei Eingänge schalten.
Möglich wäre auch mit dem Drehschalter eine Widerstandskaskade zu schalten und eine analoge Spannung an einem Port auszulesen und zu interpretieren.

Gruß, Klaus
-

BOcnc

RCLine Team

Wohnort: 26349 Jade

  • Nachricht senden

64

Mittwoch, 6. Dezember 2017, 22:33

Das muss übrigens so aussehen wenn ich mich nicht täusche

if((A == 0) && (B == 0) && (C == 0)) SequenzA();
if((A == 1) && (B == 0) && (C == 0)) SequenzB();
if((A == 0) && (B == 1) && (C == 0)) SequenzC();
Ich habe nicht genug Geld um billig einzukaufen.

65

Mittwoch, 6. Dezember 2017, 22:46

Hab mir eben mal alles durchgelesen.

- Fallunterscheidung in C bzw C++ am besten mit switch.
- Warum Drei Stufen Schalter? Bernd, gehts dir um eine hart verdrahtete Loesung am Arduino oder willst du ueber Sender / Empfaenger schalten?
Gruss
Thomas
🖖
No sé donde voy. pero estoy seguro de que yo llegue.

Daesh no tenim por!!!

a_rueckert

RCLine User

Wohnort: Kaiserslautern / Germany

Beruf: Software Engineer

  • Nachricht senden

66

Mittwoch, 6. Dezember 2017, 23:13

Wenn das nur ein/aus Entscheidungen sind, gibt es noch nen anderen Trick:

Du kannst das als Bits in einem Byte kodieren.

Also A bekommt Bit 0, also den Wert 1.
B bekommt Bit 1, also den Wert 2.
C bekommt Bit 2, also den Wert 4.

http://www.arndt-bruenner.de/mathe/Allge…inaersystem.htm

Jetzt kannst Du A,B und C in _einer_ Zahl kodieren, und die Abfrage in _einem_ switch-case erledigen:

switch(wert) {
case 1: Subprogramm1(); break;
case 2: Subprogramm2(); break;
...


Ist Prinzip das, was BOcnc mit dem Port einliest. Problem kann nur sein, wenn mehr als ein Bit gesetzt wurde.
Heli: Twister CP V2,Carbooon CP,T-Rex 450 S-CF,CopterX,T-Rex 600 CF,T-Rex 600 ESP,DF64C
Fläche: Jede Menge Flächenmodelle aus alten Tagen
Futaba FX 18 V2, Robbe Terra Top

Flat

RCLine User

Wohnort: Raum Hannover und zunehmend Raum Hamburg

Beruf: Angestellter auf Lebenszeit bei der Deutschen Rentenversicherung

  • Nachricht senden

67

Mittwoch, 6. Dezember 2017, 23:14

Moin Thomas,

hat mal nichts mit RC zu tun.
Ich möchte nur Hardwaremässig wählen welche der drei Sequenzen bei Tastendruck vom Arduino abgearbeitet wird
viele Grüsse

Bernd

Das Ganze ist mehr als die Summe seiner Teile (Aristoteles)

Die Anrede "Jungs" gilt im Rahmen der Vereinfachung für Personen beiderlei Geschlechts. :D

68

Mittwoch, 6. Dezember 2017, 23:30

Moin Bernd

Als du willst drei Sequenzen bzw. alles aus wenn ich das richtig verstanden habe.

Dann ist evtl. das mit dem Drehschalter von Klaus plus einem An/Aus Taster nicht so verkehrt.
Alternativ 4 Taster.
Einer fuer alles Aus/An.
Die anderen drei fuer die Sequenzen.

Schoen ist die Loesung nicht. Weil du zuviele Ports brauchst.
Evtl. auch alternativ mal ueber PWM nachdenken.
Gruss
Thomas
🖖
No sé donde voy. pero estoy seguro de que yo llegue.

Daesh no tenim por!!!

Flat

RCLine User

Wohnort: Raum Hannover und zunehmend Raum Hamburg

Beruf: Angestellter auf Lebenszeit bei der Deutschen Rentenversicherung

  • Nachricht senden

69

Mittwoch, 6. Dezember 2017, 23:47

Wie ich das realisiere, ob Dreh, Kipp, Dil-Schalter ist völlig egal.
Es geht erst mal um die Funktion.
IOs habe ich genug, mehr als oben geschrieben soll er nicht können.
viele Grüsse

Bernd

Das Ganze ist mehr als die Summe seiner Teile (Aristoteles)

Die Anrede "Jungs" gilt im Rahmen der Vereinfachung für Personen beiderlei Geschlechts. :D

70

Mittwoch, 6. Dezember 2017, 23:59

Dann ists aber wirklich einfach. Einfach auf die Inputs reagieren.
Eine Sequenz schaltet alle weiteren ab.
Und ein komplett Ein/Aus.
Das Hexenwerk wurde bereits beschrieben. Und du kannst auch mehrere Inputs kombinieren wenn du das fuer die Sequenzen brauchst.
Gruss
Thomas
🖖
No sé donde voy. pero estoy seguro de que yo llegue.

Daesh no tenim por!!!

haschenk

RCLine User

Beruf: Dipl. Ing.

  • Nachricht senden

71

Donnerstag, 7. Dezember 2017, 20:43

Hallo,

@Werner
Nach Studium aller Quellen: Ja, es ist so, wie du sagst. An "switch" kann man nur eine Variable übergeben.
Man könnte nun (mit if- Bedingungen...) natürlich so eine Variable erzeugen. aber statt dessen dann kann man an die if-Bedingungen auch gleich die Anweisungs-Blöcke dranhängen, braucht switch also nicht mehr. Vielleicht wird durch das "Zwischenschalten" der Variablen das Programm etwas übersichtlicher strukturiert.

@Bernd, Waspy
ich hänge unten mal eine kleines Demo zum Gebrauch von "pulseIn" (mit timeout), sowie den Umgang mit den Fallunterscheidungen an.
Damit nicht alle Formatierungen vollends versaut werden, und damit man es hier anhängen kann, als einfaches Textfile. Einfach das "txt" in der Extension durch "ino" ersetzen; dann müsste es in der Arduino-IDE funktionieren. Auch die serielle Ausgabe der Impulslänge ist recht nützlich.

Gruß,
Helmut
»haschenk« hat folgende Datei angehängt:

BOcnc

RCLine Team

Wohnort: 26349 Jade

  • Nachricht senden

72

Donnerstag, 7. Dezember 2017, 20:59

Danke Helmut.
Hoffe du hast das nicht nur für mich gemacht sondern auch für dich.

Gruß
Werner
Ich habe nicht genug Geld um billig einzukaufen.

Flat

RCLine User

Wohnort: Raum Hannover und zunehmend Raum Hamburg

Beruf: Angestellter auf Lebenszeit bei der Deutschen Rentenversicherung

  • Nachricht senden

73

Donnerstag, 7. Dezember 2017, 21:16

Danke für eure Unterstützung.
Heute konnte ich nicht weitermachen. Mein Testaufbau ist suboptimal weil beim wegräumen immer mal wieder ein paar Verbindungen "rausrutschen".
Also wird morgen das Steckbrett und der UNO auf eine kleine Plastikplatte montiert. Dann geht's weiter.
viele Grüsse

Bernd

Das Ganze ist mehr als die Summe seiner Teile (Aristoteles)

Die Anrede "Jungs" gilt im Rahmen der Vereinfachung für Personen beiderlei Geschlechts. :D

Klaus(i)

RCLine Team

Wohnort: Achim b. Bremen

  • Nachricht senden

74

Donnerstag, 7. Dezember 2017, 21:20

Damit nicht alle Formatierungen vollends versaut werden

Wenn man Beispielcode im Editor als PHP-Quelltext (Symbol: ) einfügt, dann wird er auch formatiert, mit leichten Unzulänglichkeiten, dargestellt.

Beispiel:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void setup()
{
  Serial.begin(9600);
   
  //http://playground.arduino.cc/Code/PwmFrequency
  #if defined (PIN_SIGNAL_HW)
    setPwmFrequency(PIN_SIGNAL_HWPWM_5_6);    //60Hz
  #endif
  #if defined (PIN_SIGNAL_HWA)
    setPwmFrequency(PIN_SIGNAL_HWAPWM_9_10);  //30Hz Alternativ
  #endif
  setPwmFrequency(PIN_SIGNAL_DCPWM_3_11);   // 4kHz
 
  Serial.print("$CLS#");
  Serial.print("$Y0,X0#  Eisenbahn  ");
 }


Gruß, Klaus
-

haschenk

RCLine User

Beruf: Dipl. Ing.

  • Nachricht senden

75

Donnerstag, 7. Dezember 2017, 22:41

Danke für den Hinweis.

Gruß,
Helmut

76

Freitag, 8. Dezember 2017, 18:26

Das hier mal als Pseudocode.
Sollte mit dem Arduino gehen.

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
result String("");
result += digitalRead(pin1);
result += digitalRead(pin2);
result += digitalRead(pin3);
result += digitalRead(pin4);
switch(result) {
    case "0000":
        break;
    case "1000":
        // Toggle on/off
        break;
    case "0100":
        // switch all off
        // start sequence one
        break;
    case "0010":
        // switch all off
        // start sequence two
        break;
    case "0001":
        // switch all off
        // start sequence three
        break;
}
Gruss
Thomas
🖖
No sé donde voy. pero estoy seguro de que yo llegue.

Daesh no tenim por!!!

hsh

RCLine User

Wohnort: Österreich

  • Nachricht senden

77

Freitag, 8. Dezember 2017, 20:33

So mächtig ist Arduino (zumindest mit v1.8.4) dann doch noch nicht. Der avr-gcc im Unterbau wird sich berechtigterweise beschweren, da er als Datentyp Integer erwartet [1]. Allerdings könnte man mit den Bitoperatoren die verschiedenen Zustände problemlos in einem Byte kodieren und dann zwischen den 2^3 Kombinationen unterscheiden, wie ja schon geschrieben wurde [2].

Quellcode

1
2
3
4
switch(result) {
         ^
exit status 1
switch quantity not an integer

[1] https://www.arduino.cc/reference/en/lang…ure/switchcase/
[2] Arduino Anfängerfragen
mfg Harald

haschenk

RCLine User

Beruf: Dipl. Ing.

  • Nachricht senden

78

Freitag, 8. Dezember 2017, 20:43

Hallo Thomas,

ich denke, daß das ncht funktioniert.
Angenommen, jeder deiner pins ist mit einem Kanalausgang des Empfängers verbunden:
Dann liegt an jedem der Pins ein Hi-Pegel an (zwischen ca. 1 und 2 ms lang), aber zu unterschiedlichen Zeitpunkten.

Da (im Sinne der digitalen Logik) der Unterschied zwischen "1" und "0" eines Impulses an einem Kanalausgang von dessen Länge dargestellt wird, wäre eine komplizierte Abtastung nötig; erheblich schwieriger als z.B. eine übliche serielle Schnittstelle.

Gruß,
Helmut

79

Freitag, 8. Dezember 2017, 21:44

Er hat aber keinen Empfaenger. Bernd will nur mit Hardware schalten. Und da liefert die digitalRead HIGH oder LOW.
:w

Wenn er es mit PWM loesen will schaut die Sache natuerlich anders aus.
Gruss
Thomas
🖖
No sé donde voy. pero estoy seguro de que yo llegue.

Daesh no tenim por!!!

BOcnc

RCLine Team

Wohnort: 26349 Jade

  • Nachricht senden

80

Freitag, 8. Dezember 2017, 21:48

Das ist hier mit dem Empfänger angefangen.
Dann ist Bernd eingestiegen und will Schalter einlesen.
Ich habe nicht genug Geld um billig einzukaufen.