Hallo a halle,
Erstmals mochte ich mich bei euch hallen bedanken fur die Tips und Hilfestellungen. "DANKE an
combie, HotSystems, paulpaulson, my_xy_projekt
"
Bin schon ein Schritt weiter und die Anlege bewegt sich schon mit anfahren und anhalten des Motors an den ensprechenden Stellen.
Ich habe mich zuerst mit der millis() funktion rumgeschlagen. Ich denke das ich verstande habe was darinter steckt. Mein problem ist haber wie ich das in den code einbringen kann zu meiner Aufgabenstellung.
Dah ich mit millis() nicht weiter kam, habe ich die TaskMacro Variante ausprobiert. Und war direkt ein Volltreffer. Ich denke deswegen dah ich schon mit einfachen SPS Steuerungen erfahrung habe.
Ihr ist der Code den ich bich jetzt zur TaskMacro Variante habe.
#include <TaskMacro.h>
const int starten = 4;
const int stopen = 5;
const int notaus = 8;
const int sensor1 = 2;
const int sensor2 = 3;
const int relais1 = 6;
const int relais2 = 7;
int startenState = 0;
int stopenState = 0;
int notausState = 0;
int sensor1State = 0;
int sensor2State = 0;
int relais1State = LOW;
int relais2State = LOW;
//////Setup-Code//////
void setup()
{
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
}
//////Hauptcode//////
void loop()
{
foerderband();
}
//////Started die Anlage//////
void anlagean()
{
}
//////Stoped die Anlage//////
void anlagehalt()
{
}
//////Motor lauft Rechts//////
void rechtslauf()
{
digitalWrite(relais1, HIGH);
digitalWrite(relais2, LOW);
}
//////Motor lauft Links//////
void linkslauf()
{
digitalWrite(relais1, LOW);
digitalWrite(relais2, HIGH);
}
//////Motoren stehen stil//////
void stopmotor()
{
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
}
//////Steuerung Foerderband//////
void foerderband()
{
taskBegin();
while(1)
{
taskPause(3000);
rechtslauf();
taskWaitFor(digitalRead(sensor2));
stopmotor();
taskPause(3000);
linkslauf();
taskWaitFor(digitalRead(sensor1));
stopmotor();
}
taskEnd();
}
Zuruck zur millis()
Wie gesagt mein problem mit millis(), ist wie ich das in mein code einbrigen kann.
Der lezte sketch von paulpalsen mit millis() drinne, habe ich ubernommen und ein bischen umgeschriebe da ich mitlerweile die Namen der eingange und void verhandert habe. Habe mit den code angeguckt, um zu lernen und zu verstehen und war mir sicher das jetzt millis() mir auch eine Losung geben wurde.
Habe es ausprobiert hat haber nicht funktioniert. Die Anlage bewegt sich nicht. Was ich beobachten kann ist das
digitalWrite(LED_BUILTIN,millis()/500%2);
am Laufen ist.
Ihr ist der Code den ich bich jetzt zur millis() Variante habe.
// zum Testen die Funktion foerderbandTest(); und diverse Serial.pintln()s eingefügt
const int starten = 4;
const int stopen = 5;
const int notaus = 8;
const int sensor1 = 2;
const int sensor2 = 3;
const int relais1 = 6;
const int relais2 = 7;
int startenState = 0;
int stopenState = 0;
int notausState = 0;
int sensor1State = 0;
int sensor2State = 0;
int relais1State = LOW;
int relais2State = LOW;
unsigned long previousMillisrecht = 0;
unsigned long previousMillislinks = 0;
const long lesesensor1 = 3000;
const long lesesensor2 = 3000;
//////Setup-Code//////
void setup()
{
pinMode(sensor1, INPUT);
pinMode(sensor2, INPUT);
pinMode(starten, INPUT);
pinMode(stopen, INPUT);
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);
Serial.println(F("Taste | [r]=rechts | [l]=links | [s]=stopp | |"));
}
//////Hauptcode//////
void loop()
{
anlagean();
foerderband();
}
//////Started die Anlage//////
void anlagean()
{
startenState = digitalRead(starten);
if (startenState == HIGH) {
digitalWrite(relais1, HIGH);
digitalWrite(relais2, LOW);
}
}
//////Stoped die Anlage//////
void anlagehalt()
{
}
//////Motor lauft Rechts//////
void rechtslauf()
{
Serial.println(F("rechtslauf()"));
sensor1State = digitalRead(sensor1);
if (sensor1State == HIGH) {
digitalWrite(relais1, HIGH);
digitalWrite(relais2, LOW);
}
}
//////Motor lauft Links//////
void linkslauf() {
Serial.println(F("linkslauf()"));
sensor2State = digitalRead(sensor2);
if (sensor2State == HIGH) {
digitalWrite(relais1, LOW);
digitalWrite(relais2, HIGH);
}
}
//////Motoren stehen still//////
void stopmotor()
{
Serial.println(F("stopmotor()"));
stopenState = digitalRead(stopen);
if (stopenState == HIGH) {
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
}
}
//////Wartezeit des Motors in rechtslauf//////
void wartezeitrechtslauf()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillisrecht >= lesesensor1)
{
previousMillisrecht = currentMillis;
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
}
}
//////Wartezeit des Motors in linksslauf//////
void wartezeitlinkslauf()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillislinks >= lesesensor2)
{
previousMillislinks = currentMillis;
digitalWrite(relais1, LOW);
digitalWrite(relais2, LOW);
}
}
//////Steuerung Foerderband//////
void foerderband()
{
digitalWrite(LED_BUILTIN,millis()/500%2);
switch (Serial.read())
{
case 'l': linkslauf(); break;
case 'r': rechtslauf(); break;
case 's': stopmotor(); break;
}
}
Fur mich ist zu diesen Zeitpunkt auch sehr wichtig zu sehen das mit millis() ich meine Aufgabenstellung auch bewaltigen kann. Weil erstens " Verdamm es muss einen Wegen geben das zum Arbeiten zu bringen" und zweitens ich sichelich in Zukunft aud millis() zuruck greifen werde.
Der Motor mit zwei Sensoren am Forderband ist nur der Anfang. Es kommt noch Start/Stop, NotAus, Cyclenzahler, Display um Cyclenzahlen ablesen zu konnen, Wartezeiten verhandern uber die Steuerung ohne den Arduino direkt am Laptop anschlisen zu mussen, Cyclenzahlen mit hilfe von Rasperry Wireless in eine Excell tabelle einzufugen......
:o 
Ich habe haber dafur noch viel, viel sehr viel zu lernen.