rfid 125khz считыватель

Fearles8383
Offline
Зарегистрирован: 14.05.2015

 

byte RFIDcardNum[4];
003
byte evenBit = 0;
004
byte oddBit = 0;
005
byte isData0Low = 0;
006
byte isData1Low = 0;
007
int recvBitCount = 0;
008
byte isCardReadOver = 0;
009
 
010
void setup()
011
{
012
  Serial.begin(9600);
013
  attachInterrupt(0, ISRreceiveData0, FALLING );  //data0/rx is connected to pin 2, which results in INT 0
014
  attachInterrupt(1, ISRreceiveData1, FALLING );  //data1/tx is connected to pin 3, which results in INT 1
015
pinMode(13, OUTPUT);
016
}
017
 
018
void loop()
019
{
020
   
021
  //read card number bit
022
  if(isData0Low||isData1Low){
023
    if(1 == recvBitCount){//even bit
024
      evenBit = (1-isData0Low)&isData1Low;
025
        
026
    }
027
    else if( recvBitCount >= 26){//odd bit
028
      oddBit = (1-isData0Low)&isData1Low;
029
      isCardReadOver = 1;
030
      delay(10);
031
       
032
      if (isCardReadOver == 9923104)
033
      
034
   {
035
       digitalWrite(13, HIGH);   // зажигаем светодиод
036
  delay(1000);              // ждем секунду
037
  digitalWrite(13, LOW);    // выключаем светодиод
038
  Serial.println(" hello ");
039
    }
040
  if (isCardReadOver == 9920544
041
)
042
  digitalWrite(13,  HIGH);
043
       digitalWrite(13, HIGH);   // зажигаем светодиод
044
  delay(9000);              // ждем секунду
045
  digitalWrite(13, LOW);    // выключаем светодиод
046
  Serial.println(" hello1 ");
047
   
048
    }
049
    else{
050
      //only if isData1Low = 1, card bit could be 1
051
      RFIDcardNum[2-(recvBitCount-2)/8] |= (isData1Low << (7-(recvBitCount-2)%8));
052
    
053
 
054
    }
055
    //reset data0 and data1
056
    isData0Low = 0;
057
    isData1Low = 0;
058
     
059
  }
060
 
061
  //print the card id number
062
  if(isCardReadOver){
063
    //if(checkParity()){
064
    //Serial.println();
065
    //Serial.print(RFIDcardNum[2],HEX);//High byte
066
    //Serial.print(RFIDcardNum[1],HEX);//Midle byte
067
    //Serial.println(RFIDcardNum[0],HEX);//Low byte
068
      Serial.println(*((long *)RFIDcardNum));
069
    //}
070
    resetData();
071
  }
072
 
073
}
074
 
075
byte checkParity(){
076
  int i = 0;
077
  int evenCount = 0;
078
  int oddCount = 0;
079
  for(i = 0; i < 8; i++){
080
    if(RFIDcardNum[2]&(0x80>>i)){
081
      evenCount++;
082
    }
083
  }
084
  for(i = 0; i < 4; i++){
085
    if(RFIDcardNum[1]&(0x80>>i)){
086
      evenCount++;
087
    }
088
  }
089
  for(i = 4; i < 8; i++){
090
    if(RFIDcardNum[1]&(0x80>>i)){
091
      oddCount++;
092
    }
093
  }
094
  for(i = 0; i < 8; i++){
095
    if(RFIDcardNum[0]&(0x80>>i)){
096
      oddCount++;
097
    }
098
  }
099
   
100
  if(evenCount%2 == evenBit && oddCount%2 != oddBit){
101
    return 1;
102
  }
103
  else{
104
    return 0;
105
  }
106
}
107
void resetData(){
108
  RFIDcardNum[0] = 0;
109
  RFIDcardNum[1] = 0;
110
  RFIDcardNum[2] = 0;
111
  RFIDcardNum[3] = 0;
112
  evenBit = 0;
113
  oddBit = 0;
114
  recvBitCount = 0;
115
  isData0Low = 0;
116
  isData1Low = 0;
117
  isCardReadOver = 0;
118
}
119
// handle interrupt0
120
void ISRreceiveData0(){
121
  recvBitCount++;
122
  isData0Low = 1;
123
}
124
 
125
// handle interrupt1
126
void ISRreceiveData1(){
127
  recvBitCount++;
128
  isData1Low = 1;
129
}

 

Fearles8383
Offline
Зарегистрирован: 14.05.2015

надо поправить код работает не коректно 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

правь)) мы согласны

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Видимо памятку себе сделал. Типа вот код, нужно поправить. Форум - записная книжка.. Каждому нужно завести себе по ветке.
1. Записки
2. Личка
3. Размышления

Fearles8383
Offline
Зарегистрирован: 14.05.2015

да я все сделал но не так работает как нужно 

Fearles8383
Offline
Зарегистрирован: 14.05.2015

ага волшебную ))) может кто знает в чем недстаток и подскажет

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Fearles8383 пишет:

да я все сделал но не так работает как нужно 


Ну тут 2 варианта
1. Сделал не все
2. Сделал не так

Fearles8383
Offline
Зарегистрирован: 14.05.2015

))))))))))) я знаю что не так что то но что не знаю поэтому я тут

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Fearles8383 пишет:

))))))))))) я знаю что не так что то но что не знаю поэтому я тут


А мы типа должны угадывать?

Fearles8383
Offline
Зарегистрирован: 14.05.2015

вообщем код работает на данный момент так при подношение карты к считывателю загораеться светодиод и в мониторе порта отображаеться ********* но так происходит с любой картой а надо что б при считывание одной карты загорался светодиод и писал допустим привет а при считывание другой не загорался и писал пошел вон типо того )) или просто нечего не происходило 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ну делай тогда.

Fearles8383
Offline
Зарегистрирован: 14.05.2015

если б я знал как это доделать наверно тут не писал правельно ?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Fearles8383 пишет:

если б я знал как это доделать наверно тут не писал правельно ?


Мммм учебник по програмированию требуется?

Fearles8383
Offline
Зарегистрирован: 14.05.2015

все вобще вопрос такой 

  if (isCardReadOver == 9923104)
062 033
063       
064 034
065    {
066 035
067        digitalWrite(13, HIGH);   // зажигаем светодиод
068 036
069   delay(1000);              // ждем секунду
070 037
071   digitalWrite(13, LOW);    // выключаем светодиод
072 038
073   Serial.println(" hello ");
074 039

правельно ли я задал чтоб при считывание карты с таким номером 9923104 загорался светодиод или как то по другому надо понять не могу 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

А если при считывании карты отправлять в сериал этот номер и смотреть его на компе, это будет сложно?

Fearles8383
Offline
Зарегистрирован: 14.05.2015

не много не понял вопроса< при считывание карты в мониторе порта отобржаеться номер карты  и hello1

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Откуда вы взяли номер карты?

Fearles8383
Offline
Зарегистрирован: 14.05.2015

при считывание он автоматически отображаеться в мониторе порта

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

у меня глаз дергается при попытке взгляда на код... это не читаемо. Может просто взять пример из библиотеки и поиграть с ним?

Fearles8383
Offline
Зарегистрирован: 14.05.2015

а приклюха в том что на данный rfid нет нефига все прорыскал яб срадостью 

Grove - 125KHz RFID Reader, Считыватель RFID 125 КГц меток

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Ну поздравляю, первым значит будешь. Как разберешься Не забудь поделиться с народом. :)

Fearles8383
Offline
Зарегистрирован: 14.05.2015

да это понятно мне не жалко а людам может и поможет 

Fearles8383
Offline
Зарегистрирован: 14.05.2015

Fearles8383 пишет:

да это понятно мне не жалко а людам может и поможет 

  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial SoftSerial(2, 3);
  4. unsigned char buffer[64]; // buffer array for data recieve over serial port
  5. int count=0; // counter for buffer array
  6. void setup()
  7. {
  8. SoftSerial.begin(9600); // the SoftSerial baud rate
  9. Serial.begin(9600); // the Serial port of Arduino baud rate.
  10.  
  11. }
  12.  
  13. void loop()
  14. {
  15. if (SoftSerial.available()) // if date is comming from softwareserial port ==> data is comming from SoftSerial shield
  16. {
  17. while(SoftSerial.available()) // reading data into char array
  18. {
  19. buffer[count++]=SoftSerial.read(); // writing data into array
  20. if(count == 64)break;
  21. }
  22. Serial.write(buffer,count); // if no data transmission ends, write buffer to hardware serial port
  23. clearBufferArray(); // call clearBufferArray function to clear the storaged data from the array
  24. count = 0; // set counter of while loop to zero
  25.  
  26.  
  27. }
  28. if (Serial.available()) // if data is available on hardwareserial port ==> data is comming from PC or notebook
  29. SoftSerial.write(Serial.read()); // write it to the SoftSerial shield
  30. }
  31. void clearBufferArray() // function to clear buffer array
  32. {
  33. for (int i=0; i<count;i++)
  34. { buffer[i]=NULL;} // clear all index of array with command NULL
  35. }