Tablet Halter automatisieren. Brauch Hilfe

Nenee…

Vorher noch eine Aufforderung:
Bitte ein wunderschönes Kabel nehmen, welches den PE mitführt und das dann bitte ebenso mit dem Aufbau verbinden wie vorgesehen.
Danke!

gigileni:
Das Lauft leider in einer Dauerschleife :frowning:

Nur alles zu verbinden hab ich noch nicht gelernt

Naja, wie sieht denn Dein XCode aus, der bei Dir RFID macht? Der fehlt hier. Da ich nicht weiss, was Du da für ein Shield hast (Stichwort Funktion und PIN-Belegung) bekommst von mir ne Taste an PIN 12.
Kannst dann passend bauen.

HINWEIS: Ich habe DEINE Klappensteuerung nicht verändert. So würde ICH das auch nicht machen.
Da es hier aber (momentan) nur darum geht das Teil auf und zu und den Stecker ran und ab zu bekommen, kann man das so machen…

Der Code soll eigentlich bei einem Tastendruck den Vorgang starten.
Auch wenn die Taste losgelassen wird, sollte der Kram den kompletten Durchlauf machen.
Dann aber stoppen, auch wenn die Taste nicht losgelassen wurde
Erst wieder anfahren, wenn Taste losgelassen UND erneut gedrückt.

// Forumsketch: ungetestet
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // Stecker
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); // Klappe

const int schaltpin = 12;
bool merker = false;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(schaltpin, INPUT_PULLUP);
  AFMS.begin();
}
void loop()
{
  if (!digitalRead(schaltpin))
  {
    Serial.println(F("Taste gedrückt erkannt"));
    if  (!merker)
    {
      Serial.println(F("Starte Klappenmodus"));
      merker = true;
      klappe();
    }
  }
  else
  {
    Serial.println(F("Setze merker zurück - Taste losgelassen"));
    merker = false;
  }
}



void klappe() {

  myMotor->setSpeed(150);
  myMotor->run(BACKWARD); //Stecker Raus

  delay (2000);
  myMotor->run(RELEASE);

  delay (3000); //Sicherheits Pause

  myMotor2->setSpeed(150);
  myMotor2->run(FORWARD); //Klappe aus
  delay (3000);
  myMotor2->run(RELEASE);

  delay (3000); //Sicherheits Pause


  myMotor2->setSpeed(150);
  myMotor2->run(BACKWARD); //Klappe zu
  delay (2000);
  myMotor2->run(RELEASE);

  delay (3000); //Sicherheits Pause



  myMotor->setSpeed(150);
  myMotor->run(FORWARD); //Stecker Rein
  delay (3000);
  myMotor->run(RELEASE);


  delay (8000); // Programm sollte hier Stopen
  
}

Guten Abend

Danke das program funktioniert Super vielen dank !!!
Den PE hab ich angeschlossen :slight_smile: ist ja erstmal nur zum testen alles Verkabelt.

Ich weis nicht wie du es Programmiert hättest, ich beschäftige mich wenn es hochkommt erst seid 2 Wochen mit dem Programmieren davor hab ich so was noch nie gemacht.

Bin aber für Verbesserungen immer offen.

Was meinst du mit dem Xcode, sei mir nicht böse aber wie gesagt ich kenn mich nicht aus.

Die Motor Ansteuerung ist die gleiche wie Adafruit Motor Shield v2 damit geht es.
Hast mir ja selber den Tipp gegeben.

So hab ich das RFID zum laufen bekommen wenn ich es aber in dein Programm mit reinschreibe bekomm ich Probleme im serial Monitor kommen komische Zeichen.

Hier mal der Code, mit dem bekomm ich die Led zum leuchten dachte wenn ich das einfüge die Pins umschrieb geht es.
Leider falsch gedacht.

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup()
{
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
pinMode (2, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine LED angeschlossen)
}

void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;

