om te beginnen zal ik hier de code posten, omdat ik er gewoon donders trots op ben, het was een kreng om te schrijven, en dit is versie 3.4 (!), de eerste volledig werkende:
int RFIDResetPin = 13;
char tag1[13] = "060097889A83";
char tag2[13] = "060097889F86"; //dit zijn de tag nummers
#include <Servo.h>
Servo myservo;
Servo myservo1; // het koppelen van de servo's
void setup(){
Serial.begin(9600); //dit is de taal (serial 9600) waarmee de RFID reader communiceert
pinMode(RFIDResetPin, OUTPUT);
digitalWrite(RFIDResetPin, HIGH);
myservo.attach(10);
myservo1.attach(9);
}
void loop(){
char tagString[13];
int index = 0;
boolean reading = false;
myservo.write(0);
myservo1.write(0); // de servo's hadden nog wel eens problemen met het vinden van de beginstand
while(Serial.available()){
int readByte = Serial.read(); //read next available byte
if(readByte == 2) reading = true; //begining of tag
if(readByte == 3) reading = false; //end of tag
if(reading && readByte != 2 && readByte != 10 && readByte != 13){
//store the tag
tagString[index] = readByte;
index ++;
Serial.println(tagString); // het hele bovenstaande is de code die de tag leest, en dus bepaald of hij in het systeem staat
}
}
checkTag(tagString); //Check if it is a match
clearTag(tagString); //Clear the char of all value
resetReader(); //reset the RFID reader
}
void checkTag(char tag[]){
///////////////////////////////////
//Check the read tag against known tags
///////////////////////////////////
if(strlen(tag) == 0) return; //empty, no need to contunue
if(compareTag(tag, tag1)){ // if matched tag1, do this
Drop1(10);
}else if(compareTag(tag, tag2)){ //if matched tag2, do this
Drop2(9);
}else{
Serial.println(tag); //read out any unknown tag
}
}
void Drop1(int pin){ // dan de Drop commands, die de servo aansturen en dus het balletje droppen
Serial.println(pin);
myservo.write(90);
delay(400);
myservo.write(0);
delay(1000);
}
void Drop2(int pin){
Serial.println(pin);
myservo1.write(90);
delay(400);
myservo1.write(0);
delay(1000);
}
void resetReader(){
///////////////////////////////////
//Reset the RFID reader to read again.
///////////////////////////////////
digitalWrite(RFIDResetPin, LOW);
digitalWrite(RFIDResetPin, HIGH);
delay(500);
}
void clearTag(char one[]){
///////////////////////////////////
//clear the char array by filling with null - ASCII 0
//Will think same tag has been read otherwise
///////////////////////////////////
for(int i = 0; i < strlen(one); i++){
one[i] = 0;
}
}
boolean compareTag(char one[], char two[]){
///////////////////////////////////
//compare two value to see if same,
//strcmp not working 100% so we do this
///////////////////////////////////
if(strlen(one) == 0) return false; //empty
for(int i = 0; i < 12; i++){
if(one[i] != two[i]) return false;
}
return true; //no mismatches
}
En om te bewijzen dat het werkt:
dit is 1 van de 1e tests, met nog LED's in plaats van servo's
helaas is het filmpje van de voledige setup nog in bezit van mijn groepsgenoot Jamy...
Geen opmerkingen:
Een reactie posten