Нужно прописать вторую карту для rfid сканера с первой все работает

Fearles8383
Offline
Зарегистрирован: 14.05.2015
1 Работает с одной картой. вторую прописать не удаеться нужна помощь
volatile long reader1 = 0;
003  
004 volatile int reader1Count = 0;

void reader1One(void) {
007

008
reader1Count++;
009

010
reader1 = reader1 << 1;
011

012
reader1 |= 1;
013

014
}
015

016
void reader1Zero(void) {
017

018
reader1Count++;
019

020
reader1 = reader1 << 1;
021

022
}
023

024
void setup()
025

026
{
027

028
Serial.begin(9600);
029

030
// Attach pin change interrupt service routines from the Wiegand RFID readers
031

032
attachInterrupt(0, reader1Zero, RISING);//DATA0 to pin 2
033

034
attachInterrupt(1, reader1One, RISING); //DATA1 to pin 3
035

036
delay(10);
037

038
// the interrupt in the Atmel processor misses out the first negitave pulse as the inputs are already high,
039

040
// so this gives a pulse to the reader input line to get the interrupts working properly.
041

042
// Then clear out the reader variables.
043

044
// The readers are open collector sitting normally at a one so this is OK
045

046
for(int i = 2; i<4; i++){
047

048
pinMode(i, OUTPUT);
049

050
digitalWrite(i, HIGH); // enable internal pull up causing a one
051

052
digitalWrite(i, LOW); // disable internal pull up causing zero and thus an interrupt
053

054
pinMode(i, INPUT);
055

056
digitalWrite(i, HIGH); // enable internal pull up
057

058
}
059

060
delay(10);
061

062
// put the reader input variables to zero
063

064
reader1 = 0;
065

066
reader1Count = 0;
067

068
}
069

070
void loop() {
071

072
if(reader1Count >=26){
073 if (reader1 = reader1 ==157924){ - номер карты 
Serial.print("Hello); - действие }
074
int serialNumber=(reader1 >> 1) & 0x3fff;
075

076
int siteCode= (reader1 >> 17) & 0x3ff;
077

078
Serial.print(" Reader 1:");
079

080
Serial.print(reader1,HEX);
081

082
Serial.print(" ");
083

084
Serial.print("Reader 1 converted to DEC:");
085

086
Serial.print(reader1& 0xfffffff);
087

088
Serial.print(" ");
089

090
Serial.print("siteCode:");
091

092
Serial.print(siteCode);
093

094
Serial.print(" ");
095

096
Serial.print("serial number:");
097

098
Serial.println(serialNumber);
099

100
reader1 = 0;
101

102
reader1Count = 0;
103

104
}
105

106
}

Focus
Offline
Зарегистрирован: 05.04.2015

http://arduino.ru/forum/obshchii/kak-popisat-vtoruyu-kartu-s-nomerom-dlya-rfid-skanera Тут тоже человеку надо. Я уверен, вдвоём вы решите проблему :D

PS Уже почистили дубль :)

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

мне исполнитель нужен 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

мне исполнитель нужен 

Вставьте код, как надо. Невозможно понять, что у вас написано.

Вы уверены, что вам нужен исполнитель?

Вот готовое решение:

https://www.youtube.com/watch?v=z6-q_BS9LmQ

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

Бегемот, ему точно нужен. Обьявляй ценник и делай. А то он уже весь форум уфлудил.

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

на до именно с этим кодом в идео другой сканер - в данном коде работает все что надо но с одной картой прописать несколько не получаеться 

001volatile long reader1 = 0;
002      
003volatile int reader1Count = 0;
004void reader1One(void) {
005 
006 
007 
008reader1Count++;
009 
010 
011reader1 = reader1 << 1;
012 
013reader1 |= 1;
014 
015 
016}
017 
018 
019 
020void reader1Zero(void) {
021 
022 
023 
024reader1Count++;
025 
026 
027reader1 = reader1 << 1;
028 
029 
030}
031 
032 
033 
034void setup()
035 
036 
037{
038 
039 
040 
041Serial.begin(9600);
042 
043 
044 
045// Attach pin change interrupt service routines from the Wiegand RFID readers
046 
047 
048 
049attachInterrupt(0, reader1Zero, RISING);//DATA0 to pin 2
050 
051 
052attachInterrupt(1, reader1One, RISING); //DATA1 to pin 3
053 
054 
055 
056delay(10);
057 
058 
059 
060// the interrupt in the Atmel processor misses out the first negitave pulse as the inputs are already high,
061 
062 
063 
064// so this gives a pulse to the reader input line to get the interrupts working properly.
065 
066 
067 
068// Then clear out the reader variables.
069 
070 
071// The readers are open collector sitting normally at a one so this is OK
072 
073 
074 
075for(int i = 2; i<4; i++){
076 
077 
078 
079pinMode(i, OUTPUT);
080 
081 
082 
083digitalWrite(i, HIGH); // enable internal pull up causing a one
084 
085 
086 
087digitalWrite(i, LOW); // disable internal pull up causing zero and thus an interrupt
088 
089 
090 
091pinMode(i, INPUT);
092 
093 
094 
095digitalWrite(i, HIGH); // enable internal pull up
096 
097 
098 
099}
100 
101 
102 
103delay(10);
104 
105 
106 
107// put the reader input variables to zero
108 
109 
110 
111reader1 = 0;
112 
113 
114 
115reader1Count = 0;
116 
117 
118 
119}
120 
121 
122 
123void loop() {
124 
125 
126if(reader1Count >=26){
127 if (reader1 = reader1 ==157924){ - номер карты
128Serial.print("Hello); - действие }
129 
130int serialNumber=(reader1 >> 1) & 0x3fff;
131 
132 
133 
134int siteCode= (reader1 >> 17) & 0x3ff;
135 
136 
137 
138Serial.print(" Reader 1:");
139 
140 
141 
142Serial.print(reader1,HEX);
143 
144 
145 
146Serial.print(" ");
147 
148 
149 
150Serial.print("Reader 1 converted to DEC:");
151 
152 
153 
154Serial.print(reader1& 0xfffffff);
155 
156 
157 
158Serial.print(" ");
159 
160 
161 
162Serial.print("siteCode:");
163 
164 
165 
166Serial.print(siteCode);
167 
168 
169 
170Serial.print(" ");
171 
172 
173 
174Serial.print("serial number:");
175 
176 
177Serial.println(serialNumber);
178 
179 
180 
181reader1 = 0;
182 
183 
184 
185reader1Count = 0;
186 
187 
188 
189}

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Puhlyaviy пишет:
Бегемот, ему точно нужен. Обьявляй ценник и делай. А то он уже весь форум уфлудил.

Сам ты Бегемот...

Как я могу объявить ценник? А если человека кандрашка хватит?
А чем за 500 рублей работать - лучше за спасибо...

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

вот частьь\ отвечающая за номер карты и за действие 

void loop() {
124  
125  
126 if(reader1Count >=26){
127  if (reader1 = reader1 ==157924){ - номер карты
128

Serial.print("Hello); - действие }

 а как прописать вторую карту сномером ?

 

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

Gippopotam пишет:

Puhlyaviy пишет:
Бегемот, ему точно нужен. Обьявляй ценник и делай. А то он уже весь форум уфлудил.

Сам ты Бегемот...

Как я могу объявить ценник? А если человека кандрашка хватит?
А чем за 500 рублей работать - лучше за спасибо...


Ну попа там, попа тут. Сделай забесплатно. Кому от этого хуже.

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Так...

Вчитался в код - предложение снимается...

Это

1if (reader1 = reader1 ==157924)

мне не осилить, как и сдвиг на 17 бит

 

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

вообще ни как не решим ?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

вообще ни как не решим ?

Дайте источник, откуда взяли программу.

Дайте описание RFID-ридера.

Fearles8383
Offline
Зарегистрирован: 14.05.2015
void loop() {
124  
125  
126 if(reader1Count >=26){
127  if (reader1 = reader1 ==157924){ - номер карты
128

Serial.print("Hello); - действие }

 esle if

{

(reader1 = reader1 ==номер карты){

Serial.print("PRI);

}

нельзя ли так. 

 

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

источник тут где то на форуме был  а сканер 

Grove - 125KHz RFID

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Э...

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

Gippopotam пишет:

Э...


Ога. Он уже месяц тут и даже код вставлять не научился. Так что ты лучше цену назови. Ибо здоровье потом чем востанавливать?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

источник тут где то на форуме был  а сканер 

Grove - 125KHz RFID

Загрузите этот код. Он тоже понтовый, с битовыми операциями, но хотя бы понятно, что и как работает.

http://www.seeedstudio.com/wiki/File:RFID_Wiegand_INT.zip

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

а надо на определенную 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

а надо на определенную 

Ну вы-же понимаете, что очень сложно?

Нужно добавить целых 10 строчек кода...

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

сколько за работу хотите просто уже ни кто не может просто помочь ?

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

Gippopotam пишет:

Fearles8383 пишет:

а надо на определенную 

Ну вы-же понимаете, что очень сложно?

Нужно добавить целых 10 строчек кода...


Гыыыы, ну ты сам напросился :)

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

да ну что я могу сделать ? не получаеться не фига у меня 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

сколько за работу хотите просто уже ни кто не может просто помочь ?

Пухлявый с вами заодно? :)

Он меня троллит, чтобы я вам помог?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

да ну что я могу сделать ? не получаеться не фига у меня 

Хорошо, только скажите - а вам это зачем?

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

да нет я его не знаю он всех тролит 

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

если честно честно это курсовая моя мучаюсь уже не знамо сколько помогите если не сложно чисто по человечески 

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

Fearles8383 пишет:

да нет я его не знаю он всех тролит 


Кажется он что-то подозревает. :)

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

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

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

если честно честно это курсовая моя мучаюсь уже не знамо сколько помогите если не сложно чисто по человечески 

Смотрите - тут такой нюанс. Чтобы иметь возможность различать карты, Ардуино должна знать их номера уже на этапе выполнения программы. Можно записать из на внешний носитель или в EEPROM, а можно банально вписать в сам скетч (как в том скетче, что вы выложили в начале темы). Если первый вариант - то можно опять-же сделать красиво - чтобы все само записывалось, а можно руками.
Вам как нужно?

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

как вам проще мне главное чтоб работало

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

я думаю проще руками вбивать  

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

как вам проще мне главное чтоб работало

Тогда загружайте Сиидстудиевский скетч. При корректной работе он выводит в порт номера приложенных карточек.

Приложите две карточки и вышлите мне их номера.

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

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

6856671
15866998
 

 

Точно из того скетча номера?

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

да

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

вот скетч

001byte RFIDcardNum[4];
002byte evenBit = 0;
003byte oddBit = 0;
004byte isData0Low = 0;
005byte isData1Low = 0;
006int recvBitCount = 0;
007byte isCardReadOver = 0;
008 
009void setup()
010{
011  Serial.begin(9600);
012  attachInterrupt(0, ISRreceiveData0, FALLING );  //data0/rx is connected to pin 2, which results in INT 0
013  attachInterrupt(1, ISRreceiveData1, FALLING );  //data1/tx is connected to pin 3, which results in INT 1
014 
015}
016 
017void loop()
018{
019  //read card number bit
020  if(isData0Low||isData1Low){
021    if(1 == recvBitCount){//even bit
022      evenBit = (1-isData0Low)&isData1Low;
023    }
024    else if( recvBitCount >= 26){//odd bit
025      oddBit = (1-isData0Low)&isData1Low;
026      isCardReadOver = 1;
027      delay(10);
028    }
029    else{
030      //only if isData1Low = 1, card bit could be 1
031      RFIDcardNum[2-(recvBitCount-2)/8] |= (isData1Low << (7-(recvBitCount-2)%8));
032    }
033    //reset data0 and data1
034    isData0Low = 0;
035    isData1Low = 0;
036  }
037 
038  //print the card id number
039  if(isCardReadOver){
040    //if(checkParity()){
041    //Serial.println();
042    //Serial.print(RFIDcardNum[2],HEX);//High byte
043    //Serial.print(RFIDcardNum[1],HEX);//Midle byte
044    //Serial.println(RFIDcardNum[0],HEX);//Low byte
045      Serial.println(*((long *)RFIDcardNum));
046    //}
047    resetData();
048  }
049 
050}
051 
052byte checkParity(){
053  int i = 0;
054  int evenCount = 0;
055  int oddCount = 0;
056  for(i = 0; i < 8; i++){
057    if(RFIDcardNum[2]&(0x80>>i)){
058      evenCount++;
059    }
060  }
061  for(i = 0; i < 4; i++){
062    if(RFIDcardNum[1]&(0x80>>i)){
063      evenCount++;
064    }
065  }
066  for(i = 4; i < 8; i++){
067    if(RFIDcardNum[1]&(0x80>>i)){
068      oddCount++;
069    }
070  }
071  for(i = 0; i < 8; i++){
072    if(RFIDcardNum[0]&(0x80>>i)){
073      oddCount++;
074    }
075  }
076   
077  if(evenCount%2 == evenBit && oddCount%2 != oddBit){
078    return 1;
079  }
080  else{
081    return 0;
082  }
083}
084void resetData(){
085  RFIDcardNum[0] = 0;
086  RFIDcardNum[1] = 0;
087  RFIDcardNum[2] = 0;
088  RFIDcardNum[3] = 0;
089  evenBit = 0;
090  oddBit = 0;
091  recvBitCount = 0;
092  isData0Low = 0;
093  isData1Low = 0;
094  isCardReadOver = 0;
095}
096// handle interrupt0
097void ISRreceiveData0(){
098  recvBitCount++;
099  isData0Low = 1;
100}
101 
102// handle interrupt1
103void ISRreceiveData1(){
104  recvBitCount++;
105  isData1Low = 1;
106}

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

да

вышлите сюда:

StudioGippopotam@gmail.com

сегодня горит?

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

Все скетч выслал ну желательно сегодня

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Fearles8383 пишет:

Все скетч выслал ну желательно сегодня

я вообще-то просил номера карточек...

постараюсь сегодня, но позже

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

все отправил номера карточек