Hallo,
ein sehr schönes Projekt, das ich gerne umsetzen möchte.
Leider habe ich folgendes Problem:
Beim Lesen der Card-ID in meinem RFID-Reader erhalte ich bei meinen Karten nur eine 11-stellige ID zum Beispiel 8009C7A25EB und am Ende ein anderes unlesbares 12. Zeichen.
Was mache ich falsch?
Wenn ich diese ID dann in ihrem Projekt nutze, funktioniert zwar der Ultrasonic Sensor (HCSR-04) und berechnet die richtige Distance aber der Reader liest keine ID ein und das Screening funktioniert nicht.
Können sie mir helfen? uengel@gmx.de
Vielen Dank
Die Lösung meines Problems ist:
Die ausgelesene RFID meiner Card ist 8009C7A25EB .
Wenn ich aber den Sketch für Screening verwende, muss ich als ID 28009C7A25EB vorgeben. Dann gibt es eine Übereinstimmung und die Temperatur wird gemessen.
Ich verstehe aber nicht den Unterschied, dass ich im Sketch eine "2" vor der ID eingeben muss.
Hier mein Code:
#include <Wire.h>
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
#include<SoftwareSerial.h>
SoftwareSerial ss(2, 3);
char tag[] ="28009C7A25EB"; // Replace with your own Tag ID
char input[12]; // A variable to store the Tag ID being presented
int count = 0; // A counter variable to navigate through the input[] character array
boolean flag = 0; // A variable to store the Tag match status
const int trigPin = 5;
const int echoPin = 6;
long duration;
int distance;
String RfidReading;
float TempReading;
void setup()
{
Serial.begin(9600); // Initialise Serial Communication with the Serial Monitor
ss.begin(9600); //EM-18 serial communication enabling by 9600 baud rate
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
mlx.begin();
Serial.println("CLEARDATA"); //clears up any data left from previous projects
Serial.println("LABEL,Date,Time,Temperature,Name"); //always write LABEL, to indicate it as first line
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.0340 / 2;
Serial.println("Distance");
Serial.println(distance);
if (distance <= 40){
reader();
}
delay(1000);
}
void reader()
{
if(ss.available()) // Check if there is incoming data in the RFID Reader Serial Buffer.
{
count = 0; // Reset the counter to zero
while(ss.available() && count < 12)
{
input[count] = ss.read(); // Read 1 Byte of data and store it in the input[] variable
Serial.println();
Serial.print(input[count]);
count++; // increment counter
delay(5);
}
if(count == 12) //
{
count =0; // reset counter varibale to 0
flag = 1;
while(count<12 && flag !=0)
{
if(input[count]==tag[count]) {
flag = 1; }// everytime the values match, we set the flag variable to 1
else {
flag= 0; }
count++; // increment i
RfidReading = "4711engel";
}
}
if(flag == 1) // If flag variable is 1, then it means the tags match
{
Serial.println();
Serial.println("Access Allowed!");
temp_read();
Write_streamer();
}
else
{
Serial.println();
Serial.println("Access Denied"); // Incorrect Tag Message
}
for(count=0; count<12; count++)
{
input[count]= 'F';
}
count = 0; // Reset counter variable
}
}
void temp_read()
{
TempReading = mlx.readObjectTempC();
Serial.print(",");
Serial.print("Ambient ");
Serial.print(mlx.readAmbientTempC());
Serial.print(" C ");
Serial.print("Target ");
Serial.print(mlx.readObjectTempC());
Serial.print(" C ");
delay(1000);
}
void Write_streamer()
{
Serial.print("DATA"); //always write "DATA" to Indicate the following as Data
Serial.print(","); //Move to next column using a ","
Serial.print("DATE"); //Store date on Excel
Serial.print(","); //Move to next column using a ","
Serial.print("TIME"); //Store date on Excel
Serial.print(","); //Move to next column using a ","
Serial.print(RfidReading); //Store date on Excel
Serial.print(","); //Move to next column using a ","
Serial.print(TempReading); //Store date on Excel
Serial.print(","); //Move to next column using a ","
Serial.println(); //End of Row move to next row
}
Ausgabe Serial Monitor:
CLEARDATA
LABEL,Date,Time,Temperature,Name
Distance
2
Distance
3
2
8
0
0
9
C
7
A
2
5
E
B
Access Allowed!
,Ambient 24.19 C Target 33.03 C DATA,DATE,TIME,4711engel,33.03,
Distance
92
Ich habe das Tool installiert. Sieht so aus, wir in ihrer Beschreibung.
Für den Serial Monitor verwende ich Port "COM51". Wie kann ich diesen Port im Tool einstellen? Aktuell werden meine Daten zwar im serial monitor angezeigt, aber nicht im ‘PLX-DAQ spreadsheet’ Tool.
Was kann ich machen?
Die serielle Ausgabe ist in Ordnung.
Im Tool "PLX-DAQ-Tabelle" gibt es ein Dropdown-Menü für die Portauswahl. Wählen Sie dort den gewünschten Port aus.
Aber auf dem LCD denke ich, dass Sie anderen Code ausführen. Denn im Code gibt es keine LCD-Druckfunktion.
Vielen Dank für die schnelle Antwort.
Tool "PLX-DAQ-Tabelle" :
Ja, diese Einstellung habe ich gesehen. Mein Problem ist nur, dass der Port = COM51 ist.
Diesen Port finde ich aber nicht in der Auswahl. Diese geht nur bis 15.
Nun zum anderen Problem "Card-Reader":
Hier verwende ich einen sehr ähnlichen sketch zum Einlesen der Card erweitert durch die LCD-Ausgabe.
Hier der Code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(8, 9, 10, 11, 12, 13); //RS,EN,D4,D5,D6,D7
#include <Wire.h>
#include<SoftwareSerial.h>
SoftwareSerial ss(2, 3);
char input[12]; //memory for storing 12 characters of ID
int count = 0; //integer for storing character of ID
void setup()
{
Serial.begin(9600); // Initialise Serial Communication with the Serial Monitor
lcd.begin(16, 2);
ss.begin(9600); //serial communication enabling by 9600 baud rate
lcd.setCursor(0, 0); //move courser to first line
lcd.print("Card-Nr: "); //headline
}
void loop()
{
if(ss.available()) // Check if there is incoming data in the RFID Reader Serial Buffer.
{
count = 0; // Reset the counter to zero
while(ss.available() && count < 12) // Read 12 characters and store them in input array
{
input[count] = ss.read(); // Read 1 Byte of data and store it in the input[] variable
count++; // increment counter
lcd.print(input[count]); //showing 12 characters on LCD one by one
Serial.print(input[count]);
delay(5);
if (count==12)
{
lcd.print(" ");
count = 0; // once 12 characters are read get to start and wait for second ID
lcd.setCursor(0, 1); //move courser to start.
}
}
}
}
Vielleicht haben Sie eine Idee, wie ich den richtigen Port im Tool "PLX-DAQ-Tabelle" einstellen kann?
Viele Grüße
Verwenden Sie die Portnummer im PLX-Tool, Stellen Sie auch die Baudrate ein.
If nobody likes to answer or help, close this forum!!!
I´m still waiting for answer to fix my problem.
My problem is: I cannot use the tool "PLX-DAQ-Tabelle" because my arduino ide use port COM51:
In the Tool the ports i can use are from 1 to 15.
Sourav Gupta
PermalinkKönnen Sie den Code teilen? Wie schließen Sie den Ultraschallsensor an?
- Log in or register to post comments
Joined February 12, 2018 696Monday at 02:11 PM