Hallo,
wie so viele hab auch ich ein Problem mit meinem Sketch.
Eigentlich funktioniert alles so wie ich es möchte, bis auf die Vergleichsfunktion, die nur zur Hälfte richtig zählt. Es geht um die Steuerung einer Hebebühne mit 2 Motoren.
diese laufen nicht synchron.
Der Hersteller hatte dafür eine spezielle Platine verbaut. Die ist leider abgeraucht. Die Bühne ist 35 Jahre alt, somit gibt es keinen Ersatz.
Dafür hab ich diesen Sketch für einen Arduino Nano erstellt. Er bekommt Steuerimpulse von den beiden Lichtschranken, die die Umdrehungen messen. je nach dem welchen Motor schneller dreht wird so lange durch Relais abgeschaltet bis alle Impulse gleich sind. Beim Hochfahren funktioniert alles richtig, jedoch zählt er beim runterfahren nicht richtig.
Ich hab den Code mal angehängt. Evtl. hat jemand eine Idee was ich falsch gemacht habe.
Danke im Voraus.
Dieter
// Zähler 30.10 läuft, pinmode geändert
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int button_li = 3; // Lichtschranke 1, links
int button_re = 4; // Lichtschranke 2, rechts
int Motor_li = 5; // Relais 1 zum Motor links
int Motor_re = 6; // Relais 2 zum Motor rechts
int Relais_auf = 7; // Relais 3 auf
int Relais_ab = 8; // Relais 4
int Schalter_auf = 9;
int Schalter_ab = 10;
long zaehler_li;
long zaehler_re;
int zaehler_liLastState = 1;
int zaehler_reLastState = 1;
void setup() {
pinMode(button_li, INPUT_PULLUP);
pinMode(button_re, INPUT_PULLUP);
digitalWrite(Relais_auf, HIGH);
digitalWrite(Relais_ab, HIGH);
digitalWrite(Motor_li,HIGH);
digitalWrite(Motor_re, HIGH);
pinMode(Motor_li, OUTPUT); // links Relais 1 links
pinMode(Motor_re, OUTPUT); // rechts Relais 2 rechts
pinMode(Relais_auf, OUTPUT); // Relais 3 auf
pinMode(Relais_ab, OUTPUT); // Relais 4 ab
pinMode(Schalter_auf, INPUT_PULLUP);
pinMode(Schalter_ab, INPUT_PULLUP);
zaehler_li = 500;
zaehler_re = 500;
zaehler_liLastState = 1;
zaehler_reLastState = 1;
lcd.init();
lcd.backlight();
lcd.clear(); }
void loop() {
if (digitalRead(Schalter_auf) == LOW)
{digitalWrite(Relais_auf,LOW);}
if (digitalRead(Schalter_auf) == HIGH)
{digitalWrite(Relais_auf, HIGH);}
if (digitalRead(Schalter_ab) == LOW)
{digitalWrite(Relais_ab,LOW);}
if (digitalRead(Schalter_ab) == HIGH)
{digitalWrite(Relais_ab, HIGH);}
// Zählen Lichtschranke 1
byte zaehler_liNewState = digitalRead(button_li);
if (zaehler_liNewState == 0 && zaehler_liLastState == 1 && digitalRead(Schalter_auf))
{ zaehler_li++ ; }
if (zaehler_liNewState == 0 && zaehler_liLastState == 1 && digitalRead(Schalter_ab))
{ zaehler_li-- ; }
zaehler_liLastState = zaehler_liNewState;
lcd.setCursor(0, 0);
lcd.print(zaehler_li);
lcd.setCursor(4, 0);
lcd.print("Motor l inks");
//Zählen Lichtschranke 2
byte zaehler_reNewState = digitalRead(button_re);
if (zaehler_reNewState == 0 && zaehler_reLastState == 1 && digitalRead(Schalter_auf))
{ zaehler_re++ ; }
if (zaehler_reNewState == 0 && zaehler_reLastState == 1 && digitalRead(Schalter_ab))
{ zaehler_re-- ; }
zaehler_reLastState = zaehler_reNewState;
lcd.setCursor(0, 1);
lcd.print(zaehler_re);
lcd.setCursor(4, 1);
lcd.print("Motor 2 rechts");
// Vergleichen Lichtschrankee 1-------------------------
if (zaehler_li > (zaehler_re+6))
{digitalWrite(Motor_li, HIGH); }
if (zaehler_re == zaehler_li)
{digitalWrite(Motor_li, LOW);}
// Vergleichen Lichtschranke 2 -----------
if (zaehler_re > (zaehler_li+6))
{digitalWrite(Motor_re, HIGH); }
if (zaehler_re == (zaehler_li))
{ digitalWrite(Motor_re,LOW);}}
```cpp
// Zähler 30.10 läuft, pinmode geändert
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int button_li = 3; // Lichtschranke 1, links
int button_re = 4; // Lichtschranke 2, rechts
int Motor_li = 5; // Relais 1 zum Motor links
int Motor_re = 6; // Relais 2 zum Motor rechts
int Relais_auf = 7; // Relais 3 auf
int Relais_ab = 8; // Relais 4
int Schalter_auf = 9;
int Schalter_ab = 10;
long zaehler_li;
long zaehler_re;
int zaehler_liLastState = 1;
int zaehler_reLastState = 1;
void setup() {
pinMode(button_li, INPUT_PULLUP);
pinMode(button_re, INPUT_PULLUP);
digitalWrite(Relais_auf, HIGH);
digitalWrite(Relais_ab, HIGH);
digitalWrite(Motor_li,HIGH);
digitalWrite(Motor_re, HIGH);
pinMode(Motor_li, OUTPUT); // links Relais 1 links
pinMode(Motor_re, OUTPUT); // rechts Relais 2 rechts
pinMode(Relais_auf, OUTPUT); // Relais 3 auf
pinMode(Relais_ab, OUTPUT); // Relais 4 ab
pinMode(Schalter_auf, INPUT_PULLUP);
pinMode(Schalter_ab, INPUT_PULLUP);
zaehler_li = 500;
zaehler_re = 500;
zaehler_liLastState = 1;
zaehler_reLastState = 1;
lcd.init();
lcd.backlight();
lcd.clear(); }
void loop() {
if (digitalRead(Schalter_auf) == LOW)
{digitalWrite(Relais_auf,LOW);}
if (digitalRead(Schalter_auf) == HIGH)
{digitalWrite(Relais_auf, HIGH);}
if (digitalRead(Schalter_ab) == LOW)
{digitalWrite(Relais_ab,LOW);}
if (digitalRead(Schalter_ab) == HIGH)
{digitalWrite(Relais_ab, HIGH);}
// Zählen Lichtschranke 1
byte zaehler_liNewState = digitalRead(button_li);
if (zaehler_liNewState == 0 && zaehler_liLastState == 1 && digitalRead(Schalter_auf))
{ zaehler_li++ ; }
if (zaehler_liNewState == 0 && zaehler_liLastState == 1 && digitalRead(Schalter_ab))
{ zaehler_li-- ; }
zaehler_liLastState = zaehler_liNewState;
lcd.setCursor(0, 0);
lcd.print(zaehler_li);
lcd.setCursor(4, 0);
lcd.print("Motor l inks");
//Zählen Lichtschranke 2
byte zaehler_reNewState = digitalRead(button_re);
if (zaehler_reNewState == 0 && zaehler_reLastState == 1 && digitalRead(Schalter_auf))
{ zaehler_re++ ; }
if (zaehler_reNewState == 0 && zaehler_reLastState == 1 && digitalRead(Schalter_ab))
{ zaehler_re-- ; }
zaehler_reLastState = zaehler_reNewState;
lcd.setCursor(0, 1);
lcd.print(zaehler_re);
lcd.setCursor(4, 1);
lcd.print("Motor 2 rechts");
// Vergleichen Lichtschrankee 1-------------------------
if (zaehler_li > (zaehler_re+6))
{digitalWrite(Motor_li, HIGH); }
if (zaehler_re == zaehler_li)
{digitalWrite(Motor_li, LOW);}
// Vergleichen Lichtschranke 2 -----------
if (zaehler_re > (zaehler_li+6))
{digitalWrite(Motor_re, HIGH); }
if (zaehler_re == (zaehler_li))
{ digitalWrite(Motor_re,LOW);}}