INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
MoBa Drehscheibensteuerung
08.03.2020, 19:19 (Dieser Beitrag wurde zuletzt bearbeitet: 08.03.2020 20:06 von Dieter K.)
Beitrag #1
MoBa Drehscheibensteuerung
Hallo und guten abend zusammen
Ich bin ganz neu hier und auch auf diesem Gebiet
Bin nun auch seit gut 4 Wochen stolzer? Besitzer eines UNO.
In dieser Zeit habe ich schon unmengen hier als auch ergoogeltes gelesen und angeschaut.
Darf ich mal meinen Plan vorstellen?
In ferner Zukunft soll eine Drehscheibe mit 48 ausgängen und eine Bühnenbesetztanzeige in Form einer LED zum laufen gebracht werden.
Bühne besetzt LED leuchtet
Bühne dreht LED blinkt
Als Sensoren habe ich mir Hall Sensoren oder Reedkontakte vorgestellt.
Als Ausgänge würden 3 Relais reichen.

Wo ich zur Zeit stehe:
Habe mir ein Gehäuse mit integrierter Spannungsversorgung (5,9,12V) gebaut worauf der UNO und 4 Breadboards verbaut sind. mir ging das Gewackel auf den Geist.
Einige Schaltungen habe ich auch schon nachgebaut und teilweise verändert bzw. kombiniert.
Z.B. habe ich ein Codeschloss mit Relaisausgang sowie ein Taster ,der wenn er gedrückt ist eine LED zum Blinken bringt im Moment aufgebaut.
LCD ist an einem MCP23017 und Keypad direkt am UNO angeschlossen.
Funktioniert auch nur was ich seltsam finde, das man sehr schlecht Zahlen eingeben kann wenn der Taster gedrückt ist.

Momentanes Ziel ist es das Keypad auch am I2C anzuschliessen(das wäre das kleinere Problem) so das eine 1 oder 2 stellige Zahl angezeigt werden kann und bei einer bestimmten Zahl ein Relais ansteuern soll.
Ich habe mir schon einen Wolf gesucht aber bisher noch keine LIB bzw. Sketch gefunden die ein bisschen ähnlich wär.
Die Frage ist hauptsächlich ist es mit dem UNO realisierbar oder soll ich auf den Mega umschwenken. Sonst kämen im laufe der Zeit noch 3 MCP23017 dabei und hätte genügend IOs.
Habt bitte ein bisschen nachsicht mit mir und schön das ihr es bis hierhin gelesen habt:-) .

Schönen abend noch
Dieter

Das ist der Code der aktuell installiert ist

Code:
// MCP23017 (Adafruit RGB LCD Shield)
  #include <Wire.h>
  #include <LiquidTWI2.h>
  LiquidTWI2 lcd(0x20);
  #include <Key.h>
#include <Keypad.h>

#define Password_Length 8

int ledPin = 11;
int tasterPin = 12;

int signalPin = 10 ;

char Data[Password_Length];
char Master[Password_Length] = "123A456";
byte data_count = 0, master_count = 0;
bool Pass_is_good;
char customKey;

const byte ROWS = 4;
const byte COLS = 4;

char hexaKeys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {9, 8, 7, 6};
byte colPins[COLS] = {5, 4, 3, 2};

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
  
  void setup() {
   lcd.setMCPType(LTI_TYPE_MCP23017); // must be called before begin()
   lcd.begin(16,2);
   pinMode(ledPin,OUTPUT);
  pinMode(tasterPin,INPUT);
  pinMode(signalPin, OUTPUT);

}
  void loop(){
    
   lcd.setCursor(0,0);
  lcd.print("Enter Password:");
   if (digitalRead(tasterPin)==HIGH){
    digitalWrite(ledPin, HIGH);
    delay(500);                       // wait for a second
  digitalWrite(ledPin, LOW);    // turn the LED off by making the voltage LOW
  delay(500);
  } else {
    digitalWrite(ledPin, LOW);
  }

  customKey = customKeypad.getKey();
  if (customKey){
    Data[data_count] = customKey;
    lcd.setCursor(data_count,1);
    lcd.print(Data[data_count]);
    data_count++;
    }

  if(data_count == Password_Length-1){
    lcd.clear();

    if(!strcmp(Data, Master)){
      lcd.print("Correct");
      digitalWrite(signalPin, HIGH);
      delay(5000);
      digitalWrite(signalPin, LOW);
      }
    else{
      lcd.print("Incorrect");
      delay(1000);
      }
    
    lcd.clear();
    clearData();  
  }
}

void clearData(){
  while(data_count !=0){
    Data[data_count--] = 0;
  }
  return;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.03.2020, 19:24
Beitrag #2
RE: MoBa Drehscheibensteuerung
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 18:57 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2020 18:59 von Tommy56.)
Beitrag #3
RE: MoBa Drehscheibensteuerung
Dass Du schlecht Zahlen eingeben kannst liegt am delay im loop. Während dieser Zeit macht der UNO (fast) nichts.

Hast Du an Deinem tasterPin einen Pulldown-Widerstand gegen GND?

Was willst Du am Keypad eingeben? 1- oder 2-stellige Zahlen (=Zielpunkt der Bühne)?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2020, 18:46 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2020 18:48 von Dieter K.)
Beitrag #4
RE: MoBa Drehscheibensteuerung
(10.03.2020 18:57)Tommy56 schrieb:  Dass Du schlecht Zahlen eingeben kannst liegt am delay im loop. Während dieser Zeit macht der UNO (fast) nichts.

Hast Du an Deinem tasterPin einen Pulldown-Widerstand gegen GND?

Was willst Du am Keypad eingeben? 1- oder 2-stellige Zahlen (=Zielpunkt der Bühne)?