for (byte i = 0; i < mfrc522.uid.size; i++)
{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Serial.print("2777930:");

Serial.println(code);

// Ab hier erfolgt die erweiterung des Programms.

if (code==2777930) // Wenn der Zahlencode 2777930 lautet...

{ // Programmabschniss öffnen

digitalWrite (2, HIGH); // ...dann soll die LED an Pin 2 leuchten...

delay (1000); // für 5 Sekunden

digitalWrite (2, LOW); // … und danach wieder aus gehen.

} // Programmabschnitt schließen

} // Sketch abschließen

Ich möchte nicht das ihr denkt das ich euch nur die Arbeit machen lass ich probier seid tagen es zum laufen zu bekommen.
ich hab ein 11 Jährigen Sohn mit ihm mach ich auch das Projekt aber er sieht halt nur wenig erfolge wenn ich es alleine mit ihm mache ;-(

Neben bei machen wir noch andere Programme aber dieses Projekt soll Später in die Wohnung daher soll es Perfekt sein und Funktionieren.

Alles andere kommt später

Für das wir uns erst seid 2-3 Wochen mit dem Arduino beschäftigen ist unser wissen ok denk ich!

Kannst du mir nochmal helfen '#my_xy_projekt

gigileni:
Danke das program funktioniert Super vielen dank !!!
Den PE hab ich angeschlossen :slight_smile: ist ja erstmal nur zum testen alles Verkabelt.

Na bitte - da ich derzeit keine Hardware habe, war es ein Schuss ins blaue.
Und ja, da sind schon manche gerade beim testen mit kribbeln in den Fingerkuppen dabei gewesen…

Ich weis nicht wie du es Programmiert hättest, ich beschäftige mich wenn es hochkommt erst seid 2 Wochen mit dem Programmieren davor hab ich so was noch nie gemacht.

ich hab ein Sohn mit ihm mach ich auch das Projekt

Och - nicht versuchen auf die Tränendrüse zu drücken…
Aber ist schon ok - das bekommt ihr hin.

Bevor ich das mit dem nfc/rfid testen will, dann mal meinen Gedankengang, was bei Dir hakt.
Spiel mal den folgenden Code ein - er ist etwas abgewandelt, basiert aber auf dem was bisher war und ändert Deine Grundlage nicht.

Auslöser ist die Taste. Die soll die LED einschalten und die Klappe bewegen.
Wenn Du die Taste loslässt, soll die LED ausgehen.

Wann geht die LED aus? :wink:

Zusatzfrage: Stell Dir vor, Du müsstest mit einem Tastendruck das System anhalten - warum auch immer - wieviel Zeit würde vergehen…

// Forensketch: ungetestet - Auslöser bei ca 24 Sekunden
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // Stecker
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); // Klappe

const int schaltpin = 12;
const int LED = LED_BUILTIN;
void setup() {
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(schaltpin, INPUT_PULLUP);
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
  AFMS.begin();

}
void loop()
{
  klappe(tasterabfrage);
}

bool tasterabfrage()
{
  static bool merker = false;
  bool tastegedrueckt = false;

  if (!digitalRead(schaltpin))
  {
    Serial.println(F("Taste gedrückt erkannt"));
    if  (!merker)
    {
      Serial.println(F("Starte Klappenmodus"));
      merker = true;
      tastegedrueckt = true;
    }
  }
  else
  {
    Serial.println(F("Setze merker zurück - Taste losgelassen"));
    merker = false;
  }
  return tastegedrueckt;
}

void klappe(const bool taste)
{
  if (taste) // übergebener Status HIGH
  {
    Serial.println(F("Klappenstart - gedrückte Taste erkannt"));
    digitalWrite(LED, HIGH);
    myMotor->setSpeed(150);
    myMotor->run(BACKWARD); //Stecker Raus
    delay (2000);
    myMotor->run(RELEASE);
    delay (3000); //Sicherheits Pause
    myMotor2->setSpeed(150);
    myMotor2->run(FORWARD); //Klappe aus
    delay (3000);
    myMotor2->run(RELEASE);
    delay (3000); //Sicherheits Pause
    myMotor2->setSpeed(150);
    myMotor2->run(BACKWARD); //Klappe zu
    delay (2000);
    myMotor2->run(RELEASE);
    delay (3000); //Sicherheits Pause
    myMotor->setSpeed(150);
    myMotor->run(FORWARD); //Stecker Rein
    delay (3000);
    myMotor->run(RELEASE);
    delay (8000); // Programm sollte hier Stopen
  }
  else  // Wenn nicht HIGH
  {
    Serial.println(F("LED aus - nicht gedrückte Taste erkannt"));
    digitalWrite(LED, LOW);
  }
}

