Go Down

Topic: bräuchte mal hilfe bei einen programm (Read 1 time) previous topic - next topic

Edora

so habs nun auf a0 und a1 geändert und umgelötet und wie folgt geschrieben

Code: [Select]


/////definieren der ein und ausgänge

// pins an denen die leds angeschlossen sind
int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int led5 = 9;
int led6 = 8;
int led7 = 7;
int led8 = 6;
int led9 = 5;
int led10 = 4;
int led11 = 3;
int led12 = 2;

// pins an denen die schalter sind
int taster = 14; //taster A0
int schalter = 15; // schalter und magnetschalter A1


// weitere festlegung
void setup () {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(taster, INPUT);
  digitalWrite(taster, LOW);
  pinMode(schalter, INPUT);
  digitalWrite(schalter, LOW); 
}


///// Programm bei Tasteraktivierung
void loop() { 
  int val = digitalRead(taster);
  if (val == HIGH) { // wenn taster gedrückt wird
    digitalWrite(led1,HIGH); // schaltet jede led nacheinander an mit 1s wartezeit
    delay(1000);
    digitalWrite(led2,HIGH);
    delay(1000);
    digitalWrite(led3,HIGH);
    delay(1000);
    digitalWrite(led4,HIGH);
    delay(1000);
    digitalWrite(led5,HIGH);
    delay(1000);
    digitalWrite(led6,HIGH);
    delay(1000);
    digitalWrite(led7,HIGH);
    delay(1000);
    digitalWrite(led8,HIGH);
    delay(1000);
    digitalWrite(led9,HIGH);
    delay(1000);
    digitalWrite(led10,HIGH);
    delay(1000);
    digitalWrite(led11,HIGH);
    delay(1000);
    digitalWrite(led12,HIGH);
    delay(30000); // sind alle leds an wird 30s gewartet und dann alle leds wieder abgeschaltet
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
    digitalWrite(led8, LOW);
    digitalWrite(led9, LOW);
    digitalWrite(led10, LOW);
    digitalWrite(led11, LOW);
    digitalWrite(led12, LOW);
  } // ende des tastersprogramm



  /////Programm bei schalter/magnetschalter aktivierung

  val = digitalRead(schalter);
  if (val == HIGH) {
    digitalWrite(led1,HIGH);
    delay(1000);
    digitalWrite(led2,HIGH);
    delay(1000);
    digitalWrite(led3,HIGH);
    delay(1000);
    digitalWrite(led4,HIGH);
    delay(1000);
    digitalWrite(led5,HIGH);
    delay(1000);
    digitalWrite(led6,HIGH);
    delay(1000);
    digitalWrite(led7,HIGH);
    delay(1000);
    digitalWrite(led8,HIGH);
    delay(1000);
    digitalWrite(led9,HIGH);
    delay(1000);
    digitalWrite(led10,HIGH);
    delay(1000);
    digitalWrite(led11,HIGH);
    delay(1000);
    digitalWrite(led12,HIGH);

  }
  else {
    delay(15000); /// wenn schalter aus dann alle leds ausschalten nach 15s
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    digitalWrite(led4, LOW);
    digitalWrite(led5, LOW);
    digitalWrite(led6, LOW);
    digitalWrite(led7, LOW);
    digitalWrite(led8, LOW);
    digitalWrite(led9, LOW);
    digitalWrite(led10, LOW);
    digitalWrite(led11, LOW);
    digitalWrite(led12, LOW);
  }
}



soweit alles nun ok ausser das wenn man den taster drückt einmal für ein paar s bis es angeht das ganze sich 2-3 mal wiederholt. beim schalter geht es trotz eingeschalteten schalter irgendwann aus und das ganze spiel geht von vorne los und wiederholt sich auch ewig.

gibts da nen befehl der dieses wiederholen verhindert  und beim eingeschalteten schalter es auch an bleibt bis man ihn ausstellt


man da ist ein prob behoben kommt ein neues

sth77

#11
Sep 17, 2011, 09:39 pm Last Edit: Sep 17, 2011, 09:41 pm by sth77 Reason: 1
Das Programm ist noch immer fehlerhaft. Du kannst keinen Pin als Input setzen und dann ein digitalWrite Low drauf geben, das schaltet die PullUps einfach wieder ab. Die Folge sind unbestimmte Pegel an den Eingängen - gar nicht gut. Also erst mal die digitalWrite wieder auf High setzen und dann die if-Abfrage in der loop() auf Low umschreiben, wie schon mehrfach gesagt.
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

uwefed

Quote
gibts da nen befehl der dieses wiederholen verhindert  und beim eingeschalteten schalter es auch an bleibt bis man ihn ausstellt

Es gibt keinen "Befehl" oder Funktion der das verhindert.

Du mußt einfach eine Variable beim ersten Durchgang, wenn der Taster gedrückt wird auf 1 setzen. Beim nächsten Durchgang wenn die Variable 1 ist dann werden die Led nicht mehr eingeschaltet.

Also mußt du nicht nur den Taster kontrollieren sondern auch die Variable

int val = digitalRead(taster);
   if (val == LOW && Statustaster ==0) { // wenn taster gedrückt wird

Außerdem rate ich Dir nicht delay() zu verwenden sondern millis() wie in "blink without delay" http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Viele Grüße Uwe

Edora

so es funzt endlich hab die high und low sachen getauscht und dann an die 2 schalter gnd angelegt und damit klappt es endlich und keine wiederholungen ode rselbstständiges angehen. nur den magnetschalter konnt ich net testen zwecks fehlenden magneten aber das mach ich morgen in berlin wieder


danke für die hilfe  jetzt ist es gelöst nun kann ich mich daran machen das anders zu schreiben ^^ ich bin nunmal anfängerin in der sache

MaFu

Und mach aus den Pin-Variablen Konstanten. Das ist für Werte, die sich nicht ändern, die geeignetere Methode.
Also anstelle
Code: [Select]
int led1 = 13;schreibst Du
Code: [Select]
#define led1 13 Dadurch werden die Werte beim compilieren direkt in den Code eingefügt und verbrauchen keinen Speicherplatz.
Es ist nicht schlecht, sich so etwas von Anfang an anzugewöhnen. Wenn Du mal ein größeres Programm schreibst, kann das bei dem begrenzten RAM eines ATmega 328 durchaus entscheidend sein.
_______
Manfred

Go Up