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:
  • 1 Bewertungen - 3 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Modellbahn in Klein oder Groß
01.02.2018, 21:41
Beitrag #33
RE: Modellbahn in Klein oder Groß
Nabend allerseits

Ich bin mal wieder über ein kleine Problem wo ich etwas hilfe benötige.
Folgendes Thema: Ich möchte auf eine PCF8574 schreiben. Irgendwo habe ich einen Denkfehler. Ich möchte über den PIN LED'S ansteuern.

anbei mein kleiner Sketch :-)

Code:
// Drehscheibensteuerung mit relativer Positionsberechnung
//Pin-Belegung für MEGA 2560
//hinzufügen der Programmbibliothek

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#define PCF85741 0x39
#define PCF85742 0x3A
#define PCF85743 0x3C
          
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 24           // Hier wird angegeben, an welchem digitalen Pin die WS2812 LEDs bzw. NeoPixel angeschlossen sind
#define NUMPIXELS 3      // Hier wird die Anzahl der angeschlossenen WS2812 LEDs bzw. NeoPixel angegeben
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800 );

Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *motor = AFMS.getStepper(200, 2);

int aktuellePos = 2;    //Variable „aktuellePos“ wird angelegt und auf 2 gesetzt
int Pos0 = 1;           //Positionsdefinition
int Pos1 = 2;           //Positionsdefinition
int Pos2 = 3;           //Positionsdefinition
int Pos3 = 4;           //Positionsdefinition
int Pos4 = 5;           //Positionsdefinition
int Pos5 = 6;           //Positionsdefinition
int Pos6 = 7;           //Positionsdefinition
int Pos7 = 10;           //Positionsdefinition

int a = 8;              //Positionsänderung Schrittweite

boolean datenkomm=true;
  
/*
int Taster0=23;     //Gleis 1  
int Taster1=25;     //Gleis 2  
int Taster2=27;     //Gleis 3
int Taster3=29;     //Gleis 4
int Taster4=31;     //Gleis 5  
int Taster5=33;     //Gleis 6  
int Taster6=35;     //Gleis 7  
int Taster7=37;     //Gleis 8  
int Taster8=39;     //180° Drehung
*/
int referenz=2;    // Input für Refenzfahrt


//Funktion zum Lesen des PCF8574-Bausteins
byte PCF85741_Read(int adresse) {
  byte datenByte=0xff;
  Wire.requestFrom(adresse,1);
  if(Wire.available()){
    datenByte=Wire.read();
    datenkomm=true;
    }
  else {
    datenkomm=false;
  }
  return datenByte;
}

//Funktion zum Schreiben auf einen PCF8574-Baustein
void PCF85741_Write(int adresse, byte daten) {
  Wire.beginTransmission(adresse);
  Wire.write(daten);
  Wire.endTransmission();
  delay(5);
}

//Funktion zum Lesen des PCF8574-Bausteins
byte PCF85742_Read(int adresse) {
  byte datenByte=0xff;
  Wire.requestFrom(adresse,1);
  if(Wire.available()){
    datenByte=Wire.read();
    datenkomm=true;
    }
  else {
    datenkomm=false;
  }
  return datenByte;
}

//Funktion zum Schreiben auf einen PCF8574-Baustein
void PCF85742_Write(int adresse, byte daten) {
  Wire.beginTransmission(adresse);
  Wire.write(daten);
  Wire.endTransmission();
  delay(5);
}