Hallo

Also das Letzte Programm geht nicht die Klappe Öffnet sich und Schließt sich dauerhaft.

Also das wir und richtig verstehen ich wollte es so umsetzen.

RFID schlüssel an den Sensor hinhalten

kurzes Signal / Pippen

Ablauf Kappen Steuerung

Programm Ende

Dieser Code Funktioniert mit dem Pieper
Aber ich bekomm es nicht Kombiniert mit dein Programm wo du als erstes gepostet hast

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup()
{
Serial.begin(115200);
SPI.begin();
mfrc522.PCD_Init();
pinMode (2, OUTPUT); // Der Pin 2 ist jetzt ein Ausgang (Hier wird eine Pipper angeschlossen)
}

void loop()
{
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}

if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}

long code=0;

for (byte i = 0; i < mfrc522.uid.size; i++)
{
code=((code+mfrc522.uid.uidByte[i])*10);
}

Serial.print("2777930:");

Serial.println(code);

// Ab hier erfolgt die erweiterung des Programms.

if (code==2777930) // Wenn der Zahlencode 2777930 lautet...

{ // Programmabschniss öffnen

digitalWrite (2, HIGH); // ...dann soll die Pipperer an Pin 2 ein kurzes signal gebebn und die Klpappen steuerung starten...

delay (1000); // für 1 Sekunden

digitalWrite (2, LOW); // … und danach wieder aus gehen und das Programm der Klappen steuerung ablaufen.

} // Programmabschnitt schließen

} // Sketch abschließen

Im Serial Monitor ist ein Dauersignal und Last mein Program Abstürzen

[ltr][code]
// Forumsketch: ungetestet
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // Stecker
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); // Klappe

const int schaltpin = 12;
bool merker = false;

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(schaltpin, INPUT_PULLUP);
  AFMS.begin();
}
void loop()
{
  if (!digitalRead(schaltpin))
  {
    Serial.println(F("Taste gedrückt erkannt"));
    if  (!merker)
    {
      Serial.println(F("Starte Klappenmodus"));
      merker = true;
      klappe();
    }
  }
  else
  {
    Serial.println(F("Setze merker zurück - Taste losgelassen"));
    merker = false;
  }
}



void klappe() {

  myMotor->setSpeed(150);
  myMotor->run(BACKWARD); //Stecker Raus

  delay (2000);
  myMotor->run(RELEASE);

  delay (3000); //Sicherheits Pause

  myMotor2->setSpeed(150);
  myMotor2->run(FORWARD); //Klappe aus
  delay (3000);
  myMotor2->run(RELEASE);

  delay (3000); //Sicherheits Pause


  myMotor2->setSpeed(150);
  myMotor2->run(BACKWARD); //Klappe zu
  delay (2000);
  myMotor2->run(RELEASE);

  delay (3000); //Sicherheits Pause



  myMotor->setSpeed(150);
  myMotor->run(FORWARD); //Stecker Rein
  delay (3000);
  myMotor->run(RELEASE);


  delay (8000); // Programm sollte hier Stopen

Serial.println(F(“Setze merker zurück - Taste losgelassen”));

Diesen Text hab ich Permanent in der Anzeige und danach bleibt dar Rechner hängen

Wenn ich den Text entferne passt es.

Aber wie bekomm ich jetzt das Programm vom RFID mit dein Programm kombiniert.

[/code]

gigileni:
Diesen Text hab ich Permanent in der Anzeige und danach bleibt dar Rechner hängen

Sorry, ich habs verkackt.
Die Zeile muss so aussehen:

  klappe(tasterabfrage());

Da fehlt ein Klammerpaar..

Und ja, ich hab Dich IMHO richtig verstanden.
Probiers aus, sag Bescheid.

Und dann: Welchen Sensor hast Du?

Auslöser ist die Taste. Die soll die LED einschalten und die Klappe bewegen.
Wenn Du die Taste loslässt, soll die LED ausgehen.

Das geht leider nicht

Wann geht die LED aus? ;)

