Uses an ID20 RFID Reader to create a tag list with a few functions that include: printing the current list, checking if a tag exists in the list, adding a tag to the list, and deleting a tag from the list

Dependencies:   ID12RFID TextLCD mbed

Code to create an RFID Tag List. Page is located at http://mbed.org/users/memsterjr09/notebook/rfid-tag-list-builder/

Committer:
memsterjr09
Date:
Wed Oct 16 03:14:09 2013 +0000
Revision:
0:fa3fe200c570
Child:
1:867cf1706b42
RFID Tag List

Who changed what in which revision?

UserRevisionLine numberNew contents of line
memsterjr09 0:fa3fe200c570 1 #include "mbed.h"
memsterjr09 0:fa3fe200c570 2 #include "ID12RFID.h"
memsterjr09 0:fa3fe200c570 3 #include "TextLCD.h"
memsterjr09 0:fa3fe200c570 4 #include "RFID_Functions.h"
memsterjr09 0:fa3fe200c570 5
memsterjr09 0:fa3fe200c570 6
memsterjr09 0:fa3fe200c570 7 DigitalIn show(p24); //PushButton to show list
memsterjr09 0:fa3fe200c570 8 DigitalIn look(p23); //PushButton to look if user is in list
memsterjr09 0:fa3fe200c570 9 DigitalIn add(p22); //PushButton to add user to list
memsterjr09 0:fa3fe200c570 10 DigitalIn del(p21); //PushButton to delete user from list
memsterjr09 0:fa3fe200c570 11 ID12RFID rfid(p14); // uart rx
memsterjr09 0:fa3fe200c570 12 Serial pc(USBTX, USBRX); //PC Terminal Display
memsterjr09 0:fa3fe200c570 13 TextLCD lcd(p15, p16, p17, p18, p19, p20); //LCD Screen Display
memsterjr09 0:fa3fe200c570 14 int state = 0; // Will determine what pushbutton is being pressed
memsterjr09 0:fa3fe200c570 15 LinkedList IDList = emptyList(); //initialize the IDList
memsterjr09 0:fa3fe200c570 16 LLNode *toAdd = IDList.head; //Create an Empty Tag Node
memsterjr09 0:fa3fe200c570 17 int ID = 0; // Initialize the ID number
memsterjr09 0:fa3fe200c570 18 int found; // Flag that will determine if an ID exists in the list already
memsterjr09 0:fa3fe200c570 19 int main()
memsterjr09 0:fa3fe200c570 20 {
memsterjr09 0:fa3fe200c570 21 lcd.cls(); //Clear the Screen on Reset
memsterjr09 0:fa3fe200c570 22 // Initialize the pullup resistors in pushbutton
memsterjr09 0:fa3fe200c570 23 show.mode(PullUp);
memsterjr09 0:fa3fe200c570 24 look.mode(PullUp);
memsterjr09 0:fa3fe200c570 25 add.mode(PullUp);
memsterjr09 0:fa3fe200c570 26 del.mode(PullUp);
memsterjr09 0:fa3fe200c570 27 while(1) {
memsterjr09 0:fa3fe200c570 28 lcd.cls();
memsterjr09 0:fa3fe200c570 29 // Determine if any of the pushbuttons are being pressed, and update the state accordingly
memsterjr09 0:fa3fe200c570 30 if(!show) state = 1;
memsterjr09 0:fa3fe200c570 31 if(!look) state = 2;
memsterjr09 0:fa3fe200c570 32 if(!add) state = 3;
memsterjr09 0:fa3fe200c570 33 if(!del) state = 4;
memsterjr09 0:fa3fe200c570 34 switch(state) {
memsterjr09 0:fa3fe200c570 35 // Print the List
memsterjr09 0:fa3fe200c570 36 case 1:
memsterjr09 0:fa3fe200c570 37 lcd.printf("Printing List");
memsterjr09 0:fa3fe200c570 38 wait(1);
memsterjr09 0:fa3fe200c570 39 showList(IDList);
memsterjr09 0:fa3fe200c570 40 lcd.cls();
memsterjr09 0:fa3fe200c570 41 lcd.printf("List Printed");
memsterjr09 0:fa3fe200c570 42 state = 0;
memsterjr09 0:fa3fe200c570 43 wait(3);
memsterjr09 0:fa3fe200c570 44 break;
memsterjr09 0:fa3fe200c570 45 // Check to see if an ID exists in the list already
memsterjr09 0:fa3fe200c570 46 case 2:
memsterjr09 0:fa3fe200c570 47 int flag = false;
memsterjr09 0:fa3fe200c570 48 lcd.printf("Look Up Tag\n");
memsterjr09 0:fa3fe200c570 49 lcd.printf("Scan RFID Tag");
memsterjr09 0:fa3fe200c570 50 // Wait for a Tag to be scanned
memsterjr09 0:fa3fe200c570 51 while(!ID) {
memsterjr09 0:fa3fe200c570 52 if(rfid.readable()) {
memsterjr09 0:fa3fe200c570 53 ID = rfid.read();
memsterjr09 0:fa3fe200c570 54 }
memsterjr09 0:fa3fe200c570 55 wait(1);
memsterjr09 0:fa3fe200c570 56 }
memsterjr09 0:fa3fe200c570 57 lcd.cls();
memsterjr09 0:fa3fe200c570 58 LLNode *node = IDList.head;
memsterjr09 0:fa3fe200c570 59 // Traverse through the list. Will figure out if the tag exists in the list already
memsterjr09 0:fa3fe200c570 60 while(node->data != NULL) {
memsterjr09 0:fa3fe200c570 61 if(node->data == ID) {
memsterjr09 0:fa3fe200c570 62 lcd.printf("ID: %d\n", ID);
memsterjr09 0:fa3fe200c570 63 lcd.printf("Was Found");
memsterjr09 0:fa3fe200c570 64 ID = 0;
memsterjr09 0:fa3fe200c570 65 state = 0;
memsterjr09 0:fa3fe200c570 66 wait(3);
memsterjr09 0:fa3fe200c570 67 flag = true;
memsterjr09 0:fa3fe200c570 68 break;
memsterjr09 0:fa3fe200c570 69 }
memsterjr09 0:fa3fe200c570 70 node = node->next;
memsterjr09 0:fa3fe200c570 71 }
memsterjr09 0:fa3fe200c570 72 // If the flag was set, then the tag was found in the list, so don't want to do the Not Found part
memsterjr09 0:fa3fe200c570 73 if(flag) break;
memsterjr09 0:fa3fe200c570 74 lcd.printf("ID: %d\n", ID);
memsterjr09 0:fa3fe200c570 75 lcd.printf("Was Not Found");
memsterjr09 0:fa3fe200c570 76 ID = 0;
memsterjr09 0:fa3fe200c570 77 state = 0;
memsterjr09 0:fa3fe200c570 78 wait(3);
memsterjr09 0:fa3fe200c570 79 break;
memsterjr09 0:fa3fe200c570 80 // Add a tag to the list
memsterjr09 0:fa3fe200c570 81 case 3:
memsterjr09 0:fa3fe200c570 82 lcd.printf("Add Tag\n");
memsterjr09 0:fa3fe200c570 83 lcd.printf("Scan RFID Tag");
memsterjr09 0:fa3fe200c570 84 // Wait or a tag scan
memsterjr09 0:fa3fe200c570 85 while(!ID) {
memsterjr09 0:fa3fe200c570 86 if(rfid.readable()) {
memsterjr09 0:fa3fe200c570 87 ID = rfid.read();
memsterjr09 0:fa3fe200c570 88 }
memsterjr09 0:fa3fe200c570 89 wait(1);
memsterjr09 0:fa3fe200c570 90 }
memsterjr09 0:fa3fe200c570 91 lcd.cls();
memsterjr09 0:fa3fe200c570 92 // Determine if the Tag already exists in the list
memsterjr09 0:fa3fe200c570 93 found = lookUp(IDList, ID);
memsterjr09 0:fa3fe200c570 94 // Tag previously exists
memsterjr09 0:fa3fe200c570 95 if(found) {
memsterjr09 0:fa3fe200c570 96 lcd.printf("ID: %d\n", ID);
memsterjr09 0:fa3fe200c570 97 lcd.printf("Exists in List");
memsterjr09 0:fa3fe200c570 98 ID = 0;
memsterjr09 0:fa3fe200c570 99 state = 0;
memsterjr09 0:fa3fe200c570 100 wait(3);
memsterjr09 0:fa3fe200c570 101 break;
memsterjr09 0:fa3fe200c570 102 // Tag doesn't exist
memsterjr09 0:fa3fe200c570 103 } else {
memsterjr09 0:fa3fe200c570 104 addToList(&IDList, ID);
memsterjr09 0:fa3fe200c570 105 lcd.printf("ID: %d\n", ID);
memsterjr09 0:fa3fe200c570 106 lcd.printf("Added to List");
memsterjr09 0:fa3fe200c570 107 ID = 0;
memsterjr09 0:fa3fe200c570 108 state = 0;
memsterjr09 0:fa3fe200c570 109 wait(3);
memsterjr09 0:fa3fe200c570 110 break;
memsterjr09 0:fa3fe200c570 111 }
memsterjr09 0:fa3fe200c570 112 // Delete a tag from the list
memsterjr09 0:fa3fe200c570 113 case 4:
memsterjr09 0:fa3fe200c570 114 lcd.printf("Delete Tag\n");
memsterjr09 0:fa3fe200c570 115 lcd.printf("Scan RFID Tag");
memsterjr09 0:fa3fe200c570 116 // Wait for a tag scan
memsterjr09 0:fa3fe200c570 117 while(!ID) {
memsterjr09 0:fa3fe200c570 118 if(rfid.readable()) {
memsterjr09 0:fa3fe200c570 119 ID = rfid.read();
memsterjr09 0:fa3fe200c570 120 }
memsterjr09 0:fa3fe200c570 121 wait(1);
memsterjr09 0:fa3fe200c570 122 }
memsterjr09 0:fa3fe200c570 123 lcd.cls();
memsterjr09 0:fa3fe200c570 124 // Determine if the tag exists in the list
memsterjr09 0:fa3fe200c570 125 found = lookUp(IDList, ID);
memsterjr09 0:fa3fe200c570 126 // If it does, delete it from the list
memsterjr09 0:fa3fe200c570 127 if(found) {
memsterjr09 0:fa3fe200c570 128 deleteFromList(&IDList, ID);
memsterjr09 0:fa3fe200c570 129 lcd.printf("ID: %d\n", ID);
memsterjr09 0:fa3fe200c570 130 lcd.printf("Deleted");
memsterjr09 0:fa3fe200c570 131 ID = 0;
memsterjr09 0:fa3fe200c570 132 state = 0;
memsterjr09 0:fa3fe200c570 133 wait(3);
memsterjr09 0:fa3fe200c570 134 break;
memsterjr09 0:fa3fe200c570 135 // Otherwise, tell the user it doesn't exist
memsterjr09 0:fa3fe200c570 136 } else {
memsterjr09 0:fa3fe200c570 137 lcd.printf("ID: %d\n", ID);
memsterjr09 0:fa3fe200c570 138 lcd.printf("Not in List");
memsterjr09 0:fa3fe200c570 139 ID = 0;
memsterjr09 0:fa3fe200c570 140 state = 0;
memsterjr09 0:fa3fe200c570 141 wait(3);
memsterjr09 0:fa3fe200c570 142 break;
memsterjr09 0:fa3fe200c570 143 }
memsterjr09 0:fa3fe200c570 144 }
memsterjr09 0:fa3fe200c570 145 }
memsterjr09 0:fa3fe200c570 146 }
memsterjr09 0:fa3fe200c570 147
memsterjr09 0:fa3fe200c570 148 // Initializes an empty Tag list
memsterjr09 0:fa3fe200c570 149 LinkedList emptyList()
memsterjr09 0:fa3fe200c570 150 {
memsterjr09 0:fa3fe200c570 151 LinkedList it = {NULL, NULL};
memsterjr09 0:fa3fe200c570 152 addPhantom(&it);
memsterjr09 0:fa3fe200c570 153 return it;
memsterjr09 0:fa3fe200c570 154 }
memsterjr09 0:fa3fe200c570 155
memsterjr09 0:fa3fe200c570 156 // Print the list via USB Serial port to the PC
memsterjr09 0:fa3fe200c570 157 void showList(LinkedList theList)
memsterjr09 0:fa3fe200c570 158 {
memsterjr09 0:fa3fe200c570 159 LLNode *phere = theList.head; /* start at the head */
memsterjr09 0:fa3fe200c570 160 int n = 1;
memsterjr09 0:fa3fe200c570 161 pc.printf("***********\n"); //start the list
memsterjr09 0:fa3fe200c570 162 if(phere->data == 0) pc.printf("No Tags in List\n"); //List is empty
memsterjr09 0:fa3fe200c570 163 else pc.printf("%d: %d\n", n, phere->data); //List isn't empty, print first tag
memsterjr09 0:fa3fe200c570 164 n++;
memsterjr09 0:fa3fe200c570 165 while(phere->next) {
memsterjr09 0:fa3fe200c570 166 pc.printf("%d: %d\n", n, phere->next->data); // keep printing while there is still data
memsterjr09 0:fa3fe200c570 167 phere = phere->next; /* work forward via next ptrs */
memsterjr09 0:fa3fe200c570 168 n++;
memsterjr09 0:fa3fe200c570 169 }
memsterjr09 0:fa3fe200c570 170 pc.printf("***********\n\n"); // end the list
memsterjr09 0:fa3fe200c570 171 }
memsterjr09 0:fa3fe200c570 172
memsterjr09 0:fa3fe200c570 173 // Add a tag to the list (added to the back of the list)
memsterjr09 0:fa3fe200c570 174 void addToList(LinkedList *pLL, int data)
memsterjr09 0:fa3fe200c570 175 {
memsterjr09 0:fa3fe200c570 176 // If the list has no data, its the head of the list
memsterjr09 0:fa3fe200c570 177 if(pLL->head->data == NULL) {
memsterjr09 0:fa3fe200c570 178 pLL->head->data = data;
memsterjr09 0:fa3fe200c570 179 // otherwise you have to add a new node to the tail of the list
memsterjr09 0:fa3fe200c570 180 } else {
memsterjr09 0:fa3fe200c570 181 // Initialize the node
memsterjr09 0:fa3fe200c570 182 LLNode *toAdd = (LLNode *) malloc(sizeof(LLNode));
memsterjr09 0:fa3fe200c570 183 // Add the data and fix all of the pointers
memsterjr09 0:fa3fe200c570 184 toAdd->data = data;
memsterjr09 0:fa3fe200c570 185 toAdd->prev = pLL->tail;
memsterjr09 0:fa3fe200c570 186 toAdd->next = NULL;
memsterjr09 0:fa3fe200c570 187 pLL->tail->next = toAdd;
memsterjr09 0:fa3fe200c570 188 pLL->tail = toAdd;
memsterjr09 0:fa3fe200c570 189 }
memsterjr09 0:fa3fe200c570 190 }
memsterjr09 0:fa3fe200c570 191
memsterjr09 0:fa3fe200c570 192 // Used to create the first empty node in the initial list
memsterjr09 0:fa3fe200c570 193 void addPhantom(LinkedList *pLL)
memsterjr09 0:fa3fe200c570 194 {
memsterjr09 0:fa3fe200c570 195 /* create LLNode */
memsterjr09 0:fa3fe200c570 196 LLNode *phere = (LLNode *) malloc(sizeof(LLNode));
memsterjr09 0:fa3fe200c570 197 phere->data = NULL;
memsterjr09 0:fa3fe200c570 198 phere->next = NULL;
memsterjr09 0:fa3fe200c570 199 phere->prev = NULL;
memsterjr09 0:fa3fe200c570 200 pLL->head = phere;
memsterjr09 0:fa3fe200c570 201 pLL->tail = phere;
memsterjr09 0:fa3fe200c570 202 }
memsterjr09 0:fa3fe200c570 203
memsterjr09 0:fa3fe200c570 204 // delete a tag from the list
memsterjr09 0:fa3fe200c570 205 void deleteFromList(LinkedList *pll, int data)
memsterjr09 0:fa3fe200c570 206 {
memsterjr09 0:fa3fe200c570 207 // Flags used to delete
memsterjr09 0:fa3fe200c570 208 int flag = true;
memsterjr09 0:fa3fe200c570 209 int first = true;
memsterjr09 0:fa3fe200c570 210 // Get first node
memsterjr09 0:fa3fe200c570 211 LLNode *node = pll->head;
memsterjr09 0:fa3fe200c570 212 while(flag) {
memsterjr09 0:fa3fe200c570 213 // If you find the tag
memsterjr09 0:fa3fe200c570 214 if(node->data == data) {
memsterjr09 0:fa3fe200c570 215 // If its the first node, then you just have to move the head pointer
memsterjr09 0:fa3fe200c570 216 if(first) {
memsterjr09 0:fa3fe200c570 217 pll->head = pll->head->next;
memsterjr09 0:fa3fe200c570 218 flag = false;
memsterjr09 0:fa3fe200c570 219 // if its the last tag added... just adjust the tail pointers
memsterjr09 0:fa3fe200c570 220 } else {
memsterjr09 0:fa3fe200c570 221 if(node->next == NULL) {
memsterjr09 0:fa3fe200c570 222 pll->tail = node->prev;
memsterjr09 0:fa3fe200c570 223 node->prev->next = NULL;
memsterjr09 0:fa3fe200c570 224 flag = false;
memsterjr09 0:fa3fe200c570 225 //otherwise just skip the node in the list
memsterjr09 0:fa3fe200c570 226 } else {
memsterjr09 0:fa3fe200c570 227 node->prev->next = node->next;
memsterjr09 0:fa3fe200c570 228 node->next->prev = node->prev;
memsterjr09 0:fa3fe200c570 229 flag = false;
memsterjr09 0:fa3fe200c570 230 }
memsterjr09 0:fa3fe200c570 231 }
memsterjr09 0:fa3fe200c570 232 }
memsterjr09 0:fa3fe200c570 233 // Traverse through the list via next pointers
memsterjr09 0:fa3fe200c570 234 node = node->next;
memsterjr09 0:fa3fe200c570 235 first = false;
memsterjr09 0:fa3fe200c570 236 }
memsterjr09 0:fa3fe200c570 237 }
memsterjr09 0:fa3fe200c570 238
memsterjr09 0:fa3fe200c570 239 // Used to determine if a tag already exists in the list
memsterjr09 0:fa3fe200c570 240 int lookUp(LinkedList IDList, int ID)
memsterjr09 0:fa3fe200c570 241 {
memsterjr09 0:fa3fe200c570 242 int found = false;
memsterjr09 0:fa3fe200c570 243 LLNode *node = IDList.head;
memsterjr09 0:fa3fe200c570 244 // While the data isn't null, check it
memsterjr09 0:fa3fe200c570 245 while(node->data != NULL) {
memsterjr09 0:fa3fe200c570 246 if(node->data == ID) {
memsterjr09 0:fa3fe200c570 247 found = true;
memsterjr09 0:fa3fe200c570 248 return found;
memsterjr09 0:fa3fe200c570 249 }
memsterjr09 0:fa3fe200c570 250 // if the next pointer is null, we're at the end of the list;
memsterjr09 0:fa3fe200c570 251 if(node->next == NULL) return found;
memsterjr09 0:fa3fe200c570 252 node = node->next;
memsterjr09 0:fa3fe200c570 253 }
memsterjr09 0:fa3fe200c570 254 return found;
memsterjr09 0:fa3fe200c570 255 }