void setup ( )
{
  AFMS.begin(1000);
  motor->setSpeed(3);  // 10 rpm
/*  pinMode(Taster0, INPUT_PULLUP);   //Taster für Gleis 1  ist ein Eingang
  pinMode(Taster1, INPUT_PULLUP);   //Taster für Gleis 2  ist ein Eingang
  pinMode(Taster2, INPUT_PULLUP);   //Taster für Gleis 3  ist ein Eingang
  pinMode(Taster3, INPUT_PULLUP);   //Taster für Gleis 4  ist ein Eingang
  pinMode(Taster4, INPUT_PULLUP);   //Taster für Gleis 5  ist ein Eingang
  pinMode(Taster5, INPUT_PULLUP);   //Taster für Gleis 6  ist ein Eingang
  pinMode(Taster6, INPUT_PULLUP);   //Taster für Gleis 7  ist ein Eingang
  pinMode(Taster7, INPUT_PULLUP);   //Taster für Gleis 8  ist ein Eingang
  pinMode(Taster8, INPUT_PULLUP);   //Taster für 180° Drehung  ist ein Eingang
  pinMode(referenz, INPUT_PULLUP);
*/
//Referenzfahrt für Drehscheibe  
    do
     {
      delay(500);
      motor->step(1, BACKWARD, MICROSTEP);
      delay(500);
     }
    while (digitalRead(referenz) == HIGH);

Wire.begin();
  Serial.begin(9600);
  PCF85741_Write(PCF85741,0xff);
  PCF85742_Write(PCF85742,0xff);
  PCF85742_Write(PCF85743,0xff);
  
}
//pixels.setPixelColor(0, pixels.Color(0,255,0)); // Pixel1 leuchtet in der Farbe Grün
//pixels.setPixelColor(0, pixels.Color(255,0,0)); // Pixel1 leuchtet in der Farbe Rot