Aktuell Leuchtet die LED etwa 6-7 nach dem des Programmes nach.
Led hab ich an Pin 13 angeschlossen. Ist das richtig

Zusatzfrage: Stell Dir vor, Du müsstest mit einem Tastendruck das System anhalten - warum auch immer - wieviel Zeit würde vergehen....

Eine Minute bis ich den Stecker aus dem System ziehe. Wenn ich dich richtig verstanden habe.

19:56:20.700 -> Setze merker zurück - Taste losgelassen

19:56:20.700 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.700 -> Setze merker zurück - Taste losgelassen

19:56:20.700 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.700 -> Setze merker zurück - Taste losgelassen

19:56:20.700 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.700 -> Setze merker zurück - Taste losgelassen

19:56:20.735 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.735 -> Setze merker zurück - Taste losgelassen

19:56:20.735 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.735 -> Setze merker zurück - Taste losgelassen

19:56:20.735 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.735 -> Setze merker zurück - Taste losgelassen

19:56:20.735 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.735 -> Setze merker zurück - Taste losgelassen

19:56:20.735 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.768 -> Setze merker zurück - Taste losgelassen

19:56:20.768 -> LED aus - nicht gedrückte Taste erkannt

19:56:20.768 -> Setze merker zurück - Taste losgelassen

19:56:20.768 -> LED aus - nicht gedrückte Taste erkannt

Was ich nicht versteh im SM lauft Permanent diese anzeige runter.

Und dann: Welchen Sensor hast Du?

Meinst du den RFID Sensor? Es steht RFID-RC522 drauf Hersteller steht nicht drauf.

gigileni:
Das geht leider nicht

Doch doch - das ist die Reaktionszeit...
Jetzt hast den Effekt gesehen, das Du erst ewig warten musst, bis der Code an der Stelle ist um wieder auszuwerten was auf der Taste passiert.
Das sind die ganzen delays in der Klappe().
In Deinem Fall - ich hatte es ja schon ran geschrieben - wird erst nach ca. 24 Sekunden auf die losgelassene Taste reagiert.
In dieser Zeit - also den 24 Sekunden - bist Du in Deiner Klappen-auf-zu-Procedure gefangen und kannst auf nichts anderes reagieren.

Das war mein Einwand, das ich das nicht so machen würde.
Belassen wir es bei dem Ausflug. Das wird dann wieder interessant, wenn Du das tab nicht sauber in der Führung hast und das Teil zu geht :wink:

Zum Sensor...
Ist der baugleich mit dem?

Dann versuch ichs nachher noch...

So sieht er aus

Ich weis was du meinst
Mit Zeiten zu arbeiten ist immer Schlecht Normal mit Schrittketten oder mit Endschalter.
Leider hab ich das schon lange nicht mehr gemacht kenn es noch von der s7, und mit Endschalter wollte ich nicht arbeiten.

Werd eh noch eine Hardware Strombegränzung einbauen, wenn es mal zu einem Fehler kommt schalten die Motoren eh ab.
Aber erst sollte mal alles laufen.

Danke für deine Hilfe

gigileni:
Mit Zeiten zu arbeiten ist immer Schlecht
Aber erst sollte mal alles laufen.

Naja - Zeiten sind schon ok - nur eben nicht sich im Kreis drehendes Nichts.
Dann versuch das mal:
[edit] die zwei original vorhandenen returns noch mit definiertem Zustand versehen[/edit]

// Forensketch: ungetestet
// basiert auf: https://forum.arduino.cc/index.php?topic=724533.msg4884260#msg4884260
// basiert auf: https://forum.arduino.cc/index.php?topic=724533.msg4885105#msg4885105

#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"

Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *myMotor = AFMS.getMotor(1); // Stecker
Adafruit_DCMotor *myMotor2 = AFMS.getMotor(2); // Klappe

