Motor laufen lassen und gleichzeitig LED Blinklicht möglich ? Arudino UNO

Servus, ich habe ein kleines Problem, und zwar habe ich einen Motor über einen PIN 4 gesteuert, welcher auf Knopfdruck über einen Schalter (PIN 5) angeht . Daneben möchte ich zwei LED's abwechselnd blinken lassen, wenn der Motor läuft (Über Pin 6+7) nun habe ich zwischen dem -digitalWrite (erste led an ) digital Write ( zweite LED aus ) - DELAY (1000) und dann - digitalWrite erste aus ) - digitalWrite ( zweite an )

dies befindet sich alles in einem void loop - nun habe ich das Problem, dass die LED's nicht abwechselnd blinken, sondern eben nur eine angeht. Beim Drücken des Schalters verzögert sich das angehen des Motors dann aber um genau den eingegebenen Wert bei DELAY

Wer kann Abhilfe schaffen und mir helfen ?

Danke im vorraus

http://arduino.cc/en/Reference/Millis http://arduino.cc/en/Tutorial/BlinkWithoutDelay

da ist aber auch nicht die Lösung von meinem Problem enthalten ....

Doch das ist die Lösung. Mit millis() schaffst du es Code zu verzögern ohne den Prozessor wirklich anzuhalten. Dazu vergleicht man den aktuellen Wert von millis() mit einem alten. Und wenn die Differenz einen bestimmten Wert überschritten hat dann weiß man dass die Zeit vergangen ist und macht was.

Bassi113: da ist aber auch nicht die Lösung von meinem Problem enthalten ....

Das ist die Lösung ;) Den Sketch bitte immer mit posten, mit dem Pseudo Snippet kann man nicht viel Anfangen. Wer weiß, ob noch mehr blockierender Code vorhanden ist. Wie wird der Motor angesteuert?

Beim Drücken des Schalters verzögert sich das angehen des Motors dann aber um genau den eingegebenen Wert bei DELAY

Dann nimm halt einen kleineren Delay. Wenn die Led 500 ms lang an sein soll, mach nur einen delay von 100 ms, aber schalte die Led erst nach 5 Durchläufen mit delay(100) um. Aber jedesmal Taster lesen und Motor steuern.

Oder nimm einen delay von 1 ms und schalte nach 500 mal um.

Oder nimm einen delay von 0 ms und schalte um, wenn millis() um 500 größer ist als beim letzen Schalten. ( da ist die vorgeschlagene "Lösung von deinem Problem enthalten" )

Den delay(0) kannst du dann einfach weglassen, ohne dass sich irgendwas ändert.

Du kommst so auf eine Reaktionszeit von weit unter 1 ms, das ist schneller als der Taster von aus nach ein wechselt ( von sichtbarem Blinken ganz zu schweigen) !

/*
  Arduino Starter Kit example
 Project 9  - Motorized Pinwheel

 This sketch is written to accompany Project 9 in the
 Arduino Starter Kit

 Parts required:
 10 kilohm resistor
 pushbutton
 motor
 9V battery
 IRF520 MOSFET
 1N4007 diode

 Created 13 September 2012
 by Scott Fitzgerald

 http://arduino.cc/starterKit

 This example code is part of the public domain 
 */

// named constants for the switch and motor pins
const int switchPin = 5; // the number of the switch pin
const int motorPin =  4; // the number of the motor pin

int switchState = 5;  // variable for reading the switch's status

void setup() {
  // initialize the motor pin as an output:
  pinMode(motorPin, OUTPUT);      
  // initialize the switch pin as an input:
  pinMode(switchPin, INPUT);     
 pinMode(6, OUTPUT);
 pinMode(7, OUTPUT);
}
void loop(){
  // read the state of the switch value:
  switchState = digitalRead(switchPin);

  // check if the switch is pressed.
  if (switchState == HIGH) {     
    // turn motor on:    
    digitalWrite(motorPin, HIGH); 
   digitalWrite (6, HIGH) ; 
   digitalWrite (7, LOW) ;
   //HIER SOLL DAS BLINKEN STARTEN !!!
   delay(1000);
   digitalWrite(6,LOW);
   digitalWrite(7,HIGH);
  } 
  else {
    // turn motor off:
    digitalWrite(motorPin, LOW); 
  digitalWrite(7, HIGH);
  digitalWrite(7, LOW);   
  }
}

Warum soll die LED an Pin 7 nach Ausschalten weiter an bleiben? Des weiteren sehe ich nirgends, dass du es versucht hast nach der Blink Without Millis Methode.

bin relativ neu in der Thematik, daher wollte ich hier um Unterstützung bitten, vllt. kann das jemand von euch schnell einbauen, ich komme leider damit gar nicht zurecht ....

Könnte man, aber was bringt das?

Beispiel: Du kannst mit dem Auto nicht rückwärts einparken. Ich mach das für dich, du weißt wie es geht. Beim nächsten Mal stehtste wieder vor dem Problem, du hast gesehen wie es geht, kannst es aber nicht.

Sorry, aber Blink Without Delay gehört zu den wichtigsten Grundlagen beim Arduino. Das können selber die Copy&Paster, die keinerlei Ahnung haben was der Code macht.

