Hallo, brauche mal wieder eure Hilfe,
um Bewegungen auf unserer Vereins Modellbahnanlage zu starten, haben wir bis jetzt Taster mit mechanischem Kontakt verwendet. Da die auf Ausstellungen stark beansprucht werden und deshalb dauernd ausgewechselt werden müssen, wollen wir in Zukunft kapazitive Berührungsschalter verwenden. Der erste Versuch hat auch gut geklappt. Siehe Sketch 1.
Als nächstes Projekt soll der Getriebemotor 10 Umdrehungen machen und dann in Ruhestellung gehen. Gezählt werden die Umdrehungen mit einem Hallsensor. Das Zählprogramm funktioniert auch. Siehe Sketch 2.
Mein Problem ist den Sketch 1 und Sketch 2 zu einem Sketch zu verbinden. Siehe Sketch 3.
Sitze jetzt schon drei Wochen daran und komme auf keinen grünen Zweig.
Würde mich freuen wenn mir jemand weiterhelfen kann.
Sketch 1 und 2 kommen dem einen oder anderem bekannt vor, habe sie von Internet.
Als Ergänzung habe ich noch ein Flussdiagramm geschrieben und hoffe genügend Informationen gegeben zu haben.
Gruß BJS
Was hat das alles mit dem Titel "test" zu tun?
Dann 2 völlig unabhängige Fragen. Ich glaube, Du willst uns verarschen.
Gruß Tommy
ich will niemand verarschen.
ich komme einfach mit dem laden nicht mehr klar
bitte um entschuldigung
bitte den topics löschen
versuche es andersmal
Das ist allerdings ein merkwürdiger Titel.
Den kannst du übrigens selbst ändern und Sketche sehe ich auch keine.
Ein neuer Versuch.
Leider ist es mir nicht gelungen das Flussdiagram in Form einer Word Tabelle zu laden.
Versuche es jetzt mit einem Foto.
Sketch1
int touch01;
int LEDrot01 = 12; // Berührungsschalter gesperrt
int LEDgruen01 = 11; // Berührungsschalter frei
int Relais01 = 10; // Relais Getriebemotor
void setup()
{
Serial.begin(9600);
pinMode(LEDrot01, OUTPUT);
pinMode(LEDgruen01, OUTPUT);
pinMode(Relais01, OUTPUT);
}
void loop()
{
touch01 = readCapacitivePin01(9); // Berührungsschalter Start
Serial.println(touch01);
if (touch01 < 5)
{
digitalWrite(LEDgruen01, LOW);
digitalWrite(LEDrot01, HIGH);
digitalWrite(Relais01, LOW);
}
else
{
delay(100);
digitalWrite(LEDgruen01, HIGH);
digitalWrite(LEDrot01, LOW);
digitalWrite(Relais01, HIGH);
delay(20000);
}
}
uint8_t readCapacitivePin01(int pinToMeasure)
{
volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;
byte bitmask;
port = portOutputRegister(digitalPinToPort(pinToMeasure));
ddr = portModeRegister(digitalPinToPort(pinToMeasure));
bitmask = digitalPinToBitMask(pinToMeasure);
pin = portInputRegister(digitalPinToPort(pinToMeasure));
*port &= ~(bitmask);
*ddr |= bitmask;
delay(1);
uint8_t SREG_old = SREG;
noInterrupts();
*ddr &= ~(bitmask);
*port |= bitmask;
uint8_t cycles = 17;
if (*pin & bitmask) {
cycles = 0;
}
else if (*pin & bitmask) {
cycles = 1;
}
else if (*pin & bitmask) {
cycles = 2;
}
else if (*pin & bitmask) {
cycles = 3;
}
else if (*pin & bitmask) {
cycles = 4;
}
else if (*pin & bitmask) {
cycles = 5;
}
else if (*pin & bitmask) {
cycles = 6;
}
else if (*pin & bitmask) {
cycles = 7;
}
else if (*pin & bitmask) {
cycles = 8;
}
else if (*pin & bitmask) {
cycles = 9;
}
else if (*pin & bitmask) {
cycles = 10;
}
else if (*pin & bitmask) {
cycles = 11;
}
else if (*pin & bitmask) {
cycles = 12;
}
else if (*pin & bitmask) {
cycles = 13;
}
else if (*pin & bitmask) {
cycles = 14;
}
else if (*pin & bitmask) {
cycles = 15;
}
else if (*pin & bitmask) {
cycles = 16;
}
SREG = SREG_old;
*port &= ~(bitmask);
*ddr |= bitmask;
return cycles;
}
Sketch 2
const int buttonPin = 8; // Hall Sensor
const int Relais = 10; // Getriebemotor
boolean buttonState, oldButtonState;
unsigned long anzeigeMillis, aktMillis;
const int anzeigeZeit = 1000;
void setup()
{
pinMode(buttonPin, INPUT_PULLUP);
pinMode(Relais, OUTPUT);
Serial.begin(9600);
buttonState = digitalRead(buttonPin);
oldButtonState = buttonState;
}
void loop()
{
digitalWrite(Relais, HIGH);
static int Puls;
aktMillis = millis();
buttonState = digitalRead(buttonPin);
if ( buttonState && !oldButtonState ) // positive Flanke erkannt
{
delay(10); // Entprellen
Puls++;
}
oldButtonState = buttonState;
if (aktMillis - anzeigeMillis >= anzeigeZeit)
{
anzeigeMillis = aktMillis;
Serial.print("Puls: ");
Serial.println(Puls);
}
if (Puls == 10)
{
digitalWrite(Relais, LOW);
Puls = 0;
delay(1000);
}
}
Sketch 3
int touch01;
int CapacitivePin01 = 9; // Berührungsschalter Start
int LEDrot01 = 12; // Berührungsschalter gesperrt
int LEDgruen01 = 11; // Berührungsschalter frei
int Relais01 = 10; // Relais für Getriebemotor
const int buttonPin = 8; // Hall Sensor
boolean buttonState, oldButtonState;
unsigned long anzeigeMillis, aktMillis;
const int anzeigeZeit = 1000;
void setup()
{
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
pinMode(LEDrot01, OUTPUT);
pinMode(LEDgruen01, OUTPUT);
pinMode(Relais01, OUTPUT);
buttonState = digitalRead(buttonPin);
oldButtonState = buttonState;
}
void loop()
{
static int Puls;
aktMillis = millis();
buttonState = digitalRead(buttonPin);
touch01 = readCapacitivePin01(9);
Serial.println(touch01);
if (touch01 < 4)
{
digitalWrite(LEDgruen01, LOW);
digitalWrite(LEDrot01, HIGH);
digitalWrite(Relais01, LOW);
}
else
{
delay(100);
digitalWrite(LEDgruen01, HIGH);
digitalWrite(LEDrot01, LOW);
digitalWrite(Relais01, HIGH);
if ( buttonState && !oldButtonState ) // positive Flanke erkannt
{
delay(10); // Entprellen
Puls++;
}
oldButtonState = buttonState;
if (aktMillis - anzeigeMillis >= anzeigeZeit)
{
anzeigeMillis = aktMillis;
Serial.print("Puls: ");
Serial.println(Puls);
}
if (Puls == 10)
{
digitalWrite(Relais01, LOW);
Puls = 0;
}
}
}
uint8_t readCapacitivePin01(int pinToMeasure)
{
volatile uint8_t* port;
volatile uint8_t* ddr;
volatile uint8_t* pin;
byte bitmask;
port = portOutputRegister(digitalPinToPort(pinToMeasure));
ddr = portModeRegister(digitalPinToPort(pinToMeasure));
bitmask = digitalPinToBitMask(pinToMeasure);
pin = portInputRegister(digitalPinToPort(pinToMeasure));
*port &= ~(bitmask);
*ddr |= bitmask;
delay(1);
uint8_t SREG_old = SREG;
noInterrupts();
*ddr &= ~(bitmask);
*port |= bitmask;
uint8_t cycles = 17;
if (*pin & bitmask) {
cycles = 0;
}
else if (*pin & bitmask) {
cycles = 1;
}
else if (*pin & bitmask) {
cycles = 2;
}
else if (*pin & bitmask) {
cycles = 3;
}
else if (*pin & bitmask) {
cycles = 4;
}
else if (*pin & bitmask) {
cycles = 5;
}
else if (*pin & bitmask) {
cycles = 6;
}
else if (*pin & bitmask) {
cycles = 7;
}
else if (*pin & bitmask) {
cycles = 8;
}
else if (*pin & bitmask) {
cycles = 9;
}
else if (*pin & bitmask) {
cycles = 10;
}
else if (*pin & bitmask) {
cycles = 11;
}
else if (*pin & bitmask) {
cycles = 12;
}
else if (*pin & bitmask) {
cycles = 13;
}
else if (*pin & bitmask) {
cycles = 14;
}
else if (*pin & bitmask) {
cycles = 15;
}
else if (*pin & bitmask) {
cycles = 16;
}
SREG = SREG_old;
*port &= ~(bitmask);
*ddr |= bitmask;
return cycles;
}
Flussdiagramm