Der kleine Treiber funktioniert schon mit Drehzahl Reglung. IN1 ist der PWM Eingang von Pin.11, für den Motor-A.
OK. Alles klar. Hat so lange gedauert, weil ich einen Dämlichkeitsfehler gemacht habe. Ich hatte bei den if - Abfragen hinten einen ";" drann. Dann klapt die Abfrage nicht. Dann ist immer alles sofort wahr. Ich habe mit Serial.print() alle möglichen Werte vergleichen, und habe nur immer mehr Fragezeichen im Kopf gehabt. Ich habe echt nicht mehr gewusst was da gespielt wird, bis ich endlich zufällig diese verdammten ";" entdeckt habe. Da schreibt man den Scheiß schon ein paar Jahre, und plötzlich schreibt man solchen Mist rein, obwohl man weiß wie es eigentlich funktioniert
OK, alles klar. Hier ist das Programm. Rückwärts drehen brauchst du ja nicht. Also Pin. 15 ist der Taster gegen GND und Pin. 11 ist PWM zum MotorTreiber.
Das Display zeigt die PWM Werte an, die ausgegeben werden. Aber das Display brauchst du ja nicht anschließen.
So ist es jetzt, etwa 16 Sekunden gibt der Motor Gas, 60 Sek. läuft er dann und etwa 11 Sek. regelt er wieder runter.
Ich habe jetzt den Motor gar nicht dran gehabt. Aber habe das PWM - Signal mit den Oszi kontrolliert. Das ist alles super.
"PWM_Lauf" ist der Wert für Vollgas. Nicht über 255 gehen!
"PWM_Stopp" ist der Wert für Stillstand.
"PWM_Wert" nicht verändern, der wird im Programm dauernd verändert und muss anfangs "0" sein.
"Pausezeit01" ist für die Regelgeschwindigkeit beim Gas geben. Wert kleiner ist schneller.
"Laufzeit02" ist die Zeit in Millisekunden, die er Vollgas dreht. 60000ms ist eine Minute.
"Pausezeit03" ist für die Regelgeschwindigkeit beim Gas wegnehmen. Wert kleiner ist schneller.
Code: Alles auswählen
#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x27, 20, 4);
//===================DEKLARATIONEN==============================
int PWM_Output = 11; // PWM Ausgang Pin auf 11
int PWM_Wert = 0;
int PWM_Stopp = 0;
int PWM_Lauf = 255;
byte Merker = 3;
//--Aktuelle Zeit für Zeitmessung---
unsigned long Aktuellzeit = 0;
//--------50ms Etappenzeit------------
unsigned long Startzeit01 = 0;
const unsigned long Pausezeit01 = 50;
//------Eine Minute Laufzeit----------
unsigned long Startzeit02 = 0;
const unsigned long Laufzeit02 = 60000;
//--------30ms Etappenzeit------------
unsigned long Startzeit03 = 0;
const unsigned long Pausezeit03 = 30;
//-----------------------Taster01----------------------------------------
// const byte ist im Programm Constant und byte ist fuer Werte 0-255
const byte Taster01 = 15; // Pin 15 wird Constant als Taster01 bezeichnet
byte Tasterstatus01 = 0; // Zum Abfragen des Tatsenpins
unsigned long Sekundenablauf04 = 0; // Tastenabfrage von Taster02 300ms aussetzen
const unsigned long Pausezeit04 = 200;
//=======================SETUP==================================
void setup()
{
pinMode(Taster01, INPUT_PULLUP); // Pin 15 fuer Taster01
pinMode(PWM_Output, OUTPUT);
Serial.begin(9600);
lcd.begin();
lcd.backlight();
lcd.clear();
lcd.setCursor (0, 0);
lcd.print (F("PWM Wert = "));
}
//=======================LOOP===================================
void loop()
{
Aktuellzeit = millis();
//------------------------------------------------------------
//-----------Taster01 abfragen--------------------------------
if (Aktuellzeit - Sekundenablauf04 >= Pausezeit04) // 200msec abgelaufen?
{
Tasterstatus01 = digitalRead(Taster01); // Pin von Taster01 abfragen
if (Tasterstatus01 == LOW)
{
Merker = 0;
Sekundenablauf04 = Aktuellzeit;
}
}
// -----------------------------------------------------------
// -----------------------Tempo erhöhen-----------------------
if ((Aktuellzeit - Startzeit01 >= Pausezeit01) && (Merker == 0))
{
if (PWM_Wert <= PWM_Lauf)
{
PWM_Wert ++;
lcd.setCursor (14, 0);
lcd.print (" ");
lcd.setCursor (14, 0);
lcd.print (PWM_Wert);
analogWrite(PWM_Output, PWM_Wert); // PWM_Wert als PWM auf Pin 11 ausgeben
Startzeit01 = Aktuellzeit;
}
if (PWM_Wert == PWM_Lauf)
{
Merker = 1;
Startzeit02 = Aktuellzeit;
}
}
// ----------------------------------------------------------
// ----------------------Tempo halten------------------------
if ((Aktuellzeit - Startzeit02 >= Laufzeit02) && (Merker == 1))
{
Merker = 2;
}
// ----------------------------------------------------------
// -------------------Tempo reduzieren-----------------------
if ((Aktuellzeit - Startzeit03 >= Pausezeit03) && (Merker == 2))
{
if (PWM_Wert >= PWM_Stopp)
{
PWM_Wert --;
lcd.setCursor (14, 0);
lcd.print (" ");
lcd.setCursor (14, 0);
lcd.print (PWM_Wert);
analogWrite(PWM_Output, PWM_Wert); // PWM_Wert als PWM auf Pin 11 ausgeben
Startzeit03 = Aktuellzeit;
}
if (PWM_Wert == PWM_Stopp)
{
Merker = 3;
}
}
}
//======================ENDE====================================