#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(115200);
  Serial.println(F("Start..."));
  SPI.begin();
  mfrc522.PCD_Init();
  AFMS.begin();
}
void loop()
{
  klappe(rfidabfrage());
}

bool rfidabfrage()
{
  bool rfidok = false;
  long code = 0;
  if (!mfrc522.PICC_IsNewCardPresent())
  {
    return rfidok;
  }
  if (!mfrc522.PICC_ReadCardSerial())
  {
    return rfidok;
  }
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    code = ((code + mfrc522.uid.uidByte[i]) * 10);
  }
  Serial.print("2777930:");
  Serial.println(code);
  // Ab hier erfolgt die erweiterung des Programms.
  if (code == 2777930) // Wenn der Zahlencode 2777930 lautet...
  {
    rfidok=HIGH;
  } // Programmabschnitt schließen
  return rfidok;
} // Sketch abschließen


void klappe(const bool taste)
{
  if (taste) // übergebener Status HIGH
  {
    Serial.println(F("Klappenstart ausgelöst"));
    digitalWrite(LED, HIGH);
    myMotor->setSpeed(150);
    myMotor->run(BACKWARD); //Stecker Raus
    delay (2000);
    myMotor->run(RELEASE);
    delay (3000); //Sicherheits Pause
    myMotor2->setSpeed(150);
    myMotor2->run(FORWARD); //Klappe aus
    delay (3000);
    myMotor2->run(RELEASE);
    delay (3000); //Sicherheits Pause
    myMotor2->setSpeed(150);
    myMotor2->run(BACKWARD); //Klappe zu
    delay (2000);
    myMotor2->run(RELEASE);
    delay (3000); //Sicherheits Pause
    myMotor->setSpeed(150);
    myMotor->run(FORWARD); //Stecker Rein
    delay (3000);
    myMotor->run(RELEASE);
    delay (8000); // Programm sollte hier Stopen
  }
}

Bitte erst compilieren und sehen, ob der fehlerfrei ist.

/var/folders/_c/d7tcj6754lx01d7t6b86g3b80000gn/T/arduino_modified_sketch_569755/sketch_feb05b.ino: In function 'void klappe(bool)':
sketch_feb05b:64:18: error: 'LED' was not declared in this scope
     digitalWrite(LED, HIGH);
                  ^~~
Mehrere Bibliotheken wurden für "Adafruit_MotorShield.h" gefunden
 Benutzt: /Users/.../Documents/Arduino/libraries/Adafruit_Motor_Shield_V2_Library
 Nicht benutzt: /Users/.../Documents/Arduino/libraries/Adafruit_Motor_Shield_V2_Library-master
Mehrere Bibliotheken wurden für "MFRC522.h" gefunden
 Benutzt: /Users/.../Documents/Arduino/libraries/MFRC522
 Nicht benutzt: /Users/.../Documents/Arduino/libraries/rfid-master
exit status 1
'LED' was not declared in this scope

Das hab ich rausbekommen

[edit] die zwei original vorhandenen returns noch mit definiertem Zustand versehen[/edit]

Was meinst du damit

Für die Woche ist es erstmal gelaufen ich glaub das RFID Module ist defekt ich bekomm keine ausgäbe mehr egal was für ein Programm ich versuche :frowning:

Sobald ich Ersatz habe versuche ich es nochmal

Danke

gigileni:

     digitalWrite(LED, HIGH);

'LED' was not declared in this scope

Ja, die Zeile muss da noch raus.
Da Du den PIN brauchst, ist die LED nicht deklariert - und geht nicht.

Wahnsin es geht!!!!!!!!

Jetzt nur noch den Summer dan ist das Projekt endlich Fertig
Was setzt ich da rein.

Vielen Vielen Dank

gigileni:
Wahnsin es geht!!!!!!!!

Nichts anderes erwarte ich von dem, was ich hier kund tue.
Ja und?

Dann kannst Du bitte eine kleine Doku verfassen und das hier:

publizieren mit nem Link auf diesen Thread und alles schick.

Danke für Deine Nachricht - es freut mich ehrlich für Dich!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.