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:
  • 2 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Unterschiedliche Programme durch Switch/ Case
27.09.2016, 20:45
Beitrag #17
RE: Unterschiedliche Programme durch Switch/ Case
Zu der ursprünglichen Frage..performanter/einfacher wäre das so:

p1 bis px als boolsche deklarieren und am Anfang der Loop die boolschen setzen:
p1 = digitalRead(pin1)==HIGH;
p2 = digitalRead(pin2)==HIGH;
usw.

Aus deinem Block wird dann:
if (!P1 && !P2 && !P3 && !P4)var == 1;
else if(P1 && !P2 && !P3 && !P4) var == 2;
else if (!P1 && P2 && !P3 && !P4) var == 3;
else if (P1 && P2 && !P3 && !P4) var == 4;
else var = 5;

Ist schon mal übersichtlicher Wink Durch Else If wird der If-Block abgebrochen, wenn ein Zustand true erreicht - ansonsten wird jede if Abfrage durchgeführt - auch wenn die erste schon var gesetzt hat.
Die geschweiften klammern kannst du dir bei einer Anweisung übrigens sparen Smile
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 21:23
Beitrag #18
RE: Unterschiedliche Programme durch Switch/ Case
Hab da mal was geschrieben ... Würde da deine Verbesserung noch Sinn machen?



int outPin6 = 6;
int inPin7 = 7;
int inPin8 = 8;
int inPin9 = 9;
int inPin10 = 10;
boolean var6 = 0;
boolean var7 = 0;
boolean var8 = 0;
boolean var9 = 0;
boolean var10 = 0;

void setup() {
pinMode(outPin6, OUTPUT);
pinMode(inPin7, INPUT_PULLUP);
pinMode(inPin8, INPUT_PULLUP);
pinMode(inPin9, INPUT_PULLUP);
pinMode(inPin10, INPUT_PULLUP);
// put your setup code here, to run once:
Serial.begin(9600);

}