Gruß Tommy

Ja das habe ich mir auch schon sagen lassen wäre besser ich würde über interrupt gehen nur noch keinen blassen schimmer davon

Pulldown ist vorhanden

Richtig . Am Keypad soll der Zielpunkt eingegeben werden von 1 bis 48. Diese Zahl soll dann im Display angezeigt werden. Mit Raute oder Stern soll dann der Startbefehl kommen für links oder rechts Drehung.
Dabei wird dann Rel. 1 = Start und Rel. 2 = links bzw.
Rel.1 = Start und Rel.3 = rechts gestartet.
So ist der Plan.

Frage : Kann man das mit der Programmierung nicht auch anders lösen?
Man fährt das Gleis an vergibt die entsprechende Nummer und speichert das dann so ab????? Also Hardwaremäßige Programmierung?
Die möglichkeiten gibt es ja auch weiß nur nicht ob man es dem UNO auch so beibringen kann, also praktisch selbstlernend

Schönen Abend noch
Dieter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2020, 18:59
Beitrag #5
RE: MoBa Drehscheibensteuerung
Taster mit Interrupt wäre den Teufel mit Belzebub austreiben. Braucht man in 99,99% der Fälle nicht, auch bei Dir nicht.

Du musst Dich von Delay lösen und die Zeitsteuerung über millis() machen. Schau Dir BlinkWithoutDelay an und verstehe es. Dabei kann Dir die Nachtwächtererklärung helfen.

Ansonsten warte bis Modellbahner kommt und Dir einen Weg mit den MobaTools aufzeigt, die diesen Zusammenhang verstecken.

Bei der Zahleneingabe würde ich ein Ende-Zeichen vorsehen oder mit 01 usw. immer 2 Ziffern eingeben.

Code:
Zahl = (1.Ziffer - '0')*10 + 2. Ziffer-'0';
Die Ziffern folgen ab '0' aufeinander, also ist '0'-'0' = 0, '1' - '0' = 1, usw.

Was Du mit "Hardwaremäßiger Programmierung" sagen willst, verstehe ich nicht.

Im Netz gibt es außerdem viele Beiträge, die sich mit Drehscheibe/Drehbühne mit Arduino beschäftigen. Evtl. findest Du da schon entscheidende Anregungen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2020, 22:37 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2020 22:39 von MicroBahner.)
Beitrag #6
RE: MoBa Drehscheibensteuerung
Hallo Dieter,
(08.03.2020 19:19)Dieter K schrieb:  In ferner Zukunft soll eine Drehscheibe mit 48 ausgängen und eine Bühnenbesetztanzeige in Form einer LED zum laufen gebracht werden.
Wow, 48 Ausgänge ist schon eine Hausnummer Cool

(08.03.2020 19:19)Dieter K schrieb:  Funktioniert auch nur was ich seltsam finde, das man sehr schlecht Zahlen eingeben kann wenn der Taster gedrückt ist.
Wie Tommy schon geschrieben hat, liegt das an den delays - die müssen raus.
Ich denke, für das was Du da vorhast, musst Du lernen, wie man blockierfrei programmiert. Und ein paar Kenntnisse über 'endliche Automaten' sind da auch sehr hilfreich. Als Modellbahner kann dir dazu vielleicht mein Tutorial helfen, dass ich extra für die MoBa-Kollegen geschrieben habe. Die dort verwendete Library MobaTools kannst Du über den Bibliotheksmanager der IDE installieren (mobatools im Suchfeld eingeben).
Wenn Du magst, kannst Du dir das mal anschauen, und bei Fragen dazu dich gerne auch hier wieder melden. Wink Die Lösung für dein Problem fällt dann dabei bestimmt mit ab.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.03.2020, 09:39 (Dieser Beitrag wurde zuletzt bearbeitet: 15.03.2020 09:40 von Dieter K.)
Beitrag #7
RE: MoBa Drehscheibensteuerung
Guten morgen

Tommy
Drehscheibenantriebe habe ich im Netz viel gefunden
aber es hatte immer auch mit dem Umbau auf Schrittmotoren zu tun.
Ich möchte den originalen Antrieb beibehalten

Franz-Peter
Bin dabei einen Rundschuppen zu bauen ungefähr so wie er in Berlin steht
Das mit den Delays verstehe ich
werde jetzt in den nächsten Tagen mal meine Hausaufgaben machen.
Nachtwächter habe ich mir auch angesehen wird wohl der richtige Denkanstoss sein
Mobatools geladen werde ich mich durchkämpfen lass mich mal überraschen was ich da zustande bringe.

Noch ein Wort zu den Relais
Rel 2 und 3 Ist ein 2 x Um Relais welches ständig Spannung liefern soll.
Aus z.B. rechts an z.B. links
Könnte man auch mit einer H Brücke realisieren.
Gestartet wird immer mit Rel.1

Schönen Sonntag noch
Dieter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.03.2020, 12:55
Beitrag #8
RE: MoBa Drehscheibensteuerung
Bin dabei meine Hausaufgaben zu machen
Jetzt ist mir aufgefallen das es noch keine Lib für ein Keypad mit I2C gibt.
Bei Github habe ich jedenfalls nichts gefunden.
muß ich wohl mit leben.
LCD mit I2c läuft = 2 Pins
Keypad wären sann 8 Pins
Relais wären 2 Pins
Drehscheibe wären 48 + 1 Pins
jetzt ist mir der Gedanke gekommen die Drehscheibe auch als Matrix zu schalten
wären dann 14 Pins
ist dieser Gedankengang so sinnvoll?

Franz Peter
Ich arbeite mich durch dein Tutorial durch auch wenn es nicht immer einfach für mich ist.
LG und schönen Sonntag
Dieter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste