Вопрос такой,купил эти две вещи что делать,чтобы карты считывались? Код (Text): // link between the computer and the SoftSerial Shield //at 9600 bps 8-N-1 //Computer is connected to Hardware UART //SoftSerial Shield is connected to the Software UART:D2&D3 #include <SoftwareSerial.h> SoftwareSerial SoftSerial(2, 3); unsigned char buffer[64]; // buffer array for data receive over serial port int count=0; // counter for buffer array void setup() { SoftSerial.begin(9600); // the SoftSerial baud rate Serial.begin(9600); // the Serial port of Arduino baud rate. } void loop() { if (SoftSerial.available()) // if date is coming from software serial port ==> data is coming from SoftSerial shield { while(SoftSerial.available()) // reading data into char array { buffer[count++]=SoftSerial.read(); // writing data into array if(count == 64)break; } Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port clearBufferArray(); // call clearBufferArray function to clear the stored data from the array count = 0; // set counter of while loop to zero } if (Serial.available()) // if data is available on hardware serial port ==> data is coming from PC or notebook SoftSerial.write(Serial.read()); // write it to the SoftSerial shield } void clearBufferArray() // function to clear buffer array { for (int i=0; i<count;i++) { buffer[i]=NULL;} // clear all index of array with command NULL } Вот этот скетч залил в ардуино, а толку - нуль( Кто может подсказать что не так?
у включенного сенсора постоянно должен гореть красный светодиод. Когда подносится карточка должен моргнуть зеленый светодиод. Возможно, у Вас карточка "не той системы".
ПРОБЛЕМА РЕШЕНА! Выкладываю рабочий код. Из электронного архива к книге Петина В.А. "Проекты с использованием контроллера Arduino. 2 изд." И на будущее, проверяйте антенну) Код (Text): byte RFIDcardNum[4]; byte evenBit = 0; byte oddBit = 0; byte isData0Low = 0; byte isData1Low = 0; int recvBitCount = 0; byte isCardReadOver = 0; void setup() { Serial.begin(9600); attachInterrupt(0, ISRreceiveData0, FALLING ); //data0/rx is connected to pin 2, // which results in INT 0 attachInterrupt(1, ISRreceiveData1, FALLING ); //data1/tx is connected to pin 3, // which results in INT 1 } void loop() { //read card number bit if(isData0Low||isData1Low){ if(1 == recvBitCount){//even bit evenBit = (1-isData0Low)&isData1Low; } else if( recvBitCount >= 26){//odd bit oddBit = (1-isData0Low)&isData1Low; isCardReadOver = 1; delay(10); } else{ //only if isData1Low = 1, card bit could be 1 RFIDcardNum[2-(recvBitCount-2)/8] |= (isData1Low << (7-(recvBitCount-2)%8)); } //reset data0 and data1 isData0Low = 0; isData1Low = 0; } //print the card id number if(isCardReadOver){ if(checkParity()){ //Serial.println(); //Serial.print(RFIDcardNum[2],HEX);//High byte //Serial.print(RFIDcardNum[1],HEX);//Midle byte //Serial.println(RFIDcardNum[0],HEX);//Low byte Serial.println(*((long *)RFIDcardNum)); } resetData(); } } byte checkParity(){ int i = 0; int evenCount = 0; int oddCount = 0; for(i = 0; i < 8; i++){ if(RFIDcardNum[2]&(0x80>>i)){ evenCount++; } } for(i = 0; i < 4; i++){ if(RFIDcardNum[1]&(0x80>>i)){ evenCount++; } } for(i = 4; i < 8; i++){ if(RFIDcardNum[1]&(0x80>>i)){ oddCount++; } } for(i = 0; i < 8; i++){ if(RFIDcardNum[0]&(0x80>>i)){ oddCount++; } } if(evenCount%2 == evenBit && oddCount%2 != oddBit){ return 1; } else{ return 0; } } void resetData(){ RFIDcardNum[0] = 0; RFIDcardNum[1] = 0; RFIDcardNum[2] = 0; RFIDcardNum[3] = 0; evenBit = 0; oddBit = 0; recvBitCount = 0; isData0Low = 0; isData1Low = 0; isCardReadOver = 0; } // handle interrupt0 void ISRreceiveData0(){ recvBitCount++; isData0Low = 1; } // handle interrupt1 void ISRreceiveData1(){ recvBitCount++; isData1Low = 1; }
А, у Вас в wiegand режиме он работал? Вы сделали это: "You would need to select the jumper to "U" to enter this mode, and the setting is: 9600bps, N, 8, 1, TTL output", перед тем, как по UART с ним работать?