Ich bin an Anfänger und würde gerne wenn der abstand unter einem gewissen wert ist(dieser wird durch einen Ultraschallsensor gemessen) dann soll der Pin 5 HIGH sein, und darf auch erst wieder auf LOW gehen wenn ich einen RFID Chip drangehalten habe. Wie kannmal so was umsetzen??
Vielen Dank im Voraus.

zerlege deine Aufgabe in zwei Teile:
a) Unterschreiten des Abstandes -> PIN auf HIGH
b) Auslesen eines (des richtigen) RFID Tags -> PIN auf LOW
mach zunächst zwei sdparate Sketches.
Danach führst du diese zusammen.
Ok vielen Dank. Die beiden Sketche füge ich dann einfach untereinander.
pronicolas:
Ok vielen Dank. Die beiden Sketche füge ich dann einfach untereinander.
So einfach wird das nicht funktionieren
Du darfst keine 2 Setup() und keine 2 loop() haben. Und die Variablen dürfen nur einmal vorkommen.
Ich habe die beiden Sketche jetzt zusammen gebastelt.Ich habe den MKR1000.Vielleicht könntest du schauen ob es so funktioniert.
rfid.zip (3.31 KB)
na dann probiers halt aus 
Im Ernst:
Wenn du nun in der IDE STRG-T drückst macht die IDE passende Einrückungen.
Dann wirst du auch sehen, dass du um Zeile 77/79 zuviele Klammern hast (die erste würde loop schließen).
Das gehört vermutlich weg.
Dann schau dir mal den else zweig ab Zeile 71 an.
Das entspricht nicht deinem beschriebenen Ablauf.
Unten in Zeile 106 verwendest du eine Magic Number:
digitalWrite (5, LOW);
du hast dafür aber eh schon das Relais definiert:
digitalWrite(relais, LOW);
ist schöner.
zwei Sachen noch:
a) spare etwas mit den Leerzeilen.
b) stelle so kurze sketches direkt in code tags in den Post [eckige Klammer code eckige Klammer zu]
am ende den Tag schließen mit [ / code ]
... und der Hot war wieder mal schneller ...
ok, danke . Was meinst du mit reply. Der editor sagt immer noch Fehler.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
int trigger=7;
int echo=6;
long dauer=0;
long entfernung=0;
int relais=5;
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
void setup()
{
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(relais, OUTPUT);
}
void loop()
{
digitalWrite(trigger, LOW);
delay(5);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
dauer = pulseIn(echo, HIGH);
entfernung = (dauer/2) * 0.03432;
if (entfernung >= 500 || entfernung <= 0)
{
Serial.println("Kein Messwert");
}
else
{
Serial.print(entfernung);
Serial.println(" cm");
}
if (entfernung <= 80)
{
digitalWrite(relais,HIGH);
}
else
{
digitalWrite(relais,LOW);
}
delay(1000);
}
{
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("Die Kartennummer lautet:");
Serial.println(code);
if (code==1031720)
{
digitalWrite(relais, LOW);
}
Dann poste bitte auch die Fehlermeldung.
Entschuldigung, was meinst du mit else, nicht reply . Vielleicht kannst du den so korrigieren , dass die oben beschriebene Handlung funktioniert mit dem MKR1000. Das wäre mir sehr viel Wert.
Hier also die Fehlermeldung.
./opt/arduino-builder/arduino-builder -compile -core-api-version 10611 -hardware opt/arduino-builder/hardware -hardware ./opt/cores -tools opt/arduino-builder/tools -tools ./opt/tools -built-in-libraries opt/libraries/latest -logger humantags -fqbn arduino:samd:mkr1000 -build-cache /tmp -build-path /tmp/556482192/build -verbose -libraries /tmp/556482192/custom -libraries /tmp/556482192/pinned /tmp/556482192/rfid
WARNING: library mfrc522_1_4_0 claims to run on (avr, STM32F1, teensy, esp8266) architecture(s) and may be incompatible with your current board which runs on (samd) architecture(s).
Using library SPI at version 1.0 in folder: /home/ubuntu/opt/cores/arduino/samd/libraries/SPI
Using library mfrc522_1_4_0 at version 1.4.0 in folder: /home/ubuntu/opt/libraries/latest/mfrc522_1_4_0
In file included from /home/ubuntu/opt/cores/arduino/samd/cores/arduino/delay.h:23:0,
from /home/ubuntu/opt/cores/arduino/samd/cores/arduino/Arduino.h:81,
from /tmp/556482192/build/sketch/rfid.ino.cpp:1:
/home/ubuntu/opt/cores/arduino/samd/variants/mkr1000/variant.h:200:37: error: 'SerialUSB' does not name a type
#define Serial SerialUSB
^
/tmp/556482192/rfid/rfid.ino:12:1: note: in expansion of macro 'Serial'
Serial.begin(9600);
^
/tmp/556482192/rfid/rfid.ino:13:1: error: 'SPI' does not name a type
SPI.begin();
^
/tmp/556482192/rfid/rfid.ino:14:1: error: 'mfrc522' does not name a type
mfrc522.PCD_Init();
^
/tmp/556482192/rfid/rfid.ino:67:1: error: expected unqualified-id before '{' token
{
^
exit status 1
Vergleiche mal die Fehlermeldung mit den Anweisungen vor dem Setup.
Da sind einige Anweisungen, die in das Setup gehört.
Eigentlich habe ich STRG T gedrückt, komisch. Trotzdem vielen Dank.
pronicolas:
Eigentlich habe ich STRG T gedrückt, komisch. Trotzdem vielen Dank.
Nachdem noiasca dir den Sketch umgeschrieben hat, fehlt leider noch von dir die Aussage, ob es funktioniert.
Ja, hat alles funktioniert. Tut mir leid, dass ich mich so spät melde.
Frage: Ist es möglich, dass man noch einen Taster einbaut der wenn man ihn drückt sofort, dass Relais schaltet egal ob der Abstand genug ist oder nicht.
Hi
Antwort: Ja (warum sollte Das nicht gehen?)
Solltest Du wissen wollen, wo Du diese Taster-Abfrage einbauen musst (irgendwo in der loop - ich würde ein flag setzen) und bei der Abfrage, ob das Relais JETZT gezogen sein soll (oder anziehen soll), den Taster mit in die Abfrage einbauen - also wäre mein Vorgehen.
MfG
Was meinst du mit Flag? Vielen Dank für die Hilfe im Voraus schon mal.
pronicolas:
Was meinst du mit Flag? Vielen Dank für die Hilfe im Voraus schon mal.
Ein Flag kann eine Variable sein, die du auf HIGH oder LOW setzt und entsprechend abfragst.
Hallo, laut dem Seriel-Monitor funktioniert es. Warum das Relais jetzt nicht schaltet weis ich nicht.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
int trigger = 7;
int echo = 6;
long dauer = 0;
long entfernung = 0;
const int RELAIS_PIN = 5;
int taster=4;
int tasterstatus=0;
void setup()
{
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(RELAIS_PIN, OUTPUT);
SPI.begin();
mfrc522.PCD_Init();
pinMode(taster, INPUT);
}
void loop()
{
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH)
{
digitalWrite(taster, LOW);
delay (5000);
}
else
{
digitalWrite(RELAIS_PIN, HIGH);
}
digitalWrite(trigger, LOW);
delay(5);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
dauer = pulseIn(echo, HIGH);
entfernung = (dauer / 2) * 0.03432;
if (entfernung >= 500 || entfernung <= 0)
{
Serial.println("Kein Messwert");
}
else
{
Serial.print(entfernung);
Serial.println(" cm");
}
if (entfernung <= 80)
{
digitalWrite(RELAIS_PIN, HIGH);
}
//else
//{
// digitalWrite(RELAIS_PIN, LOW);
//}
delay(10);
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("Die Kartennummer lautet:");
Serial.println(code);
if (code == 1507410)
{
digitalWrite(RELAIS_PIN, LOW);
}
}
Hi
Meinst Du ggf. hierdigitalWrite(taster, LOW);
nicht eher den Relais_Pin?
Außer, Du wolltest den Pull-UP AUSSCHALTEN (Du nutzt den Taster in positiver Logik, also mit Pull-Down und gedrückt HIGH-Pegel).
Somit benutzt Du eh keinen Pull-UP, diese falsche Zeile macht also hier Nichts kaputt.
MfG
Das habe ich eben auch gefunden und bereits geändert. Das Problem ist jetzt das der Arduino Uno nicht mehr auf den Ultraschallsensor reagiert und den RFID sondern nur noch auf den Taster.