Moin moin,
ich bin etwas auf dem Schlauch, newbee Frage. Es geht um die Verwendung von Unterprogrammen. Totzdem, dass ich einige Tutorials gelesen habe komme ich da irgendwie nicht wirklich weiter.
Was habe ich:
- Ich habe 5 "2 Wege" Taster. Diese Taster steuern 5 Aktuatoren. (Die Position, hoch und runter)
- Solange der Taster gedrückt bleibt zählt er hoch oder runter. (Geht nur so, da neben der Eingabe über Taster auch eine Eingabe über eine Tastatur später erfolgt) von 0-255. Der Aktuator fährt dann gemütlich die Pos an.
Hier der Code, der Taster, die Serial.print sind zum visualisieren:
if(!digitalRead(SW2)) //hochzählen
{
if(volt_s1<255)volt_s1++;
Serial.println("-------");
Serial.println("SOLL: ");
Serial.println(volt_s1); //nur zur Visualisierung
Serial.println("IST: ");
Serial.println(volt_i1);
delay(80);
}
if(!digitalRead(SW1))
{
if(volt_s1!=130)volt_s1--; //Min 130 Anppassung des Pots, in meinem Model kann ich nur bis 130 runter drehen, Anschlag
Serial.println("-------");
Serial.println("SOLL: ");
Serial.println(volt_s1); //nur zur Visualisierung
Serial.println("IST: ");
Serial.println(volt_i1);
delay(80);
}
Ich will aber diesen Codeblock ja nicht 5 mal in meinem loop haben und daher möchte ich eine unterfkt haben, in der das einmal steht:
void taster(int up, int dw, int volt_s)
{}
Mein Problem ist jetzt, dass ich nicht ganz checke, wie ich das dem Programm verklicker:
Also SW1 (Switch1 hoch), SW2 (Switch2 runter)---Rechne in Sub aus--> volt_s1, Serialprintln("volt_s1") Serial.print("volt_s1)
SW3 (Switch2 hoch) SW3 (Switch2 runter)---Rechne in Sub aus--> volt_s2, Serialprintln("volt_s2") Serial.print("volt_s2)
usw....
Das selbe Spiel habe ich dann ja nochmal für die Aktuatoren, wäre ja auch 5 mal der Fall.
Egal was ich mach es funktioniert nicht...
vielen dank!
Im Anhang nochmal der gesammt Code mit Int, Setup und Aktoren:
// Aktuator
int count=0;
// TASTER PINS BEGIN
int SW1=22; //MOTOR Taster UP
int SW2=23; // Taster Down
int SW3=24; //hinten links
int SW4=25;
int SW5=25; // hinten rechts
int SW6=26;
int SW7=27; // vorn links
int SW8=28;
int SW9=29; // vorn rechts
int SW10=30;
// TASTER INT END
// AKTUATOR VAR
// VOLT SOLL -> vom System/User vorgegebene Stellung der Akt
int volt_s1 = 0; // MOTOR
int volt_s2 = 0; // HL
int volt_s3 = 0; // HR
int volt_s4 = 0; // VL
int volt_s5 = 0; // VR
// VOLT SOLL ENDE
// AKTUATOR PINS
// VOLT IST -> vom Aktuator gemeldete Poition, Analog IN
int volt_i1 = 0; // Motor
int volt_i2 = 0; // HL
int volt_i3 = 0; // HR
int volt_i4 = 0; // VL
int volt_i5 = 0; // VR
// VOLT IST END
// Verfahrgeschwindigkeit der Aktuatoren ANSCHLUSS PINS
int speed1 = 2; // MOTOR PWM Ausgang (2-6)
int speed2 = 3; // HL
int speed3 = 4; // HR
int speed4 = 5; // VL
int speed5 = 6; // VR
// Drehrichtung der Aktuatoren
int M_up = 34;
int M_dw = 35;
int VR_up = 36;
int VR_dw = 37;
int VL_up = 38;
int VL_dw = 39;
int HR_up = 40;
int HR_dw = 41;
int HL_up = 42;
int HL_dw = 43;
void setup()
{
// TASTER SETUP
pinMode(SW1, INPUT);
digitalWrite(SW1, HIGH);
pinMode(SW2, INPUT);
digitalWrite(SW2, HIGH);
pinMode(SW3,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW4,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW5,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW6,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW7,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW8,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW9,INPUT);
digitalWrite(SW1,HIGH);
pinMode(SW10,INPUT);
digitalWrite(SW1,HIGH);
// AKTUATOR MOTOR UP/DOWN PIN SETUP
pinMode(M_up, OUTPUT);
digitalWrite(M_up, HIGH);
pinMode(M_dw, OUTPUT);
digitalWrite(M_dw, HIGH);
pinMode(VR_up,OUTPUT);
digitalWrite(VR_up, HIGH);
pinMode(VR_dw,OUTPUT);
digitalWrite(VR_dw, HIGH);
pinMode(VL_up,OUTPUT);
digitalWrite(VL_up, HIGH);
pinMode(VL_dw,OUTPUT);
digitalWrite(VL_dw, HIGH);
pinMode(HR_up,OUTPUT);
digitalWrite(HR_up, HIGH);
pinMode(HR_dw,OUTPUT);
digitalWrite(HR_dw, HIGH);
pinMode(HL_up,OUTPUT);
digitalWrite(HL_up, HIGH);
pinMode(HL_dw,OUTPUT);
digitalWrite(HL_dw, HIGH);
Serial.begin(9600);
volt_s1 = 180; // Startwert des Akts. In meinem Model kann ich nur bis 130 runter drehen, Anschlag!
volt_s2 = 180;
volt_s3 = 180;
volt_s4 = 180;
volt_s5 = 180;
}
void taster(int up, int dw, int volt_s)
{}
void loop()
{
volt_i1 = map(analogRead(A0) , 0, 1023, 0, 255);
// Code für die Taster volt_s (Volt soll)
if(!digitalRead(SW2))
{
if(volt_s1<255)volt_s1++;
Serial.println("-------");
Serial.println("SOLL: ");
Serial.println(volt_s1); //nur zur Visualisierung
Serial.println("IST: ");
Serial.println(volt_i1);
delay(80);
}
if(!digitalRead(SW1))
{
if(volt_s1!=130)volt_s1--; //Min 130 Anppassung des Pots, in meinem Model kann ich nur bis 130 runter drehen, Anschlag
Serial.println("-------");
Serial.println("SOLL: ");
Serial.println(volt_s1); //nur zur Visualisierung
Serial.println("IST: ");
Serial.println(volt_i1);
delay(80);
}
// Taster Ende
analogWrite(speed1, 255); //Speed manuell
const int intervall = 2;
int error = volt_s1 - volt_i1 ;
// Error --> ist SOLL ueber IST -> Error positiv --> Up Schleife
// ist SOLL unter IST -> Error negativ --> Down Schleife
if (error > 0 && error > intervall) //Up Schleife
{
digitalWrite (M_up, LOW); // An H-Brücke, LOW -> Motor läuft
digitalWrite (M_dw, HIGH);
}
if (error == 0 )
{
digitalWrite(M_up, HIGH);
}
if (error < 0 && error < intervall) //Down Schleife
{
digitalWrite(M_dw, LOW); // An H-Brücke, LOW -> Motor läuft
digitalWrite(M_up, HIGH);
}
if (error == 0)
{
digitalWrite(M_dw, HIGH);
}
}