ja jetzt kommt das jammern bekomme es nicht gebacken weiss nicht warum

möchte 2 servo Motoren gleichzeitig zur Tür Öffnung ansteuern mit einem klappt es gut jedoch sobald ich denn 2 Servo Motor einfüge geht nix mehr.

der Code geht (jedoch nur 1 servo )

wie würdet ihr denn 2 Motor einfügen??? worauf müsste man achten???

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10 // RFID-RC522 SDA
#define RST_PIN 9 // RFID-RC522 RST

const byte servoPin  = 8;  // digital Pin - Servo
const byte buzzerPin = 7;  // digital Pin - Buzzer

Servo myServo;
MFRC522 mfrc522(SS_PIN, RST_PIN);

// Hier die UUID fuer erlaubte Karten eingeben und in "erlaubteKartenCount" 
// Anzahl der Eintraege angeben
long erlaubteKarten[] = { 609880, 359690 };
byte erlaubteKartenCount = 2; 

void setup() {
 Serial.begin(9600);
 SPI.begin();
 mfrc522.PCD_Init();

 pinMode(buzzerPin, OUTPUT);
 pinMode(servoPin, OUTPUT);

 myServo.attach(servoPin);
 myServo.write(0); //Servo auf Grundstellung
}

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(F("Erkannte Kartennummer:"));
 Serial.print(code);

 if(PruefeKartenberechtigung(code) == true) {
   Serial.println(F(" [BERECHTIGT]"));
   KarteErkanntSound();

   myServo.write(180);
   delay(5500); 
   myServo.write(0);
   delay(100);
 } else {
   Serial.println(F(" [NICHT BERECHTIGT]"));
   UnbekannteKarteSound();
 }
 delay(2000);
}

boolean PruefeKartenberechtigung(long KartenUUID) {
 boolean erlaubt = false;
  
 for(int i=0; i < erlaubteKartenCount; i++) {
   if(erlaubteKarten[i] == KartenUUID) {
     erlaubt = true;
   }
 }
 return erlaubt;
}

void UnbekannteKarteSound(void) {
 for (byte i=0; i<3; i++) {
   tone(buzzerPin, 500, 150);
   delay(200);
 }
}

void KarteErkanntSound(void) {
 tone(buzzerPin, 1000, 150);
 delay(200);
 tone(buzzerPin, 1500, 150);
 delay(200);
}

Bitte Code in Code Tags einschließen. Code markieren und </> klicken.

Vermutlich liegt es an der Stromversorgung, die nur für einen Servo ausreicht. Kannst Du ein Schaltbild posten?

Und dann nimm mal einen vernünftigen Titel für dein Problem.

So ist der Beitrag im Forum schlecht einzuordnen.

Die Schaltfläche für die Code-Tags findest du oben links im Editorfenster.

Ich sehe da auch lange delays

Danke für die antworten so nun richtig

würde denn 2 servo extern mit strom versorgen nur das daten kabel würde an denn pin 6 kommen
ein bild von meinen aufbau anbei

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
 
#define SS_PIN 10 // RFID-RC522 SDA
#define RST_PIN 9 // RFID-RC522 RST
 
const byte servoPin  = 8;  // digital Pin - Servo
const byte buzzerPin = 7;  // digital Pin - Buzzer
 
Servo myServo;
MFRC522 mfrc522(SS_PIN, RST_PIN);
 
// Hier die UUID fuer erlaubte Karten eingeben und in "erlaubteKartenCount" 
// Anzahl der Eintraege angeben
long erlaubteKarten[] = { 609880, 359690 };
byte erlaubteKartenCount = 2; 
 
 
 
 
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
 
  pinMode(buzzerPin, OUTPUT);
  pinMode(servoPin, OUTPUT);
 
  myServo.attach(servoPin);
  myServo.write(0); //Servo auf Grundstellung
}
 
 
 
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(F("Erkannte Kartennummer:"));
  Serial.print(code);
 
  if(PruefeKartenberechtigung(code) == true) {
    Serial.println(F(" [BERECHTIGT]"));
    KarteErkanntSound();
 
    myServo.write(180);
    delay(5500); 
    myServo.write(0);
    delay(100);
  } else {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    UnbekannteKarteSound();
  }
  delay(2000);
}
 
 
 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean erlaubt = false;
   
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] == KartenUUID) {
      erlaubt = true;
    }
  }
  return erlaubt;
}
 
 
 
void UnbekannteKarteSound(void) {
  for (byte i=0; i<3; i++) {
    tone(buzzerPin, 500, 150);
    delay(200);
  }
}
 
 
 
void KarteErkanntSound(void) {
  tone(buzzerPin, 1000, 150);
  delay(200);
  tone(buzzerPin, 1500, 150);
  delay(200);
}
[/quote]

