- Microsoft Excel topic
- Crypto Trade
- Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
- MinDig TV
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Rendszergazda topic
- Mindenki AI-t akar, már 2025-re is eladták a HBM chipeket
- Proxmox VE
- Kapnak egy rakás reklámot a Roblox játékosai
- ArchiCAD és Artlantis topik
-
IT café
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
-
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 :-)
-
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 ]
-
tvamos
nagyúr
Mintha emlitetted volna mar egyszer ezt a problemat...
Nem lehetne ugy megcsinalni a szalagot, hogy mindig odavilagitana egy lezer pointer, ahol a csavart meg kell
huzni? Mondjuk, ha meghuzta az operator a csavart, akkor pedallal, gombbal, vagy a csavarhuzo kiemelesevel leptetne, esetleg mindig csak egy csavart adagolna a gep, es mutatna, hova kell azt becsavarni.
A felautomata alkatresz beulteto allmoasokon eleg jol bevalt a modszer.Szerintem jobban megtanulja az operator mit kell csinalni, ha rontas eseten ujra kell kezdenie.
Probald ki sima HD44780 illesztos LCD-vel, hatha akkor jobb lesz, az lehet, hogy gyorsabb, mint az i2c interface-es.
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Pubszon
veterán
Ha a sorrendet elrontjak akkor nem elolrol kezdenek, hanem onnan folytatjak igaz?
Mert ha igy van, akkor a kodomat probald meg, annak igy kell viselkednie.
Csak a cards valtozot ird at annyira, amennyi kartyat hasznalsz.ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
-
bacus
őstag
Persze, hogy kérdezem mi a cél, addig ugyanis sötétben tapogatozunk!
Én azt gondoltam (eddig) hogy ez valami biztonság technikai cucc, oda pont az kell, hogy rontás után elölröl kezdje, amire te akarod használni, az meg a rontás kiküszöbölése.
(Azt irod pénz van..., szép dolog az erkölcsi gyözelem, de ha már homár... )
Kössünk egyezséget, megegyezős egyezséget... https://www.paypal.me/engiman/30
-
Pubszon
veterán
Szívesen.
Ne erőltesd a do...while-t, az itt nem célszerű, persze lehet azzal is meg lehetne oldani.Rendelhetnél nekem is egy NFC olvasót, hogy tudjak nektek segíteni.
Szinte mindenem van, csak az nincs, annyit meg nem ér nekem amennyibe kerül.ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
-
őstag
A második egy nagyon elegáns megoldás. Az egyetlen dolog, amire figyelned kell, hogy a for ciklus ne rohanjon kontrolálatlanul.
Az általad megírt verzióban ugyanis egy pillanat alatt végigfut, ennyi idő alatt nem végignyomni a szükséges gombokat.
Ha prellezésmentesek lesznek a gombok amiket használsz, akkor így menni fog:
#include <SoftwareSerial.h>
int ButtonPins[] = {0, 1};
int buttonState[] = {HIGH, HIGH};
//int index; ha globális a változód, a for ciklus csak egyszer fut, hacsak ki nem nullázod utána kézzel
int numberOfBUTTON = 2;
void setup() {
Serial.begin(9600);
/*for (int i = 0; i < numberOfBUTTON; i++) {
pinMode(ButtonPins, INPUT_PULLUP);
}*/
pinMode(ButtonPins[1], INPUT_PULLUP);
pinMode(ButtonPins[2], INPUT_PULLUP);
}
void loop() {
for (int index = 0; index < numberOfBUTTON; index++)
{
bool buttonPressed = false;
while(!buttonPressed)
{
for (int i=0; i<numberOfBUTTIN;i++)
{
if (!digitalRead(ButtonPins[i]) buttonPressed=true;
}
}
/*az fenti rész megoldja, hogy amíg te nem nyomtál semmilyen gombot, addig ne akarja ellenőrizni a lenyomott gombokat. Másképp akkor is ellenőrizne, ha nem nyomsz épp semmit.*/
buttonState[index] = digitalRead(ButtonPins[index]);
if (buttonState[index] == LOW) {
Serial.print((String)(ButtonPins[index]));
Serial.print(" elem");
while(!digitalRead(ButtonPins[index])){} //megakadályozza, hogy rögtön továbblépjen, mikor még a gombot nyomod
} else {
Serial.println("rossz sorrend");
break; //kiugraszt a for ciklusból, ha már egyszer elrontottad
}
}
delay(2000);
}Így hirtelen ezt tudtam, lehet még benne hiba, de erre indulj el.
Majd tájékoztass[ Szerkesztve ]
Mások számára a kondi fáradós, nekem farad-os...
-
Janos250
őstag
1. A mágneszárak tudtommal 15 V-al működnek, de ebben nem vagyok biztos, lehet valóban 12. Igen, szerintem is a relé a legjobb megoldás. Ha ESP, vagy ARM, akkor 3.3 V! Pl.:
[link]
[link]
2. Mivel én ESP mániás vagyok, először ahhoz írom az én elképzeléseimet.
a.) ESP, szerrvernek programozva az ajtóra, relével nyit. Indítás mobiltelefonról, WEB lapról. Előnye, nem kell semmi más, hátránya, hogy mire csatlakoztatod a WiFit a telefonodon, és behívod a lapot, hazamegy, aki be akart jönni.
b.) Szerver ugyanígy, de nem telefonról, hanem másik ESP-ről indítva, egy gomb megnyomásával. Előnye, hogy azonnal reagál, hátránya, hogy minden nyomógomb mellé kell egy ESP12E (célszerűen) darabonként 700 Ft, +doboz, + valami táp megoldás.
RFID:
Hova akarod az RFID érzékelőjét? Az ajtóra, vagy az asztalodra?
Szerintem egy lehetséges megoldás:
Ajtónál: ESP12E , kezeli az ajtónyitó relét, és az ajtónál kívül elhelyezett olvasót, hogy akinek van hozzá tag (70-80 Ft/db) az be tud jönni.
Astalodon:
a.) ESP+nyomógomb ugyanúgy.
b.) szintén ESP-olvasó, ami WiFin keresztül utasíítja az ajtónál lévőt nyitásra, ha odateszed a taget.
RFID megoldás:
Ehhez
[link]
vannak kész könyvtárak, nem panaszkodnak rá, elvileg egy bejáratott technika, nem próbáltam.
Másik:
[link]
ez kényelmesebb, ha működik, mert benne van egy proci, és folyamatosan küldi a közelébe helyezett tag kódját UART-on.
Nekem egy verzió egy darabig működött, aztán nem. Próbáltam másikkal, az meg egyáltalán nem működött. Tovább nem próbálkoztam, eltettem akkora, amikor majd jobban ráérek. Nem egy kiforrott típus, mert pl egy smd led közvetlenül 5V-ra van kötve, ami kiég.[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Zoja™
őstag
Ehhez nem szükséges arduino, vannak már olcsó bluetooth vezérelt relék, amihez jár telefonos applikáció is.
Szerintem teljesen mindegy, ha nem arduino-s megoldás, mert a fizikai kapcsolót az asztalodon így is, úgy is cserélni kell.
[ Szerkesztve ]
-
fpeter84
senior tag
Nem is igazán értem, hogy miért ilyen ESP-01 minimál modult kezdtél el átgányolni - megölhetted magával a forrasztással is, vagy amiket írtál extrém tápfeszek is megárthattak neki, ha esetleg méregettél rajta multiméter ellenállás/szakadásvizsgáló móddal, attól is megsérülhetett... Mindenképpen valamelyik nagyobb modullal állnék neki a helyedben mint az említett 07, 12, vagy akár ez...
2 AA elem alapból is alig bő 3V-ot ad, de ahogy merülnek hamar úgy leesik hogy biztosan az is stabilitási gondokat okoz! Olvass utána az elemek merülési karakterisztikájának, nagyon nem ideális ez így. Ellenben ha fogsz egy Li-Ion vagy Li-Po cellát és azt rákötöd a fenti D1-es 5V lábára, vagy a 07/12 előtt lévő low-drop LDO-ra, akkor azzal jól el kell lennie. A cellát pedig töltheted egy filléres TP4056 modullal (fontos, ha a cellában nincsen belső védelem akkor azt a modult keresd amin ott van mellette a DW01 chip is)
-
Janos250
őstag
Én az ESP12E-ket és a Wmos D1-eket használom, azokkal nem tapasztaltam ilyen gondot.
A 12E-vel akkor voltak gondjaim, amíg ezt
http://esp8266.github.io/Arduino/versions/2.3.0-rc2/doc/ESP_improved_stability.png
meg nem csináltam.
Ez mindenesetre érdekes: "wdt reset"Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Új hozzászólás Aktív témák
- Xbox Series X|S
- Anglia - élmények, tapasztalatok
- Konzolokról KULTURÁLT módon
- BestBuy ruhás topik
- Milyen billentyűzetet vegyek?
- 3D nyomtatás
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Microsoft Excel topic
- További aktív témák...
- 1151 V2 CPU-k / I5-8500 / I5-8400 / BESZÁMÍTOK!
- Intel i5-10400 hatmagos processzor + doboz + gyári új hűtő
- Nintendo Switch játékok (ง '-' )ง Budapest Nyugatinál
- Fekete Sony PlayStation 5 Cover (Lemezes változat)
- Samsung Galaxy S23 Ultra 5G 256GB Dual SIM Phantom Black Gyárilag független Csere/beszámítás is!