Variablenübergabe klappt nicht
- Loisl_der_Imker
- Autor
- Offline
- Junior Member
Weniger
Mehr
- Beiträge: 29
- Dank erhalten: 3
22 Apr 2019 15:14 #568
von Loisl_der_Imker
Loisl_der_Imker erstellte das Thema Variablenübergabe klappt nicht
Hallo
Ich habe ein Problem woran ich verzweifle - vermutlich ist es aber nur eine Kleinigkeit die ich ändern muss
Der Wert einer Variable soll gesichert werden bevor er mit den neuen Wert überschrieben wird mit:
BattV = Batt;
Batt = analogRead (A0)*1.655;
in der Variable BattV steht aber immer 0 - was mach ich da Falsch?
Für eine PV-Inselanlage möchte ich eine Lastregelung erstellen. Dafür brauch ich die Tendenz ob die Batteriespannung steigt oder sinkt. Je nach dem wird ein Zyklus Zähler hoch oder runter gezählt. Wenn ich mit If - Abfrage direkt je nach Spannungswert Aktionen machen lass verursacht jeder kleine Ausreißer bei den gemessenen Werten gleich ein zu und weg schalten. Daher die Variante mit den Zyklus Zähler und anschließend über Switch Case je nach Zyklus Zähler Wert die entsprechende Aktion.
Das nachfolgende Programm ist vereinfacht um nur das Wesentliche zu zeigen. Über ein Poti 0-3,3V auf A0 kann es einfach simuliert werden.
Dankte für die Hilfe
PS: ich habe mir C über die Beispiele selber angeeignet - hab aber Vorkenntnisse im Programmieren in Basic und von der Elektronikerausbildung in SPS - liegt aber schon einige Zeit zurück
// Variablen als Globale Variablen festlegen
int Batt =0; // Batterie Spannung (was ist wenn Regler Last aus schaltet?)
int BattV =0; // Batterie Spg beim letzen Zyklus
int Zyklus=100;
void setup() {
Serial.begin (9600);
}
void loop() {
Serial.print ("A0 ==> ");
BattV = Batt; // vorherigen Wert sichern für Tendenz ==> warum klappt das nicht?
Batt = analogRead (A0)*1.655;
Serial.print (Batt);
Serial.print (" ");
Serial.print (BattV);
Serial.print (" Zyklus:");
Serial.print (Zyklus);
Serial.println (" ");
delay(100); // kleine Pause bei jeden Zyklus
if (Batt > BattV) {
if (Batt >1200) {
Zyklus++;
}
if (Zyklus > 250 && Batt < 1300){ // solange 13 V nicht überschritten sind keine weiteren Maßnahmen
Zyklus--;
}
}
// gleichbleibende Werte
if (Batt = BattV){
// nix machen
}
// fallende Spannungswerte
if (Batt < BattV){
Zyklus--;
}
if (Zyklus >700) {Zyklus = 700;}
if (Zyklus <10) {Zyklus =10;}
// je Zykluswert Schaltvorgänge
int x=Zyklus/100;
switch(x) {
case 1: // Pumpe Aus Batterie muss erst auf über 13V
// hier steht der Code für den Fall
break;
case 2: // Pumpe Ein ab 200 in Zyklus
break;
case 3: // zusätzliche Last ein
break;
case 4: // ein PV-Modul weg schalten
break;
case 5: // zwei PV-Module weg schalten
break;
case 6: // drei PV-Module weg schalten
break;
case 7: // alle PV-Module weg schalten
break;
default: // kann das Passieren?
Serial.println (" Switch-Case lief auf default!");
break;
}
}
Ich habe ein Problem woran ich verzweifle - vermutlich ist es aber nur eine Kleinigkeit die ich ändern muss
Der Wert einer Variable soll gesichert werden bevor er mit den neuen Wert überschrieben wird mit:
BattV = Batt;
Batt = analogRead (A0)*1.655;
in der Variable BattV steht aber immer 0 - was mach ich da Falsch?
Für eine PV-Inselanlage möchte ich eine Lastregelung erstellen. Dafür brauch ich die Tendenz ob die Batteriespannung steigt oder sinkt. Je nach dem wird ein Zyklus Zähler hoch oder runter gezählt. Wenn ich mit If - Abfrage direkt je nach Spannungswert Aktionen machen lass verursacht jeder kleine Ausreißer bei den gemessenen Werten gleich ein zu und weg schalten. Daher die Variante mit den Zyklus Zähler und anschließend über Switch Case je nach Zyklus Zähler Wert die entsprechende Aktion.
Das nachfolgende Programm ist vereinfacht um nur das Wesentliche zu zeigen. Über ein Poti 0-3,3V auf A0 kann es einfach simuliert werden.
Dankte für die Hilfe
PS: ich habe mir C über die Beispiele selber angeeignet - hab aber Vorkenntnisse im Programmieren in Basic und von der Elektronikerausbildung in SPS - liegt aber schon einige Zeit zurück
// Variablen als Globale Variablen festlegen
int Batt =0; // Batterie Spannung (was ist wenn Regler Last aus schaltet?)
int BattV =0; // Batterie Spg beim letzen Zyklus
int Zyklus=100;
void setup() {
Serial.begin (9600);
}
void loop() {
Serial.print ("A0 ==> ");
BattV = Batt; // vorherigen Wert sichern für Tendenz ==> warum klappt das nicht?
Batt = analogRead (A0)*1.655;
Serial.print (Batt);
Serial.print (" ");
Serial.print (BattV);
Serial.print (" Zyklus:");
Serial.print (Zyklus);
Serial.println (" ");
delay(100); // kleine Pause bei jeden Zyklus
if (Batt > BattV) {
if (Batt >1200) {
Zyklus++;
}
if (Zyklus > 250 && Batt < 1300){ // solange 13 V nicht überschritten sind keine weiteren Maßnahmen
Zyklus--;
}
}
// gleichbleibende Werte
if (Batt = BattV){
// nix machen
}
// fallende Spannungswerte
if (Batt < BattV){
Zyklus--;
}
if (Zyklus >700) {Zyklus = 700;}
if (Zyklus <10) {Zyklus =10;}
// je Zykluswert Schaltvorgänge
int x=Zyklus/100;
switch(x) {
case 1: // Pumpe Aus Batterie muss erst auf über 13V
// hier steht der Code für den Fall
break;
case 2: // Pumpe Ein ab 200 in Zyklus
break;
case 3: // zusätzliche Last ein
break;
case 4: // ein PV-Modul weg schalten
break;
case 5: // zwei PV-Module weg schalten
break;
case 6: // drei PV-Module weg schalten
break;
case 7: // alle PV-Module weg schalten
break;
default: // kann das Passieren?
Serial.println (" Switch-Case lief auf default!");
break;
}
}
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- supporter
- Offline
- Premium Member
Weniger
Mehr
- Beiträge: 135
- Dank erhalten: 12
24 Apr 2019 13:47 #569
von supporter
Variablenübergabe klappt nicht
if (Batt = BattV){
muss sein:
if (Batt == BattV){
muss sein:
if (Batt == BattV){
Folgende Benutzer bedankten sich: Loisl_der_Imker
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Loisl_der_Imker
- Autor
- Offline
- Junior Member
Weniger
Mehr
- Beiträge: 29
- Dank erhalten: 3
14 Mai 2019 19:32 #572
von Loisl_der_Imker
Variablenübergabe klappt nicht
danke Supporter - genau das war mein Fehler
jetzt hab ich wieder ein neues Problem was ähnlich gestrickt ist ... mache dafür ein neunen Beitrag
jetzt hab ich wieder ein neues Problem was ähnlich gestrickt ist ... mache dafür ein neunen Beitrag
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Aktuelle Seite:
- Startseite
- Impressum / Datenschutz / ...
- ESP8266 spezifisch
- Codebesprechung
- Variablenübergabe klappt nicht