derneue:
würde denn 2 servo extern mit strom versorgen nur das daten kabel würde an denn pin 6 kommen
ein bild von meinen aufbau anbei

Bitte auch Masse verbinden sonst funktioniert es nicht.
Grüße Uwe

Sorry, aber da wo du dein Bild ablegst ist wohl nicht dein Ernst.

Und den Titel solltest du ändern. Das kannst du in deinem ersten Post machen.

derneue:
Danke für die antworten so nun richtig

würde denn 2 servo extern mit strom versorgen nur das daten kabel würde an denn pin 6 kommen
ein bild von meinen aufbau anbei

Ist deine Frage noch aktuell?

Kannst du bitte ein Bild senden bei dem man den Aufbau mit 2. Servo sieht?

Betätigst du mit den Servos einen Riegel oder wie machst du das dann mit der Tür?

Gruß Jan

Ja Aufbau mit dem 2 Servo Bild sende ich mit und so sieht der Code aus der noch nicht funktioniert bekomme immer eine fehler Meldung beim Veriviezieren

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
 
#define SS_PIN 10 // RFID-RC522 SDA
#define RST_PIN 9 // RFID-RC522 RST
 
const byte servoPin1  = 8;  // digital Pin1 - Servo
const byte servoPin2  = 6;  // digital Pin2 - Servo
const byte buzzerPin = 7;  // digital Pin - Buzzer
 
Servo servo1;
Servo servo2;
MFRC522 mfrc522(SS_PIN, RST_PIN);
 
// Hier die UUID fuer erlaubte Karten eingeben und in "erlaubteKartenCount" 
// Anzahl der Eintraege angeben
long erlaubteKarten[] = { 609880, 359690 };
byte erlaubteKartenCount = 2; 
 
 
 
 
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
 
  pinMode(buzzerPin, OUTPUT);
  pinMode(servoPin1, OUTPUT);
  pinMode(servoPin2, OUTPUT);
  servo1.attach(servoPin1,;
  servo2.attach(servoPin2);
  servo1.write(0); //Servo auf Grundstellung
  servo2.write(0); //Servo auf Grundstellung
}
 
 
 
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(F("Erkannte Kartennummer:"));
  Serial.print(code);
 
  if(PruefeKartenberechtigung(code) == true) {
    Serial.println(F(" [BERECHTIGT]"));
    KarteErkanntSound();
 
    servo1.write(180);
    delay(5500); 
    servo1.write(0);
    delay(100);
    
    servo2.write
    delay(5500); 
    servo2.write(0);
    delay(100);
    
  } else {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    UnbekannteKarteSound();
  }
  delay(2000);
}
 
 
 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean erlaubt = false;
   
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] == KartenUUID) {
      erlaubt = true;
    }
  }
  return erlaubt;
}
 
 
 
void UnbekannteKarteSound(void) {
  for (byte i=0; i<3; i++) {
    tone(buzzerPin, 500, 150);
    delay(200);
  }
}
 
 
 
void KarteErkanntSound(void) {
  tone(buzzerPin, 1000, 150);
  delay(200);
  tone(buzzerPin, 1500, 150);
  delay(200);
}

die Halterung habe ich mit meinen 3d drucker gedruckt

derneue:
Ja Aufbau mit dem 2 Servo Bild sende ich mit und so sieht der Code aus der noch nicht funktioniert bekomme immer eine fehler Meldung beim Veriviezieren

die Halterung habe ich mit meinen 3d drucker gedruckt

Deine Halterungen sehen aufjedenfall sehenswert aus. ;D Ich denke ein Video folgt auch wenns funktioniert?

Probier mal den Code:

Ich hab nur die Fehler beseitigt bis keine Fehlermeldungen mehr kamen, ob dein Servo jetzt das macht was er soll musst du testen.

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
 
#define SS_PIN 10 // RFID-RC522 SDA
#define RST_PIN 9 // RFID-RC522 RST
 
const byte servoPin1  = 8;  // digital Pin1 - Servo
const byte servoPin2  = 6;  // digital Pin2 - Servo
const byte buzzerPin = 7;  // digital Pin - Buzzer
 
Servo servo1;
Servo servo2;
MFRC522 mfrc522(SS_PIN, RST_PIN);
 
