Basierend auf #10: Pin 10 ist doppelt belegt.
JackKean:
Könntest Du das bitte etwas konkreter schreiben? Was meinst du damit, in Millis?
Leider ist delay blockierend, was bei mehreren quasi parallelen Abläufen vermieden werden muß. Daher nutzt man millis für Zeiten.
Ein Denkanstoß:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <AccelStepper.h>
const int sensorPin = 8;
const int buttonPin = 7;
int sensorState = 0;
int counter = 0;
int sensorStateHIGH = 0;
int dreh = 5;
int pwm = 6;
int buttonPin3 = 9;
int buttonPin2 = 4;
int sensorPin2 = A0;
int sensorValue = 0;
int buttonState = LOW;
int16_t schritte = -200, altschritte = schritte;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address
AccelStepper myStepper(4, 10, 12, 11, 13);
void setup() /*----( SETUP: RUNS ONCE )----*/
{
pinMode(sensorPin, INPUT_PULLUP);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(dreh, OUTPUT);
pinMode(pwm, OUTPUT);
digitalWrite(dreh, LOW);
analogWrite(pwm, 0);
lcd.begin(16, 2); // initialize the lcd for 16 chars 2 lines, turn on backlight
myStepper.setMaxSpeed(100);
myStepper.setAcceleration(500);
// To do: Fahrt zum Referenzpunkt
// ------- Quick 3 blinks of backlight -------------
for (int i = 0; i < 3; i++)
{
lcd.backlight();
delay(50);
lcd.noBacklight();
delay(50);
}
lcd.backlight(); // finish with backlight on
//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0
lcd.setCursor(0, 0); //Start at character 4 on line 0
lcd.print("-Wickelmaschine-");
delay(1000);
lcd.setCursor(0, 0); //Start at character 4 on line 0
lcd.print(" ");
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
sensorState = digitalRead(sensorPin);
if (sensorState == HIGH)
{
sensorStateHIGH = 1;
}
if (sensorState == LOW && sensorStateHIGH == 1)
{
counter++;
sensorStateHIGH = 0;
}
buttonState = digitalRead(buttonPin3);
if (buttonState == HIGH)
{
digitalWrite(dreh, LOW);
sensorValue = analogRead(sensorPin2);
analogWrite(pwm, sensorValue);
}
buttonState = digitalRead(buttonPin2);
if (buttonState == HIGH)
{
digitalWrite(dreh, LOW);
analogWrite(pwm, 0);
}
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
counter = 0;
}
if (!(millis() % 100))
{
if (altschritte != schritte)
{
altschritte = schritte;
lcd.setCursor(0, 0); //Start at character 4 on line 0
lcd.print(" ");
lcd.setCursor(0, 0); //Start at character 4 on line 0
lcd.print(schritte);
}
lcd.setCursor(0, 1); //Start at character 4 on line 0
lcd.print(" ");
lcd.setCursor(0, 1); //Start at character 0 on line 0
lcd.print(counter);
lcd.setCursor(7, 1);
lcd.print("Windungen");
}
if (myStepper.distanceToGo() == 0)
{
schritte *= -1;
myStepper.move(schritte);
}
myStepper.run();
}/* --(end main loop )-- */
MicroBahner:
Oder Du versuchst es mal mit meiner MobaTools Lib.
Habe ich mir runtergeladen, werde ich ausprobieren