/* Blink without Delay

 Turns on and off a light emitting diode(LED) connected to a digital  
 pin, without using the delay() function.  This means that other code
 can run at the same time without being interrupted by the LED code.

 The circuit:
 * LED attached from pin 13 to ground.
 * Note: on most Arduinos, there is already an LED on the board
 that's attached to pin 13, so no hardware is needed for this example.


 created 2005
 by David A. Mellis
 modified 8 Feb 2010
 by Paul Stoffregen

 This example code is in the public domain.


 http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
 */

// constants won't change. Used here to 
// set pin numbers:
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);      
}

void loop()
{
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the 
  // difference between the current time and last time you blinked 
  // the LED is bigger than the interval at which you want to 
  // blink the LED.
  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

gut, hab das jetzt mal durchgemacht, wie bekomme ich die LED’s jetzt abwechselnd zum blinken ? jetzt blinken ja beide gleichzeitig auf

In dem du du das ein weiteres mal anlegst :zipper_mouth_face:

    if (ledState1 == LOW) {
      ledState1 = HIGH;
      ledState2 = LOW;
   }
    else {
      ledState1 = LOW;
      ledState2 = HIGH;
   }
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin1, ledState1);
    digitalWrite(ledPin2, ledState2);

Sorry, aber kann das sein, dass du dich keinerlei mit dem Arduino und Basics beschäftigt hast? Sowas wird in jedem Online Tutorial oder Buch als erstes abgehandelt.!

im Starter kit nicht...

Fehlermeldung :
sketch_aug18a.ino: In function ‘void setup()’:
sketch_aug18a:41: error: ‘ledState1’ was not declared in this scope
sketch_aug18a:42: error: ‘ledState2’ was not declared in this scope
sketch_aug18a.ino: In function ‘void loop()’:
sketch_aug18a:59: error: ‘ledState1’ was not declared in this scope
sketch_aug18a:61: error: ‘ledState2’ was not declared in this scope
sketch_aug18a:63: error: expected `}’ before ‘else’
sketch_aug18a:64: error: ‘ledState1’ was not declared in this scope
sketch_aug18a:65: error: ‘ledState2’ was not declared in this scope

const int ledPin =  5;      // the number of the LED pin
const int ledPin1 = 6;
// Variables will change:
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);  
  pinMode(ledPin1, OUTPUT); 
   
}

void loop()
{
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the 
  // difference between the current time and last time you blinked 
  // the LED is bigger than the interval at which you want to 
  // blink the LED.
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   
  
      if (ledState1 == LOW) 
      ledState1 = HIGH;
      ledState2 = LOW;
   
      else 
      ledState1 = LOW;
      ledState2 = HIGH;
   
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState1);
    digitalWrite(ledPin1, ledState2);

Also etwas eigenes Programmieren und Verständnis ist schon erforderlich. Sonst lernst du nie was.

Es kann doch nicht so schwer sein Code-Blöcke mit { } Klammern bei if/else zu setzen, und statt eine Variable "ledState" zwei Variablen "ledState1" und "ledState2" zu deklarieren.

Ja, etwas Eigeninitiative und mitdenken ist schon notwendig. Grüße Uwe

Welches Starterkit? Wenns das offizielle von Arduino ist, hast du das nicht richtig erarbeitet! Andere werden ähnlich aufgebaut. Es geht dabei nicht drum, das Buch bis zur Seite X zu überspringen, da man es a) nicht verstanden hat b) keine Lust hat c) nicht das ist, was man möchte.

Man kann nicht hoffen, dass es klappt, einfach drauf los zu kopieren, ohne den Sinn dahinter verstanden zu haben. Das C Programmieren lernt man nicht in 30 Tagen (bezogen auf ein verhöhntes Buch), in weniger schon garnicht. Es ist genauso wie Englisch oder andere Fremdsprachen, bzw. manchmal auch die Landessprache, von nichts kommt nichts.

Das C Programmieren lernt man nicht in 30 Tagen (bezogen auf ein verhöhntes Buch)

Die ersten Beispiele ( Blink, Taster, BlinkwithoutDelay ) wird man weit schneller verstanden haben, wenn es einen interessiert und man so lange Spass dran hat. Ich könnte jeden verstehen der nach 3 Tagen ohne Erfolgserlebnis aufgibt.

Ganz generell (das machen auch Erfahrenere so): Erstmal ein Beispiel unverändert ans Laufen kriegen. Verstehen versuchen. Dann Erweiterungen / Änderungen einbauen. Wenn man die nicht hinkriegt, verstehen versuchen. Fehlermeldungen haben eine Bedeutung, die zugegeben manchmal schwer zu verstehen ist, aber es liegt eher nicht am Englischen an sich. ( expected `}' before 'else' solltest du hinkriegen, spätestens nach Serenifly's Gemecker Hinweis auf { } Codeblöcke ;) ) Sonst erstmal kleinere Änderungen probieren.

Wenn unklar bleibt, warum was anderes passiert als erwartet, Testausgaben (Serial.println ) einbauen, SerialMonitor in der Arduino-IDE am PC starten.