Нужно прописать вторую карту для rfid сканера с первой все работает
- Войдите на сайт для отправки комментариев
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
}
http://arduino.ru/forum/obshchii/kak-popisat-vtoruyu-kartu-s-nomerom-dlya-rfid-skanera Тут тоже человеку надо. Я уверен, вдвоём вы решите проблему :D
PS Уже почистили дубль :)
мне исполнитель нужен
мне исполнитель нужен
Вставьте код, как надо. Невозможно понять, что у вас написано.
Вы уверены, что вам нужен исполнитель?
Вот готовое решение:
https://www.youtube.com/watch?v=z6-q_BS9LmQ
Бегемот, ему точно нужен. Обьявляй ценник и делай. А то он уже весь форум уфлудил.
на до именно с этим кодом в идео другой сканер - в данном коде работает все что надо но с одной картой прописать несколько не получаеться
001
volatile
long
reader1 = 0;
002
003
volatile
int
reader1Count = 0;
004
void
reader1One(
void
) {
005
006
007
008
reader1Count++;
009
010
011
reader1 = reader1 << 1;
012
013
reader1 |= 1;
014
015
016
}
017
018
019
020
void
reader1Zero(
void
) {
021
022
023
024
reader1Count++;
025
026
027
reader1 = reader1 << 1;
028
029
030
}
031
032
033
034
void
setup
()
035
036
037
{
038
039
040
041
Serial
.begin(9600);
042
043
044
045
// Attach pin change interrupt service routines from the Wiegand RFID readers
046
047
048
049
attachInterrupt(0, reader1Zero, RISING);
//DATA0 to pin 2
050
051
052
attachInterrupt(1, reader1One, RISING);
//DATA1 to pin 3
053
054
055
056
delay(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
075
for
(
int
i = 2; i<4; i++){
076
077
078
079
pinMode(i, OUTPUT);
080
081
082
083
digitalWrite(i, HIGH);
// enable internal pull up causing a one
084
085
086
087
digitalWrite(i, LOW);
// disable internal pull up causing zero and thus an interrupt
088
089
090
091
pinMode(i, INPUT);
092
093
094
095
digitalWrite(i, HIGH);
// enable internal pull up
096
097
098
099
}
100
101
102
103
delay(10);
104
105
106
107
// put the reader input variables to zero
108
109
110
111
reader1 = 0;
112
113
114
115
reader1Count = 0;
116
117
118
119
}
120
121
122
123
void
loop
() {
124
125
126
if
(reader1Count >=26){
127
if
(reader1 = reader1 ==157924){ - номер карты
128
Serial
.print("Hello); - действие }
129
130
int
serialNumber=(reader1 >> 1) & 0x3fff;
131
132
133
134
int
siteCode= (reader1 >> 17) & 0x3ff;
135
136
137
138
Serial
.print(
" Reader 1:"
);
139
140
141
142
Serial
.print(reader1,HEX);
143
144
145
146
Serial
.print(
" "
);
147
148
149
150
Serial
.print(
"Reader 1 converted to DEC:"
);
151
152
153
154
Serial
.print(reader1& 0xfffffff);
155
156
157
158
Serial
.print(
" "
);
159
160
161
162
Serial
.print(
"siteCode:"
);
163
164
165
166
Serial
.print(siteCode);
167
168
169
170
Serial
.print(
" "
);
171
172
173
174
Serial
.print(
"serial number:"
);
175
176
177
Serial
.println(serialNumber);
178
179
180
181
reader1 = 0;
182
183
184
185
reader1Count = 0;
186
187
188
189
}
Сам ты Бегемот...
Как я могу объявить ценник? А если человека кандрашка хватит?
А чем за 500 рублей работать - лучше за спасибо...
вот частьь\ отвечающая за номер карты и за действие
void
loop
() {
124
125
126
if
(reader1Count >=26){
127
if
(reader1 = reader1 ==157924){ - номер карты
128
Serial
.print("Hello); - действие }
а как прописать вторую карту сномером ?
Сам ты Бегемот...
Как я могу объявить ценник? А если человека кандрашка хватит?
А чем за 500 рублей работать - лучше за спасибо...
Ну попа там, попа тут. Сделай забесплатно. Кому от этого хуже.
Так...
Вчитался в код - предложение снимается...
Это
1
if
(reader1 = reader1 ==157924)
мне не осилить, как и сдвиг на 17 бит
вообще ни как не решим ?
вообще ни как не решим ?
Дайте источник, откуда взяли программу.
Дайте описание RFID-ридера.
void
loop
() {
124
125
126
if
(reader1Count >=26){
127
if
(reader1 = reader1 ==157924){ - номер карты
128
Serial
.print("Hello); - действие }
esle if
{
(reader1 = reader1 ==номер карты){
Serial
.print("PRI);
}
нельзя ли так.
источник тут где то на форуме был а сканер
Grove - 125KHz RFID
Э...
Э...
Ога. Он уже месяц тут и даже код вставлять не научился. Так что ты лучше цену назови. Ибо здоровье потом чем востанавливать?
источник тут где то на форуме был а сканер
Grove - 125KHz RFID
Загрузите этот код. Он тоже понтовый, с битовыми операциями, но хотя бы понятно, что и как работает.
http://www.seeedstudio.com/wiki/File:RFID_Wiegand_INT.zip
а надо на определенную
а надо на определенную
Ну вы-же понимаете, что очень сложно?
Нужно добавить целых 10 строчек кода...
сколько за работу хотите просто уже ни кто не может просто помочь ?
а надо на определенную
Ну вы-же понимаете, что очень сложно?
Нужно добавить целых 10 строчек кода...
Гыыыы, ну ты сам напросился :)
да ну что я могу сделать ? не получаеться не фига у меня
сколько за работу хотите просто уже ни кто не может просто помочь ?
Пухлявый с вами заодно? :)
Он меня троллит, чтобы я вам помог?
да ну что я могу сделать ? не получаеться не фига у меня
Хорошо, только скажите - а вам это зачем?
да нет я его не знаю он всех тролит
если честно честно это курсовая моя мучаюсь уже не знамо сколько помогите если не сложно чисто по человечески
да нет я его не знаю он всех тролит
Кажется он что-то подозревает. :)
Э не, курсовые помогаем только после того как озвучите свое место учебы, руководителя и все такое
если честно честно это курсовая моя мучаюсь уже не знамо сколько помогите если не сложно чисто по человечески
Смотрите - тут такой нюанс. Чтобы иметь возможность различать карты, Ардуино должна знать их номера уже на этапе выполнения программы. Можно записать из на внешний носитель или в EEPROM, а можно банально вписать в сам скетч (как в том скетче, что вы выложили в начале темы). Если первый вариант - то можно опять-же сделать красиво - чтобы все само записывалось, а можно руками.
Вам как нужно?
как вам проще мне главное чтоб работало
я думаю проще руками вбивать
как вам проще мне главное чтоб работало
Тогда загружайте Сиидстудиевский скетч. При корректной работе он выводит в порт номера приложенных карточек.
Приложите две карточки и вышлите мне их номера.
Точно из того скетча номера?
да
вот скетч
001
byte
RFIDcardNum[4];
002
byte
evenBit = 0;
003
byte
oddBit = 0;
004
byte
isData0Low = 0;
005
byte
isData1Low = 0;
006
int
recvBitCount = 0;
007
byte
isCardReadOver = 0;
008
009
void
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
017
void
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
052
byte
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
}
084
void
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
097
void
ISRreceiveData0(){
098
recvBitCount++;
099
isData0Low = 1;
100
}
101
102
// handle interrupt1
103
void
ISRreceiveData1(){
104
recvBitCount++;
105
isData1Low = 1;
106
}
да
вышлите сюда:
StudioGippopotam@gmail.com
сегодня горит?
Все скетч выслал ну желательно сегодня
Все скетч выслал ну желательно сегодня
я вообще-то просил номера карточек...
постараюсь сегодня, но позже
все отправил номера карточек