- Apple notebookok
- Kompakt vízhűtés
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- Havi kétszáz leégett tápcsatlakozó fut át egy Los Angeles-i szervizen
- AMD Ryzen 9 / 7 / 5 / 3 3***(X) "Zen 2" (AM4)
- Milyen billentyűzetet vegyek?
- Autós kamerák
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
- Fejhallgató erősítő és DAC topik
- ThinkPad (NEM IdeaPad)
Hirdetés
-
Az Intel a legmodernebb chipgyártó géppel előzheti meg az egész szektort
it Az Intel lett az első cég, amely szolgálatba állította az ASML új High NA EUV litográfiás chipgyártó eszközeit, ezzel minden riválisát megelőzheti.
-
Alsó-középkategóriás, PlayStation 5-be is helyezhető M.2 SSD-t virított a Klevv
ph A háromféle változatban készülő, egyoldalas típus simán megugorja a 6-7 GB/s-os sebességszintet.
-
Máris megrendelték a Fallout TV sorozat második szezonját
gp Ahogy az várható volt jön a folytatás a népszerű videojáték adaptációhoz.
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
adatfalo
senior tag
Hello!
Hogyan tudok legegyszerűbben lipo akkut(3.7 V) tölteni? Van egy ilyenem, de ha bedugom az usb-be és rádugom az akkut a VBAT-ra, akkor továbbra is csak a power led világít a charge nem. Kölcsön volt adva, és még nem is használtam, így az is lehet, hogy már gallyra ment azelőtt, hogy a kezembe fogtam volna.
Előre is köszi a válasz!
[ Szerkesztve ]
www.adatfalodesign.hu
-
gyapo11
őstag
válasz adatfalo #1852 üzenetére
Vettem egy ilyet, és ezzel mindent lehet. Ráteszel 4-35 V között bármekkora feszültséget, és 1.25-től 25 V-ig jön ki belőle max 3 A, az áramhatár is állítható. Van egy harmadik poti, amivel azt a töltési áramot lehet beállítani, ami alatt világítani kezd egy "töltés kész" led.
LiPo esetén 4.2 V-ra kell állítani a kimenő feszültséget, az áramot mondjuk 1 C-re, tehát ahány Ah-ás az akku annyi A-re, kevesebb lehet, és a töltés végére nem tudom mennyire esik le az áram, a töltőáram ötöde-tizede jó beállítás lehet.menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
veterán
Bekoszonok en is egy uno-val, udv. Ha megerkezik a motorvezerlo, akkor majd valami leptetomotoros bohockodast tervezek, valami kis jarmuvet, sajat szorakozasra.
Everybody lies.
-
gyapo11
őstag
Megjöttek az alkatrészek. Az infravevő eszméletlen jól szűr, belevilágítottam egy nem gyenge elemlámpával 10 centiről, és simán vette tovább a távirányítót. Akárhova irányítom a szobában, mindenhonnan működik.
Viszont a program a nyomvatartott gombra nem jól reagál, az első kód jó, utána fffffffff-ek jönnek. Az IRrecvDemo.ino-t néztem meg egy másik dumpot is, mindkettőben ugyanaz a viselkedés.
A lényege:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
delay(100);
}Az lenne a jó, ha folyamatosan dobálná a kódot amíg nyomvatartom. Mit módosítsak?
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
tvamos
nagyúr
válasz gyapo11 #1855 üzenetére
Én úgy tapasztaltam, hogy a fénycsövek szoktak problémát okozni, általában. (Izzoval, meg LED-ekkel még nem volt komolyabb gondom. Persze lehet, hogy másnak volt.) Esetleg próbáld ki azzal is, ha tesztelni akarod.
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
gyapo11
őstag
-
Flashback
addikt
Kedves Arduino guruk
Mi lenne a legjobb megoldás?
Adottak panelek amik 5V@200-400ma körül fogyasztanak (egységnek hívjuk őket innentől). Ebből van pontosan 100darab...
Külön kell vezérelni őket hogy mikor melyik van éppen felkapcsolva. Arduinos vezérlésre gondoltam.Az ötletem az hogy fogok 13+1 darab arduinot. Lesz 12 amin 8 darab egység van, a 13-on pedig 4.
I2C kommunikációra gondoltam. 13 slave, és egy master ami vezérli őket.Kérdéseim:
- I2C kommunikációnál hogy lehet egyes arduinók címét?
- Panelek kapcsolgatását valami relével oldanám meg amit a slave arduinok vezérelnek.Szerintetek??
Bocs nincs hosszú ö, ü és néha az á is ä :)
-
tvamos
nagyúr
válasz Flashback #1861 üzenetére
Milyen messze lesznek ezek az arduinok egymástól? Azért nagyon sok kábelt nem kötnék az iic-re. Ha jól emlékszem, a szabvány protokoll stack tartalmaz címet.
Én sima soros poetot használnék, egyszerűbb a debugolas."Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
DeniL
tag
Sziasztok,
a segítségeteket szeretném kérni. Problémába ütköztem, 2 napja agyalok rajta, egyszerűen kezdem feladni és a kukába dobni az egészet
Adott egy feladat:
Van 6 db NFC tag-em, elneveztem őket 1-6-ig, van egy nfc olvasó (kezdetben egy NFC shield, később a nagyobb hatótáv és teljesítmény miatt ID-12LA vagy ID-20 lesz).
A 6 darab tag-et megfelelő sorrendben szeretném beolvastatni. Azaz deklaráltam 6 constanst a 6 tag UID-ja alapján és azt szeretném, hogy kezdjen el beolvasni, ha odarakok bármilyen tag-et nem az elsőt, akkor addig olvasson, amíg meg nem kapja az első tag-et, amjd ha megkapta, menjen beljebb és kérje a második tag-et, ha nem a másodikat kapja, addig olvasson, amíg azt nem adom neki....
A mintakódomban amivel szenvedek az a hibajelenség, hogy kéri az első tag-et, ha nem azt adom neki, akkor olvas újra, ez idáig rendben is van. Ha odaadom neki a megfelelőt, akkor kéri a második tag-et, majd ha nem azt adom oda, 1x lefut az else ág, hogy "újra beolvasás történik", majd másodpercek múlva kifut a kódom és kéri az első tag-et......nem értem miért.
Még egy valami észrevételt vettem észre, a két NFC/RFID olvasó között (NFC shield/ ID-12LA), hogy amíg az nfc shieldhez odaérintek egy tag-et, akkor kiolvas egyszerre vagy 6x, tehát lehet a kódom lefutna, amíg a ID 12-nél ott tarthatom a tag-et, akkor is csak 1x olvassa le.
Hogyan tudnám még azt kiküszöbölni, hogy egyszer olvasson (tag UID) és utána többet már ne, csak fusson tovább a kódom?
És a satnya kódrészletem amin már 2 napja töröm a fejem hiába......
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
#include <NfcAdapter.h>String const myUID1 = "F0 D7 70 80";//
String const myUID2 = "A0 3C 8D 24";//
String const myUID3 = "C0 9A 0E 26";//
String const myUID4 = "D2 82 C0 3D";//
String const myUID5 = "A2 E1 C1 3D";//
String const myUID6 = "C0 B6 06 26";//PN532_SPI interface(SPI, 10); // create a PN532 SPI interface with the SPI CS terminal located at digital pin 10
NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter objectvoid setup()
{
Serial.begin(115200);
//Serial.println("NFC Tag Writer"); // Serial Monitor Message
nfc.begin();
}void loop()
{
if (nfc.tagPresent())
{NfcTag tag = nfc.read();
String idnumber = tag.getUidString();if (myUID1 == idnumber)
{
Serial.println("This is the first");NfcTag tag = nfc.read();
idnumber = tag.getUidString();delay(4000);
if (myUID2 == idnumber)
{
Serial.println("This is the second");
NfcTag tag = nfc.read();
idnumber = tag.getUidString();delay(4000);
if (myUID3 == idnumber)
{
Serial.println("This is the second");
NfcTag tag = nfc.read();
idnumber = tag.getUidString();delay(4000);
if (myUID4 == idnumber)
{
Serial.println("This is the fourth");
NfcTag tag = nfc.read();
idnumber = tag.getUidString();delay(4000);
if (myUID5 == idnumber)
{
Serial.println("This is the fifth");
NfcTag tag = nfc.read();
idnumber = tag.getUidString();delay(4000);
if (myUID6 == idnumber)
{
Serial.println("This is the sixth");
}
else
{
Serial.println("Not correct tag!");
}
}
else
{
Serial.println("Not correct tag!");
}
}
else
{
Serial.println("Not correct tag!");
}
}
else
{
Serial.println("Not third tag!");
do {
NfcTag tag = nfc.read();
idnumber = tag.getUidString();
delay(2000);
}
while (myUID3 == idnumber);
}
}
else
{
Serial.println("Not second tag!");
do {
NfcTag tag = nfc.read();
idnumber = tag.getUidString();
delay(2000);
}
while (myUID2 == idnumber);
}
}
else
{
Serial.println("Not firts tag!");
do {
NfcTag tag = nfc.read();
idnumber = tag.getUidString();
delay(2000);
}
while (myUID1 == idnumber);
}
}
else
{
Serial.println("Place tag to the reader!");
}
} -
Danex
addikt
Lehet erre a do-while jobb megoldás lenne mint az egymásba ágyazott if-ek.
De ha if-et akarunk, akkor szerintem úgy lehetne megoldani a gondot, hogy a kiugrásnál (else) le kéne mentened , hogy mikor ugrott ki és ,hogy ha újra lefut a loop akkor onnan folytassa.
De lehet hülyeséget mondok, így egy oszlopba téve (tagolás nélkül) kb olvashatatlan számomra a kód
[ Szerkesztve ]
-
JozsBiker
aktív tag
Szerintem is igaza van Danex -nek, a feladat leírása alapján tipikusan while -lal kellene operálnod. 6 db while ciklus és kész. Az első addig fut, amíg az első tag -et meg nem kapja. Ha nem azt kapja akkor hibaüzenet. Ha megkapta megy a második while -ra ami a második tag -et várja, és így tovább.
Abban is igaza van Danex -nek, hogy így strukturálatlanul képtelenség áttekinteni a kódot.Valahogy így:
idnumber = ""; // Adunk egy indulóértéket ami biztosan nem egyezik egyik UID -vel sem
while ( idnumber != myUID1 ) // Amíg nincs egyezés nem lép ki a ciklusból
{
NfcTag tag = nfc.read();
idnumber = tag.getUidString();
if ( idnumber != myUID1 ) Serial.println("Not correct tag!");
}
Serial.println("This is the first"); // Megvan az első, hiszen elhagyta a ciklust
delay(4000);while ( idnumber != myUID2 )
{
NfcTag tag = nfc.read();
idnumber = tag.getUidString();
if ( idnumber != myUID2 ) Serial.println("Not correct tag!");
}
Serial.println("This is the second"); // Megvan a második, hiszen elhagyta a ciklust
delay(4000);stb.
De biztos van egyszerűbb megoldás is :-)
-
bacus
őstag
válasz JozsBiker #1869 üzenetére
Eleve van egy loop, hiszen a fő ciklus megy körbe körbe.
Én a tagokat egy arrayben tárolnám.
setupban
be kell állitani, hogy a vart kod az az array első elemeA fő ciklus lépései pedig.
1. beolvas2. összehasonlitani, hogy a beolvasott az egyenlő e a várt kóddal
ha igen, akkor a várt kód értéke a következő array, kiértékelni, hogy nem e ez volt az utolsó array tag, ha igen, akkor hurrá öröm és bódottá3. én raknék bele egy timeoutot, ami után megint az első array elemet kéri, mert ne várja már a következő taget évekig.
(persze nem tudom mi a cél, de enélkül sok értelmét nem látom.., hacsak nem valami ellenőrző pontokrol összeszedett beolvasás a cél, hogy a biztonsági őr pl csak adott sorrendben olvashatja le a pontokat, különben nem számit körbejárásnak.)4. várni pár ms
[ Szerkesztve ]
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30
-
gyapo11
őstag
válasz Flashback #1871 üzenetére
Akár 1000-et is. De a shiftregiszter csak egy bitet ír vagy olvas egységenként, a soros porton küldött-fogadott byte-ok sokkal rugalmasabb vezérlést tesznek lehetővé.
menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
gyapo11
őstag
Volt szó a triakos kapcsolgatásról, most csináltam tesztet három fogyasztóval, mind jól ment.
Kapcsolóüzemű telefontöltő, szintén kapcsolóüzemű táp a scannerhez, és trafós dugasztáp 9 V 0.5 A-es, egy ledsor ment róla.
Szóval lehet használni vezérelt konnektorhoz. Konkrétan ez a modul volt maxra tekert potméterrel: link. MAC97A6 triak van benne.menyország -> mennyország, akadáj -> akadály, jótálás -> jótállás, Iphoneal > Iphone-nal, kisuly > kisujj, csővet > csövet
-
Pubszon
veterán
válasz Flashback #1871 üzenetére
3 ilyen modul már 96 kimenettel rendelkezik, de 4 pedig már 128-al.
4 modullal kb 13000Ft-ból kijössz és sokkal jobban kezelhető, illetve még marad is 28 szabad kivezetésed, meg az arduinon is csak 3 kivezetést használ fel.
Relés kapcsoláshoz jó lenne ilyen modul, de tranzisztor is jó lenne, sőt olcsóbban is kijönnél vele ha magad meg tudod csinálni.ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
-
Flashback
addikt
Köszönöm az ötleteket
Nem annyira értem ezt a shift regiszteres dolgot. Rákötök mondjuk 2 shift regisztert a duinóra.
Hogy tudom megmondani hogy mondjuk a 20-as kimenet legyen 0 vagy 1? Shift regiszterre kell valahogyan hivatkozni, aztán a kimenetre?Bocs nincs hosszú ö, ü és néha az á is ä :)
-
bacus
őstag
válasz Flashback #1876 üzenetére
kicsit visszaolvasol, én linkeltem itt videot is, hogy hogyan lehet bemenetnek használni (az a bonyolultabb), illetve kimenetnek.
Shift regisztert úgy képzeld el, hogy a kimenetek értékét mindig egyel lépteti, ahogy a bemenetet megmondod.
Ezeket sorba kötve, akárhány kimeneted lehet. A lényeg, ha 16 kimenetből mind nulla, és te a 10. kimenetet akarod megváltoztatni, akkor 16x közlöd vele egyesével az értékeket, (ebből a 10. lesz más), majd egy vezérlőlábbal a kimeneten egyszerre jelenik meg a változás. (ezért kell 3 láb a vezérléshez, data, clock, és state)"16x közlöd vele" --- nyilván ebben a speciális esetben elegendő lenne 10x, hiszen mind nulla volt, beirsz neki 1-t. ,majd azt 9x arréb shifteled.
A 13db shift register ( 74HC595 ) kb 700 ft (lomex), próbapanel 2 db 400 ft, ebből már megvan a 100 kimenet, és csak kicsit kell forrasztgatni, drótozni..
[ Szerkesztve ]
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30
-
Flashback
addikt
-
tvamos
nagyúr
válasz Flashback #1878 üzenetére
Nem erdemes megtanulnod a shift regisztereket, ha most az egyszer kell, es soha tobbszor! En 95-200-ig szivtam vele eleget, (ipari kornyezetben,) tobbszor en nem hasznalok ilyen vackokat. Ha soroson kommunikalsz, akkor barhol ra tudsz akasztani a soros vonalra egy PC-t es tudsz debugolni. Ha nincs legalab egy rendes oscilloscope-od, akkor foleg hagyd oket. Felteszel egy arduino mini pro-t, es van 10 kimeneted. Veszel 10-et. Lehet SPI, IIC, vagy akarmit irni ra, de ami a legjobb, sima soros adatatvitel. Mindent tudsz tesztelni PC-rol, egy usb-soros atalakitoval.
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
tvamos
nagyúr
Vasárnap érek ra, megkeresem, és átküldöm a kódom, ha kell. PC-ről vezéreltem 8 kimenetet. (Vagy 2 éves a kód...)
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
bacus
őstag
Ez marhaság, én 7 szegmenses kijelzőket hajtottam meg vele, többet is, soha nem volt vele probléma.
A kód egyszerü és világos. Nincs vele szivás.
Vettél készen egy darab szart kinából, ami nem működött, ez alapján az első arduino is rossz volt amit rendeltem, most fröcsögnöm kellene, hogy az arduino szar?
Erre a feladatra többféle megoldás is létezik, a shift regiszteres árban verhetetlen.
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30
-
bacus
őstag
válasz Flashback #1878 üzenetére
Miért kéne tudnia, hol a vége? az utolsó után nincs kötve a következő shift register. Ennyi.
A sebesség az órajeltől is függ. Ha elég alacsonyra állitod , akkor meg tudod csinálni, hogy nem.
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30
-
tvamos
nagyúr
Nem, meg az elozo munkahelyemen hasznaltam, jonehany kapcsolasban, mert draga volt a proci. PIC16C84, Meg AT89 volt a slager, de volt szerencsem talalkozni 8031-el is, franko eprom emulatorral. Akkor en is beepitettem vagy 200 olyan IC-t. Hidd el, nem tegnap kezdtem a szakmat, hanem tobb, mint 20 eve.
Erre a feladatra többféle megoldás is létezik, a shift regiszteres árban verhetetlen.
Milyen szempontbol verhetetlen? Megsporol vele egy 3 gombocos fagyi arat?[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
bacus
őstag
Én hiszek neked. De azért jóval több az árkülönbség 3 gombóc fagyinál. Mondjuk pont nem tudom 3 gombóc fagyi árát
Nem tudom mit kell tanulni a shift regiszteren, egyszerü program, feltölti, 3 vezeték az arduról, nincs szivás, helyesbitek, nekem még nem volt, de még lehet.
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30
-
zka67
őstag
Srácok, igaza van tvamos-nak, ide soros vonal kell, mégpedig RS485-ös adó-vevőkkel, különben nem fog működni a rendszer. Egy I2C buszt nem lehet elvinni még 2 méterre sem, soros vonalat árnyékolt vezetékkel talán 15m-re alacsony sebességgel. RS485-öt meg csavart érpáron (UTP vezetéken) akár 1200m-re is (nekem egy ipari parkban működik 80 darab kártyaolvasóm ezzel a megoldással).
Továbbá figyelembe kell venni azt is, hogy mit használtok kapcsolónak? Relét? Szerintem marhaság, egyrészt drága, másrészt meg sok a gond vele, néha több kárt csinál mint hasznot. Én MOSFET-et használnék, ha a kapcsolt áramköröknek nem kell összekötve lennie a GND pontjuknak. (Egy relé árából veszek tíz mosfetet).
Én úgy csinálnám meg a rendszert, hogy - ha már ardunionál kötöttetek ki - vennék egy vezérlő adruinot, aminek a soros port kimenetére tennék egy 75176-os IC-t adó üzemmódban, majd UTP-n sorba felfüznék rá annyi aurduinot, amennyi szükséges. Ezeknek a soros port bemenetükre tennék szintén 75176-os IC-ket vevő üzemmódban. Minden egyes vevő arduinonak adnék egy báziscímet és kész is a protokoll.
Ha be akarok kapcsolni egy kimenetet, akkor kiküldöm a kapcsolni kívánt port címét, 0-127 között, valamint a 7-es bitet 1-be kapcsolom, ha ki akarom kapcsolni, akkor pedig a 7-es bitet nullába kapcsolom. Ha a cím az adott arduino tartományába esik, akkor feldolgozza a parancsot, ha nem, akkor figyelmen kívül hagyja.
Ezzel ki lehet védeni azt is, hogy esetleg gyorsan ki-be kapcsolgathassa az adott portot (vannak olyan áramkörök, amik nem igazán szeretik ezt). Pl. ha ki van kapcsolva a port és bekapcsolás parancs jön, akkor bekapcsolja. De pl. ha 5 mp-en belül kikapcsolás parancs jön, akkor azt eltárolja, de nem kapcsolja ki azonnal a portot. Ha közben ismét bekapcsolás parancs jön, akkor marad bekapcsolva a port, különben 5 mp múlva kikapcsolja.
-
tvamos
nagyúr
Oké, akkor úgy 5 ezer Forint lehet kb.
(#1886) zka67 válasza tvamos (#1884) üzenetére
Végülis lehet RS485 is... De mondjuk a buszmeghajtókat utólag fel lehet szórni, ha gond van, es nem kell újradrótozni teljesen a hw-t, meg átírni a sw-t....[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Andris246
tag
Sziasztok
Egy nagyon amatőr kérdésem lenne
Hogyan tudok beírni számokat egymás után pl.: 100.
Akárhogy próbálom vagy hibás lesz a kód vagy nem csinál semmit, vagy beírja az egyest utána felülírja nullára és így tovább.
(van 1 érintő kijelzőm és azon akarok adatokat írni be)Nagyon amatőr dolog tudom de még erre nem jöttem rá
Válaszotokat köszönöm
Üdv: Bandi
-
DeniL
tag
Sziasztok,
még mindig az NFC olvasó, még mindig ugyan az a projektem fut. Tehát a 6 Tag-et csak egy adott sorrendben akarom beolvasni, ha más tag-et kap, mint amit kellene, akkor olvasson újra.
1 hete küzdök vele, bár ahhoz képest, hogy jó 2 héttel ezelőtt még az arduinóról sem sokat hallottam, haladok, de nagyon lassan.
Időközben megjött az ID-12LA típusú nfc/rfid olvasó, így mellőztem az NFC shieldet. Viszont ehhez a korábban használt 6 darab tag nem jó, így rendelhetek másikat. Amíg a megfelelő mennyiségű tag-re várok, 2 tag-et próbáltam összehasonlítani és tudni illik, ha kettőt végre sikerül, akkor utána a többit már gyerekjáték lenne.....
Csak jutnék már túl azon a kettőn.
Bekerült a projektembe egy 20x4-es LCD kijelző is, így a kiíratás már arra történik.
Közben próbáltam megfogadni két korábban segédkező fórumtárs javaslatát, hogy tároljam a tag-ek azonosítóit tömbben, a másik pedig a while ciklus lett volna.
Csak simán egymás után futtatott while-kkal is kifutott a kódból, bár nem értem miért.....
De nem adom fel, keresem a megoldást.Tehát a kódomban van 1 tömbön, benne a 2 tag azonosítójával, és do-while-al pörgetem loopban a ciklust. 1 flag-et használok, ha van egyezés a flag értéke növekszik, ha nincs egyezés, marad a flag értéke.
Problémáim:
Ha simán minden kiíratás nélkül futtatom a kódom, többszöri tesztelésre ha helyes kártyát adok "Good job", ha helytelent "Wrong sequence". Ez így helyén is lenne, de:
1. ha lefut 1x hibátlanul, kifagy a végén az arduíno, nem indul újra az egész ciklus, tuti a kódom hibás, nem tudom, hogyan tudnám újra elől kezdeni vele a beolvasást.
2. szerettem volna a végén kiírni, ha megvan a 2 kártya helyes sorrendje, hogy "Nice job" vagy valami hasonló, de egyszerűen nem találom hová tudnám beszúrni. Én naívan beraktam a while után (gondoltam ha kilép majd a ciklusból, pont jó lesz), aztán eltelt 2 óra, mire rájöttem, hogy rfid.available miatt bármikor kártyát érintek az olvasóhoz, meg fog jelenni a kiíratásom...tehát zsákutca
3. hogyan lehetne az lcd kijelzőn a sort törölni? Nincs valami clearline vagy hasonló? Nagyon kókány, de jobb ötletem nem támadt, mint hogy teleírom space-el......
4. gondoltam folytatom a kiíratást azzal, hogy odaírom, hogy "első (kártya)" ha az elsőt húzom le a "good job" szöveg után, majd a "második" szócskát a második kártya lehúzásakor. Mivel 1 ciklus pörög, nehéz volt eldöntenem hogy a "good job szöveg" melyik lehúzásra is vonatkozott (korábban nagyok voltak a lcd printnél a delay-ek stb stb stb), meg amúgy is szeretném kiíratni, így hát csináltam egy második tömböt és szintén a flag változóval szedem ki a tömbből az elemet, viszont amint megcsinálom a helyes sorrendet, kiírja első, második, majd egy pillanatra belefut az else ágba és kiírja "Wrong sequence". Képtelen vagyok megfejteni, hol hibázom.
Ha leszedem a kiíratást, csak marad a két rövid szöveg "good" vagy "wrong" semmi baja. Mihelyst mögé szúrom a "első" és "második" szavakat, a ciklus vége belefut az else ágba....Néztem a flag értékét, helyesen változik.....
Hát második körben így ennyi. Nem adom fel, viszont valami útmutatást szívesen fogadnék lelkes amatőrként....köszi előre mindenkinek, és akkor íme a kódom...
#include <SoftwareSerial.h>
#include <ID20Reader.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ID20Reader.h>
int rx_pin = 2;
int tx_pin = 8;
ID20Reader rfid(rx_pin, tx_pin);
LiquidCrystal_I2C lcd(0x27,20,4);
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("****Swipe a card****");
}
char* sequence[] = { "7C005669FD" , "7C00567C09" };
char* eredmeny[] = { " elso" , " masodik" };
int flag = 0;
int max_tomb = 2;
String code;
void olvas()
{
rfid.read();
if (rfid.available())
{
do{
code = (String)rfid.get();
if (code == sequence[flag])
{
flag++;
lcd.setCursor(0,1);
lcd.print("Good job!" + (String)eredmeny[flag-1]);
delay(2000);
lcd.setCursor(0,1);
lcd.print(" ");
}
else
{
lcd.setCursor(0,1);
lcd.print("Wrong sequence!");
delay(2000);
lcd.setCursor(0,1);
lcd.print(" ");
}
Serial.print(flag);
}while(max_tomb == flag);
}
} -
Nagytoll
senior tag
NFC/RFID tagek és kártyákról leolvasott számot lehet módosítani, vagy ezeket a gyárban kapják? Nem mifare-osak, hanem valami más fajta.
[ Szerkesztve ]
-
DeniL
tag
válasz Nagytoll #1892 üzenetére
Nem nagyon hiszem, hogy a tag UID-jét felül tudod írni. De amúgy milyen célból is kellene? Fel tudod írni a tag-et más tartalommal, majd kiolvasáskor a tartalomra hivatkozva dolgozhatsz a tag-el. Nálam jelen esetben csak "műveletet végez", nekem üresek a tag-jeim, szükségtelen is lenne bármivel is felírnom, ha úgysem használom.
De majd valaki okosabb kijavít, ha hülyeséget írok....
-
Nagytoll
senior tag
Van egy rendszer ami mágneskártyákat használ, kíváncsi vagyok, hogy milyen módon azonosítja a kártyákat. Van egy rézhurok szerű olvasóm ami beolvassa ezeket a kártyákat és kidob egy számot, ez érdekelt igazából, hogy a számsor amit kapok az módosítható-e, vagy a rendszer még ezen felül ad adatokat a kártyákhoz
[ Szerkesztve ]
-
Pubszon
veterán
Üdv.
Lehet hülyeség, de én pin kódos rendszert csináltam hasonlóképpen.
A gond szerintem az, hogy a flag eléri a 3-at, ahhoz meg már nincs semmi sem rendelve.
Alakítottam a kódodon, próbáld ki, hátha jó így.#include <SoftwareSerial.h>
#include <ID20Reader.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ID20Reader.h>
int rx_pin = 2;
int tx_pin = 8;
ID20Reader rfid(rx_pin, tx_pin);
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int cards = 2; //NFC kartyak szama
char* sequence[cards] = { "7C005669FD" , "7C00567C09" };
char* eredmeny[cards] = { " elso" , " masodik" };
int flag = 0;
int max_tomb = 2;
String code;
void setup()
{
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("****Swipe a card****");
}
void loop()
{
rfid.read();
if (rfid.available())
{
code = (String)rfid.get();
if (code == sequence[flag])
{
lcd.setCursor(0, 1);
lcd.print("Good job! ");
lcd.print(eredmeny[flag]);
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
flag++;
}
else
{
lcd.setCursor(0, 1);
lcd.print("Wrong sequence!");
delay(2000);
lcd.setCursor(0, 1);
lcd.print(" ");
}
Serial.print(flag);
}
if (flag >= cards)
{
flag = 0;
}
}Sajnos én nem tudom kipróbálni.
[ Szerkesztve ]
ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
-
JozsBiker
aktív tag
Az egyik gond az lehet amit úgy látom többen is írtak, hogy az olvas() helyett loop() kellene.
Én a While használatában is problémát látok. A While ciklus addig megy, amíg a feltétel teljesül. Ha a While az elején van akkor lehet hogy egyszer sem fut le ( ha a feltétel nem teljesül ), míg a Do ... While egyszer mindenképpen lefut, és a végén van vizsgálva a feltétel. Ha teljesül akkor elölről kezdi, ha nem teljesül, kilép.
Te a flag -et 0 -ról lépteted, és gondolom azt akarod, hogy ha elér 2 -ig ( max_tomb ) akkor kilépjen a ciklusból. Viszont már az első lefutás után kilép, hiszen a megadott feltétel nem fog teljesülni.( Zárójelben jegyzem meg, hogy programozástechnikailag szerencsésebb
volna nem úgy megadnod egy feltételt hogykonstans == változó
hanem így:
változó == konstans
Hiszen a változóhoz viszonyítunk. )
[ Szerkesztve ]
-
DeniL
tag
válasz JozsBiker #1898 üzenetére
Danex: az ott loop volt, de utána saját eljárásnak írtam meg és void loopban azt hívtam meg, de azzal sem voltam előrébb. Már vagy 12 féle verzióm van erre a problémámra, szerintem nem a legutolsót másolhattam be, de köszönöm az észrevételt.
Pubszon: tanulmányozom a feljavított kódom, holnap melóban ez lesz az első, hogy teszteljem....
(sajnos ott kezdtem el, itthon meg másfajta kártyaolvasóm van és lusta vagyok átírni a beolvasáshoz szükséges dolgokat.....majd ha egyszer már sikerült, utána az itthonival is kezdek valamit, de nem ez a cél egyenlőre.Holnap beszámolok róla, hogy lefut-e. Köszi!
JozsBiker: do...while-am van simán while helyett, de rá fogok nézni. Kezdek bekavarodni, de már nem fogom abbahagyni, amíg össze nem hozom és meg nem értem.
A változó == konstans hasoníltást pedig köszönöm.
Holnap folytatom...
-
bacus
őstag
válasz Pubszon #1896 üzenetére
Nem hülyeség, igy van. Ráadásul a loop utána úgy pörög, hogy nincs benne semmi delay, se semmi amit végrehajthat, igy aztán el is hiszem, hogy látszólag lefagy.
A kódod nekem jónak tűnik, kiváncsi vagyok hogy tényleg az e. A wrong értéknél nem kellene még nullázni a flag változót? Nem az a cél, hogy rontás esetén kezdje előlről? Bár igy relative könnyen törhető, hiszen megkeressük az első kártyát, majd, utána mindig a következő kártyát..
Tehát nem tudom a jó sorrendet, 5 kártya esetén a legrosszabb esetben is 5+4+3+2 azaz 12 próbából megvan a helyes sorrend. Ha csak a végén közlöm, hogy jó e a sorrend, azaz mindig bekérem az 5 kártyát, majd a végén mondom, hogy sajnos nem nyert, akkor 5!, 120 féle képpen kell próbálkoznom, hogy a jó sorrend meglegyen. Ebben az esetben a kódot át kell irni..
Mi a cél?
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30