void loop() {


var6 = digitalRead(outPin6);
var7 = digitalRead(inPin7);
var8 = digitalRead(inPin8);
var9 = digitalRead(inPin9);
var10 = digitalRead(inPin10);

if(var7== HIGH && var8== HIGH && var9== LOW && var10== LOW );

{

Serial.println("P1");
delay(2000);


}
if(var7== LOW && var8== HIGH && var9==LOW && var10==LOW );

{

Serial.println("P2");
delay(2000);

}
if(var7== HIGH && var8==LOW && var9==LOW && var10==LOW );

{

Serial.println("P3");
delay(2000);

}
if(var7==LOW && var8== LOW && var9==LOW && var10==LOW );

{
Serial.println("P4
#´+
");
delay(2000);


}
if(var7== HIGH && var8== HIGH && var9== HIGH && var10== LOW );

{
Serial.println("");
delay(2000);


}
if(var7==LOW && var8==HIGH && var9== HIGH && var10== LOW );

{



}
if(var7== HIGH && var8==LOW && var9== HIGH && var10==LOW );

{



}
if(var7==LOW && var8== LOW && var9== HIGH && var10==LOW );

{



}
if(var7== HIGH && var8== HIGH && var9==LOW && var10== HIGH );

{



}
if(var7==LOW && var8==HIGH && var9== LOW && var10== HIGH );

{



}
if(var7== HIGH && var8==LOW && var9== LOW && var10== HIGH );

{



}
if(var7==LOW && var8== LOW && var9== LOW && var10== HIGH );

{



}
if(var7== HIGH && var8== HIGH && var9== HIGH && var10== HIGH );

{



}
if(var7== LOW && var8== HIGH && var9== HIGH && var10== HIGH );

{



}
if(var7== HIGH && var8== LOW && var9== HIGH && var10== HIGH );

{



}
if(var7== LOW && var8== LOW && var9== HIGH && var10== HIGH );

{



}


// put your main code here, to run repeatedly:

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 21:30 (Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2016 21:57 von hotsystems.)
Beitrag #19
RE: Unterschiedliche Programme durch Switch/ Case
(27.09.2016 21:23)SpeedShifter schrieb:  Hab da mal was geschrieben ... Würde da deine Verbesserung noch Sinn machen?

Ja, durch die Verwendung von Code-Tags, da wird der Sketch übersichtlicher dargestellt und besser lesbar.
Das machst du mit der Schaltfläche # bzw. "[*code]" vor und "[*/code]" hinter dem Sketch, aber ohne den * (Stern).

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 22:21 (Dieser Beitrag wurde zuletzt bearbeitet: 27.09.2016 22:22 von AlphaRay.)
Beitrag #20
RE: Unterschiedliche Programme durch Switch/ Case
Ehm...du hast die als boolean deklariert - fragst aber low/high ab. Zudem hat boolean den status false bzw. true:

aus:
boolean var6 = 0;
boolean var7 = 0;
boolean var8 = 0;
boolean var9 = 0;
boolean var10 = 0;

wird:
boolean var6,var7,var8,var9,var10;

Die werden schon mit false initialisiert. Zudem setzt du diese explizit, weshalb eine Initialisierung entfällt.
Gewöhne es dir auch an sprechende Variablennamen zu geben - var steht für "variable". Das ist ziemlich allgemein.
Pin6 ist besser als var6 - oder dIn6 für "digital-in 6" Smile
Pins würde ich mit #define deklarieren. Diese werden ja im laufenden betrieb nie geändert.
Das Delay() hätte ein mal am Ende der Loop-Schleife gereicht. Bei Else-If kommt es sowieso nur ein mal direkt dahinter (falls du das brauchst):

Den Rest würde ich durch meinen Code ersetzen. Habe hier die Boolschen jetzt nicht umbenannt - komplett sieht das dann so aus:
Code:
#define PIN_6 6
#define PIN_7 7
#define PIN_8 8
#define PIN_9 9
#define PIN_10 10
int out;
boolean P6,P7,P8,P9,P10;

void setup() {
   pinMode(outPin6, OUTPUT);
   pinMode(inPin7, INPUT_PULLUP);
   pinMode(inPin8, INPUT_PULLUP);
   pinMode(inPin9, INPUT_PULLUP);
   pinMode(inPin10, INPUT_PULLUP);
   Serial.begin(9600);
}

void loop() {
   P6 = digitalRead(outPin6);
   P7 = digitalRead(inPin7);
   P8 = digitalRead(inPin8);
   P9 = digitalRead(inPin9);
   P10 = digitalRead(inPin10);

   if (!P1 && !P2 && !P3 && !P4) out==1
   else if(P1 && !P2 && !P3 && !P4) out == 2;
   else if (!P1 && P2 && !P3 && !P4) out == 3;
   else if (P1 && P2 && !P3 && !P4) out == 4;
   else out= 5;
  
   println(String(out));
   delay(2000);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 23:04
Beitrag #21
RE: Unterschiedliche Programme durch Switch/ Case
Hallo,
Du prüfst auf 4, es reichen doch auch 3?

if (!P1 && !P2) out==1
else if(!P2 && !P3 && !P4) out == 2;
else if (!P1 && !P3 && !P4) out == 3;
else if (!P3 && !P4) out == 4;
else out= 5;

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.09.2016, 23:17
Beitrag #22
RE: Unterschiedliche Programme durch Switch/ Case
Ich habe sein Beispiel nur übernommen..dachte da würden noch mehr Kombinationen kommen Wink Und die ganze Arbeit muss man ja auch nicht abnehmen..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2016, 08:48
Beitrag #23
RE: Unterschiedliche Programme durch Switch/ Case
Huhu,

nur mal so als Ide:

Code:
byte flag;

void loop() {
  BitWrite (flag,0,digitalRead(inPin7);
  BitWrite (flag,1,digitalRead(inPin8);
  BitWrite (flag,2,digitalRead(inPin9);
  BitWrite (flag,3,digitalRead(inPin20);

switch (flag) {
    case 1:
      //
      break;
    case 2:
      //
      break;
    case 3:
     //
      break;
    default:
      //
    break;
  }
}

Gruß
Stephan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.09.2016, 16:40
Beitrag #24
RE: Unterschiedliche Programme durch Switch/ Case
(29.09.2016 08:48)StephanBuerger schrieb:  Huhu,

nur mal so als Ide:

Code:
byte flag;

void loop() {
  BitWrite (flag,0,digitalRead(inPin7);
  BitWrite (flag,1,digitalRead(inPin8);
  BitWrite (flag,2,digitalRead(inPin9);
  BitWrite (flag,3,digitalRead(inPin20);

switch (flag) {
    case 1:
      //
      break;
    case 2:
      //
      break;
    case 3:
     //
      break;
    default:
      //
    break;
  }
}

Da kommt im Switch eher

case 0: // keiner gedrückt
case 1: // 1. gedrückt (7)
case 2: // 2. gedrückt (8)
case 4: // 3. gedrückt (9)
case 8: // 4. gedrückt (10)

raus. Er will ja pro Taster genau ein Programm starten.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Switch/Case mit chars phischmi 8 334 24.07.2016 21:00
Letzter Beitrag: phischmi
  Altes Digitales Display mit Text/Bits durch Genuino Micro versorgen - SPI-Bibliothek? RollingStone 0 205 25.06.2016 17:46
Letzter Beitrag: RollingStone
  Deckel offen erkennung durch Temperaturabfall MarkoM 3 259 08.06.2016 14:18
Letzter Beitrag: hotsystems
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.178 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Programme lassen sich nicht auf das Gemma Board downloaden! Jack Sparrow 13 565 08.04.2016 10:01
Letzter Beitrag: hotsystems
  Aus While-Schleife durch Interrupt aussteigen Zill3 10 1.192 08.02.2016 16:28
Letzter Beitrag: ardu_arne
  Problem Wiederholung eines Case im Switch via Bluetooth Ecki1212 6 904 16.09.2015 23:06
Letzter Beitrag: Ecki1212
  Zwei Programme gleichzeitig Lindi01 9 2.034 27.07.2015 23:27
Letzter Beitrag: hotsystems
  Initialisierung der Schnittstelle durch IDE Waishon 1 1.037 09.02.2015 03:59
Letzter Beitrag: rkuehle
Sad atoi() mehrere Zeichen/ Code durch Benutzer ändern (Safe) aepfelbirnen 3 2.103 10.01.2015 13:55
Letzter Beitrag: aepfelbirnen

Gehe zu:


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