void loop ( )
{
int c = 0;
int d = 0;
int LED = 0;

byte daten;
  daten=PCF85741_Read(PCF85741);
  if (datenkomm) {
    
  if(bitRead(daten,0)) //Abfrage ob „Taster1“ betätigt ist
    if (aktuellePos > Pos0)
     { c = aktuellePos - Pos0;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos0;     //setzt die Variable „aktuellePos“ auf 0
       LED = 1;
     }    
  
  if(bitRead(daten,1)) //Abfrage ob „Taster2“ betätigt ist
    if (aktuellePos > Pos1)
     { c = aktuellePos - Pos1;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos1;     //setzt die Variable „aktuellePos“ auf 1
       LED = 2;
     }  
      else
     { c = Pos1 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos1;     //setzt die Variable „aktuellePos“ auf 1
       LED = 2;
      }
      
  if(bitRead(daten,2)) //Abfrage ob „Taster3“ betätigt ist
    if (aktuellePos > Pos2)
     { c = aktuellePos - Pos2;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos2;     //setzt die Variable „aktuellePos“ auf 2
       LED = 3;
     }
    else
     { c = Pos2 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos2;     //setzt die Variable „aktuellePos“ auf 2
       LED = 3;
     }
  
  if(bitRead(daten,3)) //Abfrage ob „Taster4“ betätigt ist
    if (aktuellePos > Pos3)
     { c = aktuellePos - Pos3;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos3;     //setzt die Variable „aktuellePos“ auf 3
     }
    else
     { c = Pos3 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos3;     //setzt die Variable „aktuellePos“ auf 3
     }
  
  if(bitRead(daten,4)) //Abfrage ob „Taster5“ betätigt ist
    if (aktuellePos > Pos4)
     { c = aktuellePos - Pos4;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos4;     //setzt die Variable „aktuellePos“ auf 4
     }
    else
     { c = Pos4 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos4;     //setzt die Variable „aktuellePos“ auf 4
     }
  
  if(bitRead(daten,5)) //Abfrage ob „Taster6“ betätigt ist
    if (aktuellePos > Pos5)
     { c = aktuellePos - Pos5;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos5;     //setzt die Variable „aktuellePos“ auf 5
     }
    else
     { c = Pos5 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos5;     //setzt die Variable „aktuellePos“ auf 5
     }
  
  if(bitRead(daten,6)) //Abfrage ob „Taster7“ betätigt ist
    if (aktuellePos > Pos6)
     { c = aktuellePos - Pos6;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos6;     //setzt die Variable „aktuellePos“ auf 6
     }
    else
     { c = Pos6 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos6;     //setzt die Variable „aktuellePos“ auf 6
     }

  if(bitRead(daten,7)) //Abfrage ob „Taster8“ betätigt ist
    if (aktuellePos > Pos7)
     { c = aktuellePos - Pos7;
       d = c * a;      
       motor->step(d, BACKWARD, MICROSTEP);
       aktuellePos = Pos7;     //setzt die Variable „aktuellePos“ auf 7
     }
    else
     { c = Pos7 - aktuellePos ;
       d = c * a ;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos7;     //setzt die Variable „aktuellePos“ auf 7
     }
  }

byte daten;
  daten=PCF85742_Read(PCF85742);
  if (datenkomm) {
    
  if(bitRead(daten,0)) //Abfrage ob „Taster9“ betätigt ist
   {  
   motor->step(100, FORWARD, MICROSTEP);
   }
  }
  daten=PCF85742_Write(PCF85742);
  if (datenkomm) {
  
  if(bitWrite(daten,1)) //Schreiben auf 2.  Bit
    if (LED=1) {pixels.setPixelColor(0, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(0, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot
    if (LED=2) {pixels.setPixelColor(1, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(1, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot              
    if (LED=3) {pixels.setPixelColor(2, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(2, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot
    pixels.show(); // Durchführen der Pixel-Ansteuerung
  }
  
/*
      else
     { c = Pos1 - aktuellePos ;
       d = c * a;      
       motor->step(d, FORWARD, MICROSTEP);
       aktuellePos = Pos1;     //setzt die Variable „aktuellePos“ auf 1
       LED = 2;
      }
        
  
/*  
if(digitalRead(Taster8) == LOW) //Abfrage ob „Taster9“ betätigt ist
  {  
   motor->step(100, FORWARD, MICROSTEP);
  }

if (LED=1) {pixels.setPixelColor(0, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(0, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot
if (LED=2) {pixels.setPixelColor(1, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(1, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot              
if (LED=3) {pixels.setPixelColor(2, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(2, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot

if (aktuellePos=4) {pixels.setPixelColor(3, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(3, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot
if (aktuellePos=5) {pixels.setPixelColor(4, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(4, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot        
if (aktuellePos=6) {pixels.setPixelColor(5, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(5, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot
if (aktuellePos=7) {pixels.setPixelColor(6, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(6, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot        
if (aktuellePos=9) {pixels.setPixelColor(7, pixels.Color(0,255,0));} // Pixel1 leuchtet in der Farbe Grün
               else {pixels.setPixelColor(7, pixels.Color(255,0,0));} // Pixel1 leuchtet in der Farbe Rot            
*/


}



danke und schönen Abend

aldidilein
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2018, 22:07
Beitrag #34
RE: Modellbahn in Klein oder Groß
Bereinige doch erst mal Deinen Sketch von allem unnötigen Ballast. Dann wird er übersichtlicher.

Wenn Du LEDs steuern willst, brauchst Du nichts einzulesen, Taster sind unnötig, Referenzfahrten für Drehscheiben auch usw.

Dann könnten wir uns das mal anschauen.

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
01.02.2018, 22:34
Beitrag #35
RE: Modellbahn in Klein oder Groß
(01.02.2018 22:07)Tommy56 schrieb:  Bereinige doch erst mal Deinen Sketch von allem unnötigen Ballast. Dann wird er übersichtlicher.

Wenn Du LEDs steuern willst, brauchst Du nichts einzulesen, Taster sind unnötig, Referenzfahrten für Drehscheiben auch usw.

Dann könnten wir uns das mal anschauen.

Gruß Tommy

Hallo Tommy

ja werde ich und dann noch eine kurze Beschreibung für den Sketch und das Ziel erklären.

schönen Abend

aldidilein
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.03.2018, 21:56
Beitrag #36
RE: Modellbahn in Klein oder Groß
Hallo und guten Abend

Ich hab mal eine Frage: Ich habe ein Stepper-Shield (Version 1). Ich möchte über den I2C-Bus den Stepper steuern. Leider funtiniert das nicht so wie ich es mir dachte.
Meine Frage ist: Kann ich mit der Bibliotek für die Version 1 auch den I2C-Bus verwenden oder gibt es da Probleme.

schönes Osterfest

aldidilein
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.03.2018, 21:59
Beitrag #37
RE: Modellbahn in Klein oder Groß
(29.03.2018 21:56)aldidilein schrieb:  Hallo und guten Abend

Ich hab mal eine Frage: Ich habe ein Stepper-Shield (Version 1). Ich möchte über den I2C-Bus den Stepper steuern. Leider funtiniert das nicht so wie ich es mir dachte.
Meine Frage ist: Kann ich mit der Bibliotek für die Version 1 auch den I2C-Bus verwenden oder gibt es da Probleme.

schönes Osterfest

aldidilein
Was hat das mit dem ursprünglichen Thema zu tun?
Mache besser ein eigenes Thema dafür mit sinnvoller Überschrift auf.

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
02.04.2018, 19:34
Beitrag #38
RE: Modellbahn in Klein oder Groß
(29.03.2018 21:59)Tommy56 schrieb:  
(29.03.2018 21:56)aldidilein schrieb:  Hallo und guten Abend

Ich hab mal eine Frage: Ich habe ein Stepper-Shield (Version 1). Ich möchte über den I2C-Bus den Stepper steuern. Leider funtiniert das nicht so wie ich es mir dachte.
Meine Frage ist: Kann ich mit der Bibliotek für die Version 1 auch den I2C-Bus verwenden oder gibt es da Probleme.

schönes Osterfest

aldidilein
Was hat das mit dem ursprünglichen Thema zu tun?
Mache besser ein eigenes Thema dafür mit sinnvoller Überschrift auf.

Gruß Tommy

Hallo

Es war/ist für die Modelleisenbahn. Es geht um eine Steuerung einer Drehscheibe. Daher dachte ich, daß Thema wäre interessant. Ok ich werde es ändern.

schönen Abend

aldidilein
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.04.2018, 14:55
Beitrag #39
RE: Modellbahn in Klein oder Groß
Hallo zusammen, möchte an dieser Stelle meine Schaltung vorstellen, mit der die Weichenstellung im Automatikmodus vom Arduino geändert wird und z.B. im manuellen Modus über einen Taster und angesteuerter H- Brücke die Weiche umgeschaltet und ebenfalls die Stellung angezeigt wird.
Es handelt sich um eine Toogle Schaltung , die mit jeder Tastaturänderung ein Änderung z.b. Weichenstellung vornimmt. Das Signal geht wiederum auf eine H- Schaltung, mit der motorische Antriebe ( in diesem Fall motorische Weichen) gesteuert werden.
Vom Arduino kommt eine LOW oder HIGH Signal im Wechsel.
Vielleicht hat jemand Interesse daran.
.pdf  Toogle schaltung mit H- Brücke.pdf (Größe: 134,38 KB / Downloads: 545)

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Optischer Inkrementalgeber ...oder doch ganz anders? Bernd Alexander 16 713 18.03.2019 22:54
Letzter Beitrag: Bitklopfer
  In-door Sensoren für OpenHab oder ähnliches? ansorgj 11 1.398 10.02.2019 23:03
Letzter Beitrag: ansorgj
Lightbulb Steuerung einer Modellbahn mit Arduino und PC via ethernet nilsh 14 13.875 05.10.2018 16:41
Letzter Beitrag: Joachim K.
  Digital-Modellbahn: DCC-Zubehördecoder MicroBahner 9 4.369 03.05.2018 20:39
Letzter Beitrag: MicroBahner
  Dumheit oder doch ein Fehler im System ? Gandalf 7 2.071 03.09.2016 10:16
Letzter Beitrag: amithlon
  Modellzeit / Tag-Nacht Simulation auf einer Modellbahn MK.Matthias 14 8.066 23.05.2016 23:15
Letzter Beitrag: SkobyMobil
Rainbow Hochleistungs-Rechteckgenerator für Silberkolloid oder EMP JoeDorm 4 3.662 05.06.2014 19:57
Letzter Beitrag: rkuehle
  Autoradio/Car PC realisierbar oder zu komplex Simons 0 3.575 25.05.2014 12:08
Letzter Beitrag: Simons

Gehe zu:


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