// Hier die UUID fuer erlaubte Karten eingeben und in "erlaubteKartenCount"
// Anzahl der Eintraege angeben
long erlaubteKarten[] = { 609880, 359690 };
byte erlaubteKartenCount = 2;
 
 
 
 
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
 
  pinMode(buzzerPin, OUTPUT);
  pinMode(servoPin1, OUTPUT);
  pinMode(servoPin2, OUTPUT);
  servo1.attach(servoPin1);
  servo2.attach(servoPin2);
  servo1.write(0); //Servo auf Grundstellung
  servo2.write(0); //Servo auf Grundstellung
}
 
 
 
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(F("Erkannte Kartennummer:"));
  Serial.print(code);
 
  if(PruefeKartenberechtigung(code) == true) {
    Serial.println(F(" [BERECHTIGT]"));
    KarteErkanntSound();
 
    servo1.write(180);
    delay(5500);
    servo1.write(0);
    delay(100);
    
    servo2.write(180);
    delay(5500);
    servo2.write(0);
    delay(100);
    
  } else {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    UnbekannteKarteSound();
  }
  delay(2000);
}
 
 
 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean erlaubt = false;
  
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] == KartenUUID) {
      erlaubt = true;
    }
  }
  return erlaubt;
}
 
 
 
void UnbekannteKarteSound(void) {
  for (byte i=0; i<3; i++) {
    tone(buzzerPin, 500, 150);
    delay(200);
  }
}
 
 
 
void KarteErkanntSound(void) {
  tone(buzzerPin, 1000, 150);
  delay(200);
  tone(buzzerPin, 1500, 150);
  delay(200);
}

ja das geht schon nur leider hintereinander und nicht gleichzeitig somit ist die tür noch zu gibt es einen Befehl wo die servo gleichzeitig arbeiten ?

Dann schalte eben beide Servos gleichzeitig, nicht nacheinander.

Ein wenig Verständnis für das, was ein Programm tut, sollte eigentlich von jedem Benutzer zu erwarten sein. Nicht gleich alles, aber mit jedem Versuch etwas mehr...

na ich weiß mittlerweile das Milli() das macht da der Befehl delay es nur nacheinander abarbeitet nur funktioniert es noch nicht!!!

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
 
#define SS_PIN 10 // RFID-RC522 SDA
#define RST_PIN 9 // RFID-RC522 RST
 
const byte servoPin1  = 8;  // digital Pin1 - Servo
const byte servoPin2  = 6;  // digital Pin2 - Servo
const byte buzzerPin = 7;  // digital Pin - Buzzer
 
Servo servo1;
Servo servo2;
MFRC522 mfrc522(SS_PIN, RST_PIN);
 
// Hier die UUID fuer erlaubte Karten eingeben und in "erlaubteKartenCount"
// Anzahl der Eintraege angeben
long erlaubteKarten[] = { 609880, 359690 };
byte erlaubteKartenCount = 2;
 
 
 
 
void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
 
  pinMode(buzzerPin, OUTPUT);
  pinMode(servoPin1, OUTPUT);
  pinMode(servoPin2, OUTPUT);
  servo1.attach(servoPin1);
  servo2.attach(servoPin2);
  servo1.write(0); //Servo auf Grundstellung
  servo2.write(0); //Servo auf Grundstellung
}

 
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(F("Erkannte Kartennummer:"));
  Serial.print(code);
 
  if(PruefeKartenberechtigung(code) == true) {
    Serial.println(F(" [BERECHTIGT]"));
    KarteErkanntSound();
       
int potpin = 0;  
int val;
int milli1;
int milli2;

{
 for(pos = 0; pos <= 179; pos += 1)  
 {                                 
   servo1.write(pos);
   milli1 = millis(55);
   milli2 = milli1;
   while (milli2 - milli1 <= 15)
   
     val = analogRead(potpin);            
     val = map(val, 0, 1023, 0, 179);      
     servo2.write(val);
     milli2 = millis(55);
   
 
 for(pos = 178; pos >= 1; pos-=1)    
                                 
   servo1.write(pos);
   milli1 = millis(55);
   milli2 = milli1;   
   while (milli2 - milli1 <= 15)
   
     val = analogRead(potpin);            
     val = map(val, 0, 1023, 0, 179);      
     servo2.write(val); 
   
  } else {
    Serial.println(F(" [NICHT BERECHTIGT]"));
    UnbekannteKarteSound();
  }
  delay(2000);
}
 
 
 
boolean PruefeKartenberechtigung(long KartenUUID) {
  boolean erlaubt = false;
  
  for(int i=0; i < erlaubteKartenCount; i++) {
    if(erlaubteKarten[i] == KartenUUID) {
      erlaubt = true;
    }
  }
  return erlaubt;
}
 
 
 
void UnbekannteKarteSound(void) {
  for (byte i=0; i<3; i++) {
    tone(buzzerPin, 500, 150);
    delay(200);
  }
}
 
 
 
void KarteErkanntSound(void) {
  tone(buzzerPin, 1000, 150);
  delay(200);
  tone(buzzerPin, 1500, 150);
  delay(200);

Sehr kreativ, was Du da schreibst, aber mit irgendeinem funktionsfähigen Programm hat das wenig zu tun. Geschweifte Klammern sind keine Dekoration, sondern haben in C eine ganz genau festgelegte Bedeutung.

Wie wär's mit etwas einfacherem für den Anfang?

derneue:
ja das geht schon nur leider hintereinander und nicht gleichzeitig somit ist die tür noch zu gibt es einen Befehl wo die servo gleichzeitig arbeiten ?

Du kannst beide Servos parallel schalten. Also beide Servos mit dem selben Pin steuern.

Ja nur leider geht das nicht weil der eine sevo soll sich 90 Grad drehen und der 2 servo 180 Grad
aber dennoch danke Günter für den Tipp
Habe auch schon erfahren wenn ich milli1 anwende dann wird es Probleme mit der Erweiterung geben wie Taster für die innen Tür denn komme ja nicht an die rfid zum Türöffnen heran weil die Tür ja zu ist und der rfid ja draußen ist
gibt es zu Milli alternativen ? oder kann man delay beeinflussen ?
Danke DrDiettrich aber das ist nun mal ein Projekt was anspruchsvoll ist, wie eine led mit ARDUINO an und aus geht ist sicher Verschwendung von Ressourcen, das geht einfacher mit einem Schalter.

Und was ist eigentlich das Problem?

#include <Servo.h>
Servo servo1;
Servo servo2;
void setup() {
 servo1.attach(9);
 servo2.attach(10);
}
void loop() {
 servo1.write(90);
 servo2.write(180);
 delay(5000);
 servo1.write(0);
 servo2.write(0);
 delay(5000);
}

Dies sollte doch beide Servos in die AUF-Richtung fahren, und nach 5 sec wieder zurück ?

Das kann man dann natürlich auch ohne delay() realisieren, und buzzer dazubauen und rfid Leser und so weiter, aber ich versteh erstmal das Problem nicht...

derneue:
Ja nur leider geht das nicht weil der eine sevo soll sich 90 Grad drehen und der 2 servo 180 Grad

Das sind natürlich wichtige Informationen, die es stark erleichtern, das Problem zu verstehen.

derneue:
Habe auch schon erfahren wenn ich milli1 anwende dann wird es Probleme mit der Erweiterung geben wie Taster für die innen Tür denn komme ja nicht an die rfid zum Türöffnen heran weil die Tür ja zu ist und der rfid ja draußen ist.

Sorry, aber ich verstehe nichts.

derneue:
gibt es zu Milli alternativen ? oder kann man delay beeinflussen ?
Danke DrDiettrich aber das ist nun mal ein Projekt was anspruchsvoll ist, wie eine led mit ARDUINO an und aus geht ist sicher Verschwendung von Ressourcen, das geht einfacher mit einem Schalter.

Da schwingt für mich etwas Arroganz mit.
Einfache Beispiele, sind dazu da, zu lernen und zu verstehen.

Allerdings sehe ich in deinem speziellen Fall nicht die Notwendigkeit auf delay() zu verzichten, da du einen streng sequenziellen Ablauf hast, in dem der Prozessor in den 5 Sek Türöffnen nichts zu tun hat ausser zu warten.

Der Code, den du in Post #12 hast läßt sich nicht compilieren.

Aber du hast eine recht komplexen Ablauf. Das geht doch viel einfacher.
So wie Michael geschrieben hat. Vorher noch deine Abfragen bezüglich Karte und Code rein.
dann Servos auffahren.
5sek warten
Servos zufahren.

Nein Arroganz ist da mit Sicherheit nicht nur möchte ich halt so was gerne bauen, andere Sachen habe ich schon.
also lieber Gunter aber habe noch mal über deinen Tipp wegen parallel Schaltung nachgedacht das klingt im Grunde gut werde über eine andere Montage meiner servo es eventuell realisieren so das beide 180 grad öffnen ja programmieren ist echt sehr schwer habe wohl nicht die Voraussetzungen.
und selbst erfahrene Programmierer haben wohl Probleme damit.
werde noch irgend wie ein Schalter versuchen in denn code zu bekommen.
also fühlt euch durch mich nicht provoziert oder dergleichen denn persönlich sollte das doch nicht werden.
und janf228 vielen vielen dank du hast mir sehr weitergeholfen
gruss
Guido (derneue)

Habe es nun doch noch geschafft denn richtigen CODE zu erschaffen :slight_smile: ist doch einfacher als ich dachte :slight_smile:
aber janf228 dir noch mal danke du hast echt geholfen also wenn du mal mit 3d druck oder mit einer CNC Fräse Probleme hast melde dich...
Gruss
Guido