Hallo Arduino - Fans,
ich könnte mal Eure Hilfe gebrauchen bei meinem aktuellen Arduino -Projekt.
Im Moment stehe ich auf dem Schlauch, vielleicht habt Ihr eine Idee, wie ich das realisieren kann?
Aufgabenstellung ist:
Ein Schrittmotor soll auf Tastendruck für eine bestimmte Zeit mit einer bestimmten Drehzahl laufen.
Zeit und Geschwindigkeit werden vor dem Start jeweils über Potis eingestellt und in Variablen gespeichert.
Mein Problem ist, dass die Drehzahl des Motors konstruktionsbedigt ja über das von einer Variable vorgegebene Delay geregelt wird.
Somit ist bei höherer Drehzahl die for-Schleife (für die Zeit) schneller abgearbeitet als bei geringerer Drehzahl.
Es soll aber so sein, dass der Motor für die eingestellte Zeit läuft, unabhängig von der Drehzahl.
Habt Ihr einen Lösungsvorschlag?
Vielen Dank schon mal!
Gruß Uli
Das hier ist der Code:
#include <Nextion.h> // Funktioniert nur mit der Bibliothek " ITEAD Arduino Nextion Master"!
int sensorPin1 = A1; // Analog- Pin für die Laufzeit
int sensorValue1 =0; // Variable für die Laufzeit des Motors
int sensorValue3 =0; // Variable für die Laufzeit-Anzeige des Displays
int sensorPin2 = A0; // Analog - PIN für die Drehzahl
int sensorValue2 =0; // Variable für die Drehzahl des Motors
int sensorValue4 =0; // Variable für die Drehzahl-Anzeige des Displays
int Taster1 =7;
int Led1 = 10;
int x = 0;
NexGauge xTime = NexGauge(0, 1, "xTime"); //(Seite, ID, Name)
NexGauge Speed = NexGauge(0, 2, "Speed");
NexPage page0 = NexPage(0, 0, "page0");
NexPage page1 = NexPage(1, 0, "page1");
NexPage page2 = NexPage(2, 0, "page2");
NexPage page3 = NexPage(3, 0, "page3");
NexPage page4 = NexPage(4, 0, "page4");
NexPage page5 = NexPage(5, 0, "page5");
NexTouch *nex_listen_list[] =
{
&page0,
&page1,
&page2,
&page3,
&page4,
&page5,
NULL
};
void setup() {
Serial.begin(9600);
nexInit();
delay(2000); // eingefügt, um das lästige Ruckeln beim Einschalten zu vermeiden, bis der Treiber bereit ist.
pinMode(8, OUTPUT); // direction PIN
pinMode(9, OUTPUT); // step Pin
pinMode(Led1, OUTPUT);
pinMode(Taster1,INPUT_PULLUP);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
page0.show();
delay(1500);
page1.show();
delay(1500);
page2.show();
delay(1500);
page3.show();
delay(1500);
page4.show();
delay(1500);
page5.show();
delay(1500);
}
void loop() {
// Variable für die Laufzeit des Motors
sensorValue1 = analogRead(sensorPin1);
sensorValue1 = map(sensorValue1, 1023,0,0,3600); //1023,0, 0, 255); // war 0, 1023, 3600, 1 ; ((1600))
// Hier wird die Laufzeit-Anzeige für das Display eingestellt
sensorValue3 = analogRead(sensorPin1);
sensorValue3 = map(sensorValue3, 1023, 0, 0, 255); // war 0, 1023, 3600, 1 ;
xTime.setValue(int(sensorValue3));
// Variable für die Drehzahl des Motors
sensorValue2 = analogRead(sensorPin2);
sensorValue2 = map(sensorValue2, 1023,0, 1600, 1); // war 0, 1023, 3600, 1 ; ((1600))
// Hier wird die Geschwindigkeits-Anzeige für das Display eingestellt
sensorValue4 = analogRead(sensorPin2);
sensorValue4 = map(sensorValue4, 1023, 0, 0, 255); // war 0, 1023, 3600, 1 ;
Speed.setValue(int(sensorValue4));
//Serial.println(sensorValue1); //wurde eingefügt, um die Sensorwerte auszulesen, bevor der Taster gedrückt wurde.
//Serial.println(sensorValue2); //wurde eingefügt, um die Sensorwerte auszulesen, bevor der Taster gedrückt wurde.
// Hier wird der Taster abgefragt
if(!digitalRead(Taster1))
{
for(x=0;x<sensorValue1;x++)
//for(x=0;x<10000;x++)
{
digitalWrite(9, HIGH);
digitalWrite(Led1, HIGH);
//delay(300);
delayMicroseconds(sensorValue2);
//delayMicroseconds(100); // eingefügt 7.4.19, so läuft er sofort los
digitalWrite(9, LOW);
digitalWrite(Led1, LOW);
delayMicroseconds(sensorValue2);
//delayMicroseconds(100); // eingefügt 7.4.19, so läuft er sofort los
//delay(300);
}
}
}
Moderator edit:
</mark> <mark>[code]</mark> <mark>
</mark> <mark>[/code]</mark> <mark>
tags added.