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
Schrittmotor Problem mit LCD
30.07.2015, 15:15
Beitrag #1
Schrittmotor Problem mit LCD
Hallo Leute,
wenn ich in meinem Sketch etwas etwas auf dem LCD ausgeben lasse, habe ich timingprobleme mit meinem Schrittmotor. Die der Zeit wo die daten auf das LCD geschrieben werden, stören den Lauf des Motors. Je mehr Zeilen desto unruhiger wird der Lauf. Kann ich etwas dagen tun?

Code:
#include <AccelStepper.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Define the stepper and the pins it will use
AccelStepper stepper1(1, 9, 8);

// Define our three input button pins
#define  SHUTTER_PIN  5
#define  LEFT_PIN  4
#define  STOP_PIN  3
#define  RIGHT_PIN 2

// Define our analog pot input pin
#define  SPEED_PIN 0

// Define our maximum and minimum speed in steps per second (scale pot to these)
#define  MAX_SPEED 334
#define  MIN_SPEED 0.1



LiquidCrystal_I2C lcd(0x27,20,4);

void setup() {
  // The only AccelStepper value we have to set here is the max speeed, which is higher than we'll ever go
  stepper1.setMaxSpeed(10000.0);

  // Set up the three button inputs, with pullups
  
  lcd.init();                      // LCD wird initialisiert
  lcd.backlight();
  lcd.clear();
  
  pinMode(LEFT_PIN, INPUT_PULLUP);
  pinMode(STOP_PIN, INPUT_PULLUP);
  pinMode(RIGHT_PIN, INPUT_PULLUP);
  pinMode(SHUTTER_PIN, INPUT_PULLUP);


}

void loop() {
  
  static float current_speed = 0.0;         // Holds current motor speed in steps/second
  static int analog_read_counter = 1000;    // Counts down to 0 to fire analog read
  static char sign = 0;                     // Holds -1, 1 or 0 to turn the motor on/off and control direction
  static int analog_value = 0;              // Holds raw analog value.

  // If a switch is pushed down (low), set the sign value appropriately
  if (digitalRead(LEFT_PIN) == 0)
  {
    //lcd.setCursor(0, 2);
    //lcd.print("Richtung: Links ");
    sign = 1;
    
  }
  else if (digitalRead(RIGHT_PIN) == 0)
  {    
    //lcd.setCursor(0, 2);
    //lcd.print("Richtung: Rechts ");
    sign = -1;
  }
  else if (digitalRead(STOP_PIN) == 0)
  {
    //lcd.setCursor(0, 2);
    //lcd.print("Richtung: Stopp ");
    sign = 0;
  }


if (digitalRead(SHUTTER_PIN)==HIGH) while (digitalRead(SHUTTER_PIN)==HIGH);

int speed = current_speed;

  // We only want to read the pot every so often (because it takes a long time we don't
  // want to do it every time through the main loop).  
  if (analog_read_counter > 0) {
    analog_read_counter--;
  }
  
   else {
    analog_read_counter = 3000;
    // Now read the pot (from 0 to 1023)
    analog_value = analogRead(SPEED_PIN);
    
    lcd.setCursor(0, 0);
    lcd.print("Speed: ");
    lcd.print(400 / 100 * current_speed / 13.357,1);
    lcd.print("%    ");
    
    lcd.setCursor(0, 1);
    lcd.print("Time:  ");
    lcd.print(334 * 510 / speed *6.54 / 60*-1);
    lcd.print("min    ");
    
    
    
    // Give the stepper a chance to step if it needs to
    stepper1.runSpeed();
    //  And scale the pot's value from min to max speeds
    current_speed = sign * ((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED;
    // Update the stepper to run at this new speed
    stepper1.setSpeed(current_speed);

}

  // This will run the stepper at a constant speed
  stepper1.runSpeed();



}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.07.2015, 16:37
Beitrag #2
RE: Schrittmotor Problem mit LCD
Hallo,
leider kenne ich mich mit der Steuerung von Schrittmotoren nicht aus, aber kann es evtl. etwas mit der Variablen "Sign" zu tun haben, hier steht:

static char sign = 0; // Holds -1, 1 or 0 to turn the motor on/off and control direction

Und die Variable änderst du beim Beschreiben des Displays.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.07.2015, 17:54
Beitrag #3
RE: Schrittmotor Problem mit LCD
Das kann gut seinConfused
Ich habe den Code von jemanden übernommen weil er gut zu meinem Projekt passt.
Gibt es Alternative Variablen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.07.2015, 19:55
Beitrag #4
RE: Schrittmotor Problem mit LCD
Notwendige Variablen kannst du doch selbst definieren. Dazu must du aber genau verstehen was der Code macht. Ich würde die Variable "Sign" erst mal in den Displayroutinen auskommentieren und prüfen, ob der Code dann besser läuft.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Haltestrom Schrittmotor reduzieren TimF 3 348 24.10.2016 12:33
Letzter Beitrag: Binatone
  Problem mit SD Card Library BennIY 4 190 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Schrittmotor Clemens55555 9 755 25.08.2016 10:15
Letzter Beitrag: Binatone
  Problem mit SD.remove Eichner 6 211 22.08.2016 19:42
Letzter Beitrag: Eichner
  4x16 Tastermatrix Problem Michel 16 845 14.07.2016 10:02
Letzter Beitrag: StephanBuerger
  Problem mit Delay und Millis funnyzocker 1 458 26.06.2016 09:54
Letzter Beitrag: hotsystems
  Problem mit ESP8266 und EMail senden torsten_156 1 597 13.06.2016 21:14
Letzter Beitrag: torsten_156
  ESP8266_01 flashen - Problem torsten_156 12 1.048 30.05.2016 20:12
Letzter Beitrag: torsten_156
  Hardwareserial/Softserial: Problem mit Superklasse tuxedo0801 10 478 19.05.2016 12:25
Letzter Beitrag: amithlon
  ESP8266 HTML Problem arduino_weatherstation 1 494 25.04.2016 21:52
Letzter Beitrag: rkuehle

Gehe zu:


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