RFID and Servo Help Needed
NWCCTV
Posts: 3,629
I am using the below code to turn a servo when a card ID matches and to stop when it does not. It is a While loop but only works the first time. When the correct card is scanned the Servo will turn, but I have tried pretty much every command in the header file and none of them will let the loop continue after the first time it starts and then stops.
/*
RFID Read.c
Reads and displays RFID tag numbers.
Connect: Vcc to 5V, /ENABLE to P2, SOUT to (R = 2.2 k) to P1, GND to GND
http://www.parallax.com/product/28140
*/
#include "simpletools.h" // Include simpletools
#include "rfidser.h" // Include rfidser
#include "servo.h" // Include servo header
int rfidEn = 2; // Reader /ENABLE pin to P2
int rfidSout = 1; // Reader SOUT pin to P1
rfidser *rfid; // Set up device ID
int main() // Main function
{
rfid = rfid_open(rfidSout, rfidEn); // Open reader, start reading
while(1) // Main loop
{
char *str = rfid_get(rfid, 1000); // Wait up to 1 s for card
print("id = %s.\n", str); // Print ID.
if(!strcmp(str, "05000038D4")) //Check for Card match
servo_speed (9,200); // If card matches, start servo on pin 9
else servo_stop(); // If no match, do nothing
}}

Comments
} }
http://learn.parallax.com/propeller-c-functions
Usually when something doesn't work I put a bunch of debug lines to see where it is held up or looping. Then adjust the code before the debug code that isn't executed.
For more info, click SimpleIDE's Help -> Simple Library Reference -> servo.h.
Andy
Did you use the servo pin number as the argument to the servo_disable function? It is needed according to the documentation.
I'm not sure what will happen if the incorrect tag is read on the first try. If the servo hasn't been used, can it be disabled?
Have you just tried using servo_speed(9, 0) when incorrect?
Tom