- Android alkalmazások - szoftver kibeszélő topik
- Milyen okostelefont vegyek?
- CMF Phone 2 Pro - a százezer forintos kérdés
- Megérkezett a Google Pixel 7 és 7 Pro
- Honor Magic6 Pro - kör közepén számok
- Google Pixel topik
- One mobilszolgáltatások
- Honor 200 Pro - mobilportré
- Magyarított Android alkalmazások
- Hivatalos a OnePlus 13 startdátuma
-
Mobilarena
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
-
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?
-
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...
-
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. )
-
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.
-
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
-
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
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.
-
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);
}
} -
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
-
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.
-
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.
-
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? -
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.
-
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...)
-
-
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.
-
-
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..
-
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? -
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. -
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. -
-
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
-
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 :-)
-
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
-
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!");
}
} -
-
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??
-
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?
-
Bekoszonok en is egy uno-val, udv. Ha megerkezik a motorvezerlo, akkor majd valami leptetomotoros bohockodast tervezek, valami kis jarmuvet, sajat szorakozasra.
-
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. -
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!
-
gyapo11
őstag
válasz
Nagytoll #1846 üzenetére
A timer libraryvel elég könnyen lehet delay nélküli időzítéseket csinálni.
-
Nagytoll
senior tag
Hello! Megint van egy gondom/kérdésem. van ez a kód :
if ((gx==px) && (gy==py)) {
while(1) {
LED_Matrix.displayPic(picDat0);
if((digitalRead(10)==HIGH) || (digitalRead(11)==HIGH) || (digitalRead(12)==HIGH) || (digitalRead(13)==HIGH)) {
x = TrueRandom.random(0,8); //x,y -> P1
y = TrueRandom.random(0,8);
gx = TrueRandom.random(0,8); //gx, gy ->P3
gy = TrueRandom.random(0,8);
px = TrueRandom.random(0,8); //px, py ->P2
py = TrueRandom.random(0,8);
delay(1000);
LED_Matrix.clear();
break;
};
};
};A lényeg az, hogy megy a mátrixon egy pötty(P1) balról jobbra az egyik sorban, van egy másik pötty(P2) random valahol és van egy harmadik pötty(P3) amit lehet irányítani, ha P1 nekimegy P3-nak akkor rendesen működik ez a kód, mármint egy ugyan ilyen, csak az if feltételében az van, hogy ((gx==x) && (gy==y)). Ha viszont P3 megy neki P1-nek (és ugyanígy P2-nek is, ez igazából a cél, P2 "megszerzése") akkor a program vár a delay szerint 1mp-et és magától újraindul/loop elejére megy. Amit normál esetben csinál(ha P1 megy neki P3-nak) az az, hogy csak akkor megy a loop elejére, ha megnyomom a gombot, aztán vár és break. Szerintetek ez miért van?
-
Nagytoll
senior tag
Hello! Van egy TM1638-as chipre épülő led mátrixom, most gyakorlom a használatát. Hogy lehetne azt megoldani, hogy megy egy pont a mátrixon és közben gombokkal egy másik pontot tudok irányítani? A lényeg, hogy azonos időben ugyanolyan gyorsan bevegye az inputot, és az önjáró golyó is menjen normálisan. Az alapprogram megvan, csak a delay belassítja, utánaolvastam neten a millis() nevű dolognak, de nem nagyon értem/nem tudom, hogy rakhatnám bele a kódomba, ezen kívül van valami lehetőség ilyen "párhuzamos futtatás" szerűségre?
-
Pubszon
veterán
válasz
Pubszon #1838 üzenetére
Az idő lejárt, de módosítottam a kódodat.
#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljuk
LiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)
//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;
boolean ledstate = true;
void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); // alapértelmezettként ki van kapcsolva
pinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás
//int KiAll_13; //13. kimenet állapotát figyeljük
//KiAll_13 = 0; // alapértelmezés beállítása
digitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}
void loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if ((digitalRead(LED) == LOW) && (digitalRead(NYOMOGOMB) == LOW) && (ledstate))
{
ledstate = false;
delay(20); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if ((digitalRead(LED) == HIGH) && (digitalRead(NYOMOGOMB) == LOW) && (ledstate))
{
ledstate = false;
delay(20); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
}
if ((digitalRead(NYOMOGOMB) == HIGH) && (!ledstate))
{
ledstate = true;
}
} -
maestro87
őstag
válasz
Pubszon #1833 üzenetére
Nem csak I2C modul jár hozzá? A leírásból és képről én azt veszem le, hogy rá is van forrasztva ez a modul.
A sima 20x4-est én legutóbb, legolcsóbban aliexpressről rendeltem valami 1500Ft-ért.Mellesleg nem tud valaki olyan I2C modult amibe nincs beforrasztva a tüskesor? A múltkorival én eléggé megszenvedtem míg ki tudtam cserélni hüvelysorra.
-
Pubszon
veterán
Az ISP-s kiiratásos dolgot nem értem.
A kódot elnézve jó.
Szinte ugyan azok a parancsok, csak I2C-s könyvtár kell hozzá, de nekem is megvan.A fenti kódodban pl az azonos sorokat összevonhatod.
Javitottam a loop részedetvoid loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if (digitalRead(LED) == LOW)
{
delay(20); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
delay(1000);
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if (digitalRead(LED) == HIGH)
{
delay(20); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
delay(1000);
}
}De ezzal továbbá ahogy már írták, a sok delay megfogja az egészet.
De ha használsz még egy bitet (boolean) akkor azzal kiküszöbölheted ezt és a kijelző se fog másodpercenként frissülni, hanem csak akkor amikor annak kell.
Így:
Az első sor a setup rész elé kell.
boolean ledstate = true;
.
.
.
.
void loop()
{
// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if ((digitalRead(LED) == LOW) && (ledstate))
{
ledstate = false;
delay(20); // prell elkerülése
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
}
// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if ((digitalRead(LED) == HIGH) && (!ledstate))
{
ledstate = true;
delay(20); // prell elkerülése
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
}
} -
Imy
veterán
Most nézem, itt 2x16-os LCD-re van írva.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27,16,2); //set the LCD address to 0x27 for a 16 chars and 2 line display
void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("b2cqshop");
lcd.setCursor(0, 1);
lcd.print("Voltage: ");
lcd.setCursor(13, 1);
lcd.print("V");
}
void loop()
{
int val;
float temp;
val=analogRead(0);
temp=val/4.092;
val=(int)temp;//
lcd.setCursor(9, 1);
lcd.print(0x30+val/100,BYTE);
lcd.print(0x30+(val%100)/10,BYTE);
lcd.print('.');
lcd.print(0x30+val%10,BYTE);
delay(100);
}Ha ezt a sort átírom, akkor elvileg tudja a 4x20-at?
LiquidCrystal_I2C lcd(0x27,20,4);Kiírás hogyan megy ISP-nél, ugyanúgy mint a hagyományosnál? Pl...
lcd.begin(20, 4); //Az LCD 4 sor, 20 oszlopos
lcd.setCursor(3, 1); //
lcd.print("tESZT:"); // -
Saua
tag
Szia,
Én is nagyon kezdő vagyok...de ez a kód valószínüleg nem működik rendesen, rengeteg késleltetés van benne....és ameddig egy-egy delay tart hiába nyomkodod a gombot nem történik semmi. Nem árt kész kódokat is tanulmányozni. Sokmindent már megoldottak, nehezen lehet tökéletesíteni.
-
Imy
veterán
4 soros LCD-t tudtok ajánlani e-bayről ami jól működik? 2 sorosom van, de kevés lesz, sok információt szeretnék kiírni rá.
-
Imy
veterán
Erről mi a véleményetek? Magam találtam ki, és működik. Valami hiba esetleg? Jobban szeretem én kitalálni, s szívni vele. persze segítség sosem árt.
De ez nagyon az eleje a végleges programnak.
#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljukLiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); // alapértelmezettként ki van kapcsolvapinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtás//int KiAll_13; //13. kimenet állapotát figyeljük
//KiAll_13 = 0; // alapértelmezés beállításadigitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}void loop()
{// Ha LED ki van kapcsolva, akkor be lehet kapcsolni
if (digitalRead(LED) == LOW)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), HIGH);
lcd.setCursor(10, 0); //
lcd.print("BE"); // Bekapcsolás kiírás
delay(1000);
}
}
}// Ha LED be van kapcsolva, akkor ki lehet kapcsolni
if (digitalRead(LED) == HIGH)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), LOW);
lcd.setCursor(10, 0); //
lcd.print("KI"); // Bekapcsolás kiírás
delay(1000);
}
}
}}
-
-
zka67
őstag
Szia, a működése: a prev változó tárolja a nyomógomb előző állapotát, a state a kimenet aktuális állapotát.
Utána egy végtelen ciklusban beolvassa a curr változóba a nyomógomb aktuális állapotát, majd megnézi, hogy a nyomógomb most le van-e nyomva és az előző állapotban nem volt-e lenyomva, azaz most került-e lenyomásra. Ha igen, megváltoztatja a kimenet állapotát és kiírja azt a portra. A végén minden esetben átkerül az előző állapotba a nyomógomb aktuális állapota, és vár 100ms-et a nyomógomb prell elkerülésére.NYOMÓGOMB ___ _________ _____ ______
\____/ \/\______/ \_/
LED ______________ _______
___/ \______________/
MINTAVÉTEL | | | | | | | | | | | | | | |Szerk: lásd gyapo11 válaszát is
-
gyapo11
őstag
A while feltétele 1, ami igaz, vagyis örökké fog futni.
curr = digitalRead(NYOMOGOMB);
beírja a curr változóba a gomb állapotát.
if ((curr == 0) && (prev != 0)) {
Mivel prev=1, vagyis igaz, hogy nem 0, csak akkor igaz az if feltétele, ha curr=0. Vagyis amíg curr=1, addig nem történik változás, az if nem fut le,
prev = curr;
prevbe beírja a curr-t, vagyis 1-et, vár 100 msecet, és újra kezdi a while-t.Egyszer megváltozik a gomb állapota, és a curr-ba 0 kerül. Ekkor az if feltétele már igaz lesz, mert curr=0 és prev nem 0.
state ^= 1;
A ^ jel a bitwise xor, vagyis 1-gyel xorolja a biteket, aminek következtében ami 0 volt az 1 lesz, ami 1 volt az 0 lesz. A state eddig 0 volt, vagyis most 1 lesz.
digitalWrite(LED, state);
Vagyis a LED pinbe 1-et ír, a led világítani kezd.
prev = curr;
A prevbe 0 kerül, innen már tudjuk, hogy az if nem fog lefutni, mert a prev nem 0 feltétel nem teljesül, egészen addig, amíg a nyomógomb állapota ismét nem változik és válik 1-gyé.
delay(100);
Ez a pergésmentesítés miatt kell, hogy a nyomógomb lenyomásakor és felengedésekor létrejövő többtucat ki-be kapcsolást figyelmen kívül hagyjuk. Csak az első változást dolgozzuk föl, utána várunk 100 msecet, addig ezek a parazita kapcsolások megszűnnek. -
Imy
veterán
Most ismerkedek az arduinóval, de nem akar összejönni a következő program részlet. A lényeg hogy a nyomógomboknak a 13-as kimenetet kellene működtetni,. Ha megnyomom bekapcsol, ha megnyomom még egyszer kikapcsol.
Vizsgálni akarom, ha be van kapcsolva akkor lehessen kikapcsolni... De nem megy.#include "LiquidCrystal.h"
// A LiquidCrystal eljarast hasznaljukLiquidCrystal lcd(5, 4, 0, 1, 2, 3);
// Az LCD bekotese labak szerint:
// RS(D5), E(D4), D4(D0) ,D5(D1), D6(D2), D7(D3)//PIN0 LCD D4
//PIN1 LCD D5
//PIN2 LCD D6
//PIN3 LCD D7
//PIN4 LCD E
//PIN5 LCD RS
int NYOMOGOMB = 6; //PIN6
//PIN7
//PIN8
//PIN9
//PIN10
//PIN11
//PIN12
int LED = 13;void setup() {
lcd.begin(16, 2); //Az LCD 2 sor, 16 oszlopos
lcd.print("Nyomogomb:"); //
lcd.setCursor(10, 0); //
lcd.print("KI"); //pinMode(NYOMOGOMB, INPUT); //PIN6 nyomogomb bemenet
pinMode(LED, OUTPUT); //PIN13 LED meghajtásint KiAll_13; //13. kimenet állapotát figyeljük
KiAll_13 = 0; // alapértelmezés beállításadigitalWrite((LED), LOW); //LED kikapcsolva alapértelmezettként
}void loop()
{
nyomogomb_BE();
nyomogomb_KI();}
void nyomogomb_BE()
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW){
digitalWrite((LED), HIGH);
int KiAll_13 = 1;
}
}
}void nyomogomb_KI()
{
if (KiAll_13 == 1)
{
if (digitalRead(NYOMOGOMB) == LOW)
delay(20); // prell elkerülése
{
if (digitalRead(NYOMOGOMB) == LOW)
{
digitalWrite((LED), LOW);
int KiAll_13 = 2;
}
}
}
}sketch_oct18a.ino: In function 'void nyomogomb_KI()':
sketch_oct18a:64: error: 'KiAll_13' was not declared in this scope
'KiAll_13' was not declared in this scope -
tvamos
nagyúr
válasz
Pubszon #1819 üzenetére
Ezt én értem. Nekem is volt ilyen gondom régen. Én kidobtam az összes shift regisztett a retekbe. Elavult technológia.
Tegyél kisebb értékű felhúzó ellenállásokat! Az szerintem segíteni fog valamelyest. Ha ront a dolgon, akkor meg legalább tudjuk, hogy földlelési, vagy táp gondod van. -
Saua
tag
válasz
JozsBiker #1816 üzenetére
Szia,
Az androidos rész az Appinventorral készült, a használata nagyon egyszerü, nem kell hozzá programozói tudás. Az arduinós kód pedig mint egy legó lett összerakva egy tipikus nyomógombos példaprogramból (először bekapcsolja, majd második megnyomásnál kikapcsolja a LED-et, pergésmentesítést is használ) meg egy LED ki-be kapcsolgató kódbol.
De ha már négy nyomógombrol plusz a telefonrol jövő karaterekrő van szó, gondolom már tömböt kellene használni....az meg már más tudásszint -
JozsBiker
aktív tag
Szia !
Azért nem értem a kérdésed, mert ha egy ilyen programot sikerült összehoznod ( amihez nyilván kellett a telefon oldali rész is, ami szintén nem annyira egyszerű ), akkor miért nem tudod könnyűszerrel átírni több LEDesre :-)
Első közelítésben az jutott eszembe, hogy az adatcsere legkisebb egysége a byte, aminek ugye 256 különböző állapota lehet, tehát bőven el lehet benne kódolni 4 LED állapotát.
Vagy ha mégsem, akkor egymás után küldözgetni. Van egy elválasztó karakter, pl. * , utána szépen sorban küldöd a 4 LED állapotát. Olvasáskor a * -ból tudod hol tartasz.Épp nemrég fejeztem be egy "projektet", ami 64 db LED -det vezérel Androidról. Igaz, itt csak egyirányú a kommunikáció. Ennél úgy oldottam meg, hogy minden kigyújtásnál ill. oltásnál el van küldve a LED sorszáma, és egy + vagy - karakter attól függően hogy kigyújtani v. eloltani kell-e.
Tökre ugyanaz lett, mint ebben a videóban :
-
gyapo11
őstag
A távirányító elég könnyen törhetetlenné tehető, OTP-vel. Nem, nem a bankkal.
Fogni kell egy pro minit, egy nagyobb flasht, és teletölteni véletlenszámokkal, ugyanezt az autóba is, és szép sorban használni a byte-okat. Ha zavarják a vételt, akkor a vevő a kapott kódot keresi előrefelé x db-ig, mondjuk 10-ig. Mivel a számok között _semmi_ összefüggés nincs, nem lehet kiszámolni a következőt meg egyáltalán egyiket se. Annak a valószínűsége, hogy véletlenül eltalálja a következő 10 kód egyikét attól függ, milyen hosszú a kód. Ha mondjuk 2 byte, akkor már 1 a 65536-hoz, ha 3 byte, akkor 1 a 16 millióhoz.
Ha pedig nincs a következő 10 között a kapott kód, akkor 3-at kell beolvasni, és egymás mellett levő 3-at kell kapni.
A lehallgatást el lehet kerülni fénnyel, üvegen belül a vevő, kívülről meg rányomni az adót, azt scannelje le úgy, hogy nem veszem észre.
És ha már közel megyek, akkor az rfid is szóbajöhet, nem tudom autóüvegen át is működik-e. -
maestro87
őstag
Sziasztok!
Kicsit off leszek.
Ilyen léptetőmotor meghajtó modulból nincs véletlen valakinek elvétve kettő? Ebay-re nem tudok most várni.Természetesen felárat fizetnék értük.
-
Pubszon
veterán
Még mindig a shift regiszterrel (továbbiakban SR) bajlódok.
Van 2 projektem az asztalon és a következőt vettem észre:
Az egyik amiben van a SR az vezérel 2 LED-et, egy aktív buzzert és 4 relét.
A másik pedig egy kapunyitó elektronika.
Mind a kettő jó működik, nincsenek egy elektromos körben.
Amikor a kapunyitó 24V-os reléi kapcsolnak, akkor random a másik projekt SR kimenetén össze vissza kapcsolgatja a ledeket, reléket és a buzzert a SR.
A SR építésénél nem használtam sem ellenállást, sem pedig kondenzátort.
Ami biztosnak tűnik, azaz, hogy az USB kábelt ha kihúzom az arduinobol ami a SR-es arduino-t köti össze a géppel, akkor nincs ilyen probléma. (Mint ha egy nagy antenna lenne)
Ebből arra gondolok, hogy valami nagyfrekvenciás zajt szedhet össze az USB kábelen.
Hogy tudom én ezt megszüntetni?
Remélem érthetően fogalmaztam. -
Danex
addikt
Ami a sofőr ülésére lenne irányítva?
Az infrás pontatlan/megbízhatatlan lenne?
Meg a távirányítós részt nem építenék bele, hisz a mostani autók gyengéje is ez, hogy a távvezérlőt le tudják olvasni. Szóval a bel térből gondoltam az aktiválást/deaktiválást.
Gondoltam arra, hogy nyitástól számítva 10-15s lenne az ameddig van idő a riasztót kikapcsolni, mielőtt megszólalnának a kűrtök. Ehhez lehet kéne egy rtc modul.
GSM modulra én is gondoltam, majd keresek még hozzá.
-
Danex
addikt
Autóriasztót és így indításgátlót terveznék csinálni az autóba, szerintetek miket kéne belepakolni?
Én eddig IR mozgásérzékelőt, döntés érzékelőt és egy titkos
megoldást a gyújtás relé kapcsolásához.
-
Saua
tag
Sziasztok,
Ezt a kódot sikerült összeeszkábálni, nyomógombbal és telefonról is lehet kapcsolgatni a LED –et, és a telefonon megjelenik a LED aktuális állapota.
/*
LED attached from pin 12 to ground
pushbutton attached to pin 5 from +5V
10K resistor attached to pin 5 from ground
*/
#include <SoftwareSerial.h>
int bluetoothTx = 2; // TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3; // RX-I pin of bluetooth mate, Arduino D3
int led = 12;
int button = 5;
int dataFromBt;
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
// változókat hozunk létre:
int ledState = LOW; // kimeneti pin aktuális állapota
int buttonState; // bemeneti pin aktuális állapota
int lastButtonState = LOW; // bemeneti pin előző értéke
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup()
{
Serial.begin(9600); // Begin the serial monitor at 9600bps
bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps
bluetooth.print("$"); // Print three times individually
bluetooth.print("$");
bluetooth.print("$"); // Enter command mode
delay(100); // Short delay, wait for the Mate to send back CMD
bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity
// 115200 can be too fast at times for NewSoftSerial to relay the data reliably
bluetooth.begin(9600); // Start bluetooth serial at 9600
pinMode(led, OUTPUT);
pinMode(button, INPUT);
digitalWrite(led, ledState);
}
void loop()
{
if(bluetooth.available()) // If the bluetooth sent any characters
{
dataFromBt = bluetooth.read();
if(dataFromBt == '1'){
digitalWrite(led, HIGH);
ledState = HIGH;
}
if(dataFromBt == '0'){
digitalWrite(led, LOW);
ledState = LOW;
}
if(dataFromBt == '3'){
bluetooth.print(ledState);
}
}
int reading = digitalRead(button);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
ledState = !ledState;
digitalWrite(led, ledState);
}
}
}
lastButtonState = reading;
}Ezt szeretném módosítani, hogy négy LED –et lehessen kapcsolgatni.
Főleg a LED aktuális állapotának a lekérdezésével van a gond (most a telefon 100 miliszekundomonként küldi a 3-as karaktert és visszakapja a 1 vagy 0 karaktert)…nem tudom hogyan küldhetne a többi LED más-más karaktert az állapotokról, mert az állapotuk csak LOW vagy HIGH lehet.
-
Pubszon
veterán
-
zka67
őstag
válasz
Pubszon #1803 üzenetére
Szia, próbáld meg így:
void setup()
{
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
digitalWrite(STCP_pin, LOW);
digitalWrite(SHCP_pin, LOW);
}
...
void writereg()
{
digitalWrite(STCP_pin, LOW);
digitalWrite(SHCP_pin, LOW);
for (int i = shiftoutput; i >= 0; i--)
{
digitalWrite(DS_pin, registers[i] );
digitalWrite(SHCP_pin, HIGH);
digitalWrite(SHCP_pin, LOW);
}
digitalWrite(STCP_pin, HIGH);
digitalWrite(STCP_pin, LOW);
} -
Pubszon
veterán
Üdv.
Van egy shift register modulom, konkrétan ez.Az alábbi probléma van vele.
HIGH-ra hibátlanul kapcsol, viszont LOW-ra mindig hibásan.
Az utolsó kettőt mindig egyszerre kapcsolja, de van hogy másik kettőt is egyszerre kapcsol LOW-ra.
VIDEO ITT.Kód:
const int SHCP_pin = 12;
const int STCP_pin = 11;
const int DS_pin = 10;
const int shiftoutput = 7;
boolean registers[8];
void setup()
{
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
}
void loop()
{
delay(1000);
for (int i = shiftoutput; i >= 0; i--)
{
registers[i] = LOW;
writereg();
delay(500);
}
delay(1000);
for (int i = shiftoutput; i >= 0; i--)
{
registers[i] = HIGH;
writereg();
delay(500);
}
}
void writereg()
{
digitalWrite(STCP_pin, LOW);
for (int i = shiftoutput; i >= 0; i--)
{
digitalWrite(SHCP_pin, LOW);
digitalWrite(DS_pin, registers[i] );
digitalWrite(SHCP_pin, HIGH);
}
digitalWrite(STCP_pin, HIGH);
}Mi lehet a hiba? Vagy hardveres?
-
Köszönöm mindkettőtöknek!
Új hozzászólás Aktív témák
Hirdetés
- BestBuy topik
- Androidos tablet topic
- Raspberry Pi
- Kerékpársportok
- Brave
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Melyik tápegységet vegyem?
- Android alkalmazások - szoftver kibeszélő topik
- Mibe tegyem a megtakarításaimat?
- Dual Mode-os IPS monitorral adott magáról életjelet a Gigabyte
- További aktív témák...
- Apple iPhone 13Pro 128GB Kártyafüggetlen 1Év Garanciával
- Garmin Fenix 8 Amoled 51mm Sapphire Carbon Gray DLC - Használt, karcmentes
- Nitro ANV15-51 15.6" FHD IPS i5-13420H RTX 4050 16GB 512GB NVMe magyar vbill ujjlolv gar
- Apple iPhone SE 2020 64GB Kártyafüggetlen 1Év Garanciával
- iPad Pro 11 gen 2 + magic keyboard magyar makulátlan új állapot
- HATALMAS AKCIÓK! GARANCIA, SZÁMLA - Windows 10 11, Office 2016 2019 2021,2024, vírusírtók, VPN
- Csere-Beszámítás! Asus Tuf Gamer laptop! R5 3550H / GTX 1650 / 8GB DDR4 / 500GB SSD
- ProCaster 50UNB800H 50" 127cm FULL HD üzleti kijelző
- AKCIÓ! HP Elitedesk 800 G1 USDT mini asztali számítógép - i7 4770S 16GB RAM 128GB SSD Intel HD
- REFURBISHED - HP USB-C Universal Dock G1 docking station (DisplayLink)
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: PC Trade Systems Kft.
Város: Szeged