- sziku69: Fűzzük össze a szavakat :)
- sziku69: Szólánc.
- Luck Dragon: Asszociációs játék. :)
- Gurulunk, WAZE?!
- Magga: PLEX: multimédia az egész lakásban
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Argos: Szeretem az ecetfát
- No Voice in the Galaxy
- Parci: Milyen mosógépet vegyek?
-
LOGOUT
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
-
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" -
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)
-
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.
-
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. -
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 -
-
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...
)
-
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.
-
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
-
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
Új hozzászólás Aktív témák
Hirdetés
- NJOY Aster 3K 3000VA/2700W Rack Szünetmentes Táp
- BESZÁMÍTÁS! Microsoft XBOX Series S 512GB játékkonzol garanciával hibátlan működéssel
- Csere-Beszámítás! Olcsó Számítógép PC Játékra! R5 1500X / RX 570 8GB / 16GB DDR4 / 250SSD + 2TB HDD
- Telefon felvásárlás!! Samsung Galaxy Note 10+/Samsung Galaxy Note 20/Samsung Galaxy Note 20 Ultra
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest