Нужно прописать вторую карту для 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
Бегемот, ему точно нужен. Обьявляй ценник и делай. А то он уже весь форум уфлудил.
на до именно с этим кодом в идео другой сканер - в данном коде работает все что надо но с одной картой прописать несколько не получаеться
volatile long reader1 = 0; volatile int reader1Count = 0; void reader1One(void) { reader1Count++; reader1 = reader1 << 1; reader1 |= 1; } void reader1Zero(void) { reader1Count++; reader1 = reader1 << 1; } void setup() { Serial.begin(9600); // Attach pin change interrupt service routines from the Wiegand RFID readers attachInterrupt(0, reader1Zero, RISING);//DATA0 to pin 2 attachInterrupt(1, reader1One, RISING); //DATA1 to pin 3 delay(10); // the interrupt in the Atmel processor misses out the first negitave pulse as the inputs are already high, // so this gives a pulse to the reader input line to get the interrupts working properly. // Then clear out the reader variables. // The readers are open collector sitting normally at a one so this is OK for(int i = 2; i<4; i++){ pinMode(i, OUTPUT); digitalWrite(i, HIGH); // enable internal pull up causing a one digitalWrite(i, LOW); // disable internal pull up causing zero and thus an interrupt pinMode(i, INPUT); digitalWrite(i, HIGH); // enable internal pull up } delay(10); // put the reader input variables to zero reader1 = 0; reader1Count = 0; } void loop() { if(reader1Count >=26){ if (reader1 = reader1 ==157924){ - номер карты Serial.print("Hello); - действие } int serialNumber=(reader1 >> 1) & 0x3fff; int siteCode= (reader1 >> 17) & 0x3ff; Serial.print(" Reader 1:"); Serial.print(reader1,HEX); Serial.print(" "); Serial.print("Reader 1 converted to DEC:"); Serial.print(reader1& 0xfffffff); Serial.print(" "); Serial.print("siteCode:"); Serial.print(siteCode); Serial.print(" "); Serial.print("serial number:"); Serial.println(serialNumber); reader1 = 0; reader1Count = 0; }Сам ты Бегемот...
Как я могу объявить ценник? А если человека кандрашка хватит?
А чем за 500 рублей работать - лучше за спасибо...
вот частьь\ отвечающая за номер карты и за действие
voidloop() {124125126if(reader1Count >=26){127if(reader1 = reader1 ==157924){ - номер карты128Serial.print("Hello); - действие }а как прописать вторую карту сномером ?
Сам ты Бегемот...
Как я могу объявить ценник? А если человека кандрашка хватит?
А чем за 500 рублей работать - лучше за спасибо...
Ну попа там, попа тут. Сделай забесплатно. Кому от этого хуже.
Так...
Вчитался в код - предложение снимается...
Это
мне не осилить, как и сдвиг на 17 бит
вообще ни как не решим ?
вообще ни как не решим ?
Дайте источник, откуда взяли программу.
Дайте описание RFID-ридера.
voidloop() {124125126if(reader1Count >=26){127if(reader1 = reader1 ==157924){ - номер карты128Serial.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, а можно банально вписать в сам скетч (как в том скетче, что вы выложили в начале темы). Если первый вариант - то можно опять-же сделать красиво - чтобы все само записывалось, а можно руками.
Вам как нужно?
как вам проще мне главное чтоб работало
я думаю проще руками вбивать
как вам проще мне главное чтоб работало
Тогда загружайте Сиидстудиевский скетч. При корректной работе он выводит в порт номера приложенных карточек.
Приложите две карточки и вышлите мне их номера.
Точно из того скетча номера?
да
вот скетч
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; }да
вышлите сюда:
StudioGippopotam@gmail.com
сегодня горит?
Все скетч выслал ну желательно сегодня
Все скетч выслал ну желательно сегодня
я вообще-то просил номера карточек...
постараюсь сегодня, но позже
все отправил номера карточек