Go Down

Topic: Verschillende loops (servo) (Read 405 times) previous topic - next topic

mariskawesters

Hallo,

Ik wil een slot maken door een servo en nfc. Ik heb de code al werkend met een beetje copy paste van een duits forum. Nu wil ik dat mijn servo pas terug gaat draaien als ik mijn gtag voor de rfid houd. Dus niet dat de servo na 2 seconden zelf terugdraait. het heendraaien werkt gewoon goed.

tot dusver heb ik dit:

#include <Servo.h>

#include <deprecated.h>
#include <MFRC522.h>
#include <MFRC522Debug.h>
#include <MFRC522Extended.h>
#include <MFRC522Hack.h>
#include <require_cpp11.h>

#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 = 3;// 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[] = { 1052920, 2492530, 171762080 };
byte erlaubteKartenCount = 3;
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)*10);
}
Serial.print(F("Erkannte Kartennummer:"));
Serial.print(code);
if(PruefeKartenberechtigung(code) == true) {
Serial.println(F(" [BERECHTIGT]"));
myServo.write(90);
delay(2000);


for (byte i = 0; i < mfrc522.uid.size; i++) {
code=((code+mfrc522.uid.uidByte)*10);
}
myServo.write(0);
delay(2000);


} else {
Serial.println(F(" [NICHT BERECHTIGT]"));
}
delay(2000);
}
boolean PruefeKartenberechtigung(long KartenUUID) {
boolean erlaubt = false;
for(int i=0; i < erlaubteKartenCount; i++) {
if(erlaubteKarten == KartenUUID) {
erlaubt = true;
}
}
return erlaubt;
}


alvast bedankt

MAS3

Hoi mariskawesters.


Bij je vorige vraag (waar je nooit meer terug geweest bent), was het 1e commentaar dat je code tags moet gebruiken.
De reden daarvoor is dat je dan veel beter leesbare code krijgt, onder andere omdat in dat stukje stuursignalen zijn uitgeschakeld.
Die code is bovendien gemakkelijk te selecteren en te kopieren, zodat er in de IDE gekeken kan worden wat er allemaal gebeurt.

Jouw code werkt niet zoals die hier getoond is, omdat delen van je code als stuursignalen gezien werden, en die stuursignalen worden wel verwerkt, maar niet meer getoond.

Dus plaats je code tussen [code] [/code] tags, dan gebeurt dat niet, en krijg je dit:
Code: [Select]
#include <Servo.h>

#include <deprecated.h>
#include <MFRC522.h>
#include <MFRC522Debug.h>
#include <MFRC522Extended.h>
#include <MFRC522Hack.h>
#include <require_cpp11.h>

#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 = 3;// 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[] = { 1052920, 2492530, 171762080 };
byte erlaubteKartenCount = 3;
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]"));
myServo.write(90);
delay(2000);


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


} else {
Serial.println(F(" [NICHT BERECHTIGT]"));
}
delay(2000);
}
boolean PruefeKartenberechtigung(long KartenUUID) {
boolean erlaubt = false;
for(int i=0; i < erlaubteKartenCount; i++) {
if(erlaubteKarten == KartenUUID[i]) {
erlaubt = true;
}
}
return erlaubt;
}

Voor zover ik kan zien is dat de gerepareerde code.

Deze code is niet zo heel lastig aan te passen naar wat je wil.
Maar ik ga je niet precies voor doen hoe je dat moet doen, want een dik half jaar geleden was je vraag een schoolopdracht, en dit zou best wel eens weer zo'n opdracht van een klas hoger kunnen zijn.
Je moet je gaan afvragen wat je precies wil dat er gebeurt.
En, een deel van wat je leert als je naar "Blink Without Delay" kijkt, je moet meer bij gaan houden wat je aan het doen bent en wat je al gedaan hebt.
Zo lijkt het me best interessant om te weten of het slot er op zit of niet.
En of er misschien iemand binnen is, of niet.
En wie dat dan is.
En ik vraag me ook af of iedereen zomaar het slot open en dicht kan doen.
Lijkt me best lullig als jij naar binnen gaat door je tag bij de reader te houden, en de volgende die langs die reader komt jou opsluit zodat jij niet meer bij de reader kan.
Maar nou zit ik toch jouw schoolopdracht uit te werken.
Die bovenstaande vragen zijn vragen die je zelf ook kunt bedenken.
En het is niet erg moeilijk om de bijbehorende code te maken.

Om een code aan te passen, is het wel noodzakelijk dat je weet wat er in die code gebeurt.
Weet jij dat , snap je de code die je nu in gebruik hebt ?
Want dan word het aanpassen er een heel stuk gemakkelijker op.

Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up