-
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
-
távcsőves
senior tag
válasz távcsőves #7550 üzenetére
Szerk, láttom már, klón UNO írtad. Figyelj csak, ide látogass el, és kezd el olvasgatni a fórumot. Ugyan angol nyelvű, de rengeteg dolgot tanulhatsz meg itt a: Arduino Forum > Using Arduino > Programming Questions szekcióban.
-
Janos250
őstag
válasz távcsőves #7550 üzenetére
Szubjektív vélemény:
"1 hete használok STM32DUINO"
Jó is az! Előnye, hogy ARM. Annak ellenére, hogy az ESP32 dokumentációja is egyre bővül, az STM32-vel még nem veheti fel a versenyt részletesség és pricizitás terén. Az F103-at én is használtam, szerettem. Viszont mire az F4 boardjaim megérkeztek, addigra már az ESP32 támogatása is olyan szintre jutott, hogy az STM-ek a fiókba kerültek.
Az ESP32 előnye:
szintén sok memória, rengeteg periféria, 240 Mhz órajel kettő maggal, és mindkét mag jól használható. Ez némi párhuzamos programozási technikákat is lehetővé tesz. Az arduino környezetbe illesztése mostmár szinte tökéletes. A freeRTOS op. rendszer fut rajta, arra van ráillesztve az arduino héj, de elérhető az op. rendszer - majdnem minden - saját függvénye is. Nagy előnye a beépített WiFi és BT. Van benne olyan spéci lehetőség is, mint pl. az RMT. Az UNO-ra megírt programok gyakorlatilag változtatás nélkül futnak rajta. A GPIO lábak low/high állítására külön regiszterek is vannak, nem kell a lábak állapotát beolvasni, majd úgy módosítani közvetlen regiszter használat esetén se. Előny még az ára: 1600 Ft körül már kapható.
Hátránya:
Nem ARM. Ha az ember a C++ -nál lentebb akar menni, azaz a regisztereket közvetlenül akarja elérni, még akad dokumentációs hiányosság. Bármelyik periféria bármelyik lábhoz kapcsolható, ez gyakran előny, de néha bonyolítja a dolgunkat. A regiszterek kezelése jó, de mivel 32-nél több GPIO van, ezért a GPIO-hoz kapcsolódó regiszterek 2 x 32 controll regiszterhez tartoznak. Nem minden GPIO használható szabadon, de ezek nem a 32-n túliak. Egyik-másik funkció leírása még vagy nincs meg, vagy gyér.Összefoglalva:
Én az ESP32 mellett vagyok. Ha valaki csak C++ -szinten (tehát csak "arduino" módon) használja, akkor a felsorolt hátrányait nem érzi, előnyeit viszont igen.
A regiszterek közvetlen kezelése nem szükséges normál esetben, de nekem jó játék.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
távcsőves
senior tag
válasz Janos250 #7553 üzenetére
Köszönöm a részletes ajánlást, regisztereket nem szeretném "azonnal" piszkálni. (Maradnék "Arduino IDE módban") Nagyon csábít a beépített BT, csak pontosan melyik board is ajánlott akkor? Többfélét láttok, a "srác svájci akcentussal" youtube-n ezt a "sárga" board-ot használja. Véleményed szerint ez kezdésnek jó? Vagy van népszerűbb változat?
[ Szerkesztve ]
-
Janos250
őstag
válasz távcsőves #7554 üzenetére
Szerintem nincs ezek között lényegi különbség.
Én többnyire a doit ESP32 devkit v1 verzót használom.
Miért? Mert az volt szeptember elején leértékelve, így abból vettem párat.
linkAz amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
brickm
őstag
Sziasztok!
Sikerült végre feléleszteni az ESP-01-et arduino IDE alól is.
ott tartok a dologgal, hogy, itt a kódom, de ebbe hiába teszem be az if- else sorokat, a html lapon nem változik az input értéke. Annyit kifilóztam, hogy azért, mert a setupba került, és a loopban kéne tenni, de a loopba téve lesem generálja a html lapot, mivel az a setupban generálódik. Na itt akadtam el, hogy akkor hogyan tovább?
A kód aljára tettem az input kiolvasást, kommentbe#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
MDNSResponder mdns;
// Replace with your network credentials
const char* ssid = "TP-LINK_B791B8";
const char* password = "passw0rd_000";
ESP8266WebServer server(80);
String webPage = "";
int gpio0_pin = 0;
int gpio2_pin = 2;
int dsc_state = 0;
void setup(void){
webPage += "<h1>DSC PC 1616 WebPage</h1><p>GPIO_0 <a href=\"socket1On\"><button>Arming</button></a> <a href=\"socket1Off\"><button>Disarming</button></a></p>";
// webPage += "<p>GPIO_2 <a href=\"socket2On\"><button>ON</button></a> <a href=\"socket2Off\"><button>OFF</button></a></p>";
//
// preparing GPIOs
pinMode(gpio0_pin, OUTPUT);
digitalWrite(gpio0_pin, LOW);
pinMode(gpio2_pin, INPUT);
digitalWrite(gpio2_pin, LOW);
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (mdns.begin("esp8266", WiFi.localIP())) {
Serial.println("MDNS responder started");
}
server.on("/", [](){
server.send(200, "text/html", webPage);
});
server.on("/socket1On", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio0_pin, HIGH);
delay(1000);
});
server.on("/socket1Off", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio0_pin, LOW);
delay(1000);
});
server.on("/socket2On", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio2_pin, HIGH);
delay(1000);
});
server.on("/socket2Off", [](){
server.send(200, "text/html", webPage);
digitalWrite(gpio2_pin, LOW);
delay(1000);
});
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}
//Ez az input mező kiírásához:
//dsc_state = digitalRead(gpio2_pin);
//if (dsc_state == HIGH){
// webPage += "<h2>Input is HIGH</h2>";
//}
//else {
// webPage += "<h2>Input is LOW</h2>";
//}[ Szerkesztve ]
-
Tankblock
aktív tag
Hello,
Most inább mutatnék egy példát arra amikor megy ez WebSockettal is.
Ez nekem anni 1 ESP-01 futott és 1x 3 eszközről lehetett csatlakozni (ennyit próbáltam).
Az eventek láthatóak szinte azonnal a többin böngészőben is.
[link]Amúgy a példádban a
server.send(200, "text/html", webPage);
a wepPage helyett kellene valami másik string....[ Szerkesztve ]
Release the Beast....
-
tvamos
nagyúr
válasz Tankblock #7558 üzenetére
Sziasztok!
Tudom, hogy nem a Wemos gyíkja, hanem a Xiaominak a nyűgje de hátha ti tudtok megoldást erre a problémára: [link]
Nexus-szal, meg más telefonokkal jó.(#7558) Tankblock
Bocs, nem neked akart válasz lenni![ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Janos250
őstag
Én legolcsóbbnak ezt találtam:
link
Egy a lényeg: ESP-WROOM32 (tehát az a fém tokos hibrid valami) legyen rajta. Amire azt írják, hogy ESP32S, ma már az is ugyanaz. Nézd meg a kinagyított fényképét.
A neten ajánlják azt is, amin van oldalt egy fehér tápcsati, de itt korábban valaki azt írta, hogy a + és - fordítva van bekötve, tehát figyelni kell.Bizony a kínai vásárláshoz türelem kell
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
Hirtelenjében nem teljesen tekintem át, de:
1. A webPage stringet feltöltöd a setupban. Utána a loopban adogatsz hozzá még valamit. Akkor az folyamatosan hízni fog!
Én - ha hasonlóan akarnám csinálni - , akkor a server.send-ek előtt készíteném el az aktuális stringet.
Pl.:
webPage2 = webPage;
webPage2 += "<h2>Input is HIGH</h2>"; (itt persze if-el, de azt nem akartam leírni)
server.send(200, "text/html", webPage2);
2. Én a delay-t a loopba tenném.
3. Én a server.send-et a végére szoktam rakni (ahol most a delay van), de ez nem hinném, hogy számít valamit
4. Én szoktam a web lapnak fejét, törzsét csinálni, bár a mai böngészők nélküle is elfogadják.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
.DLL
veterán
Sziasztok!
Vaku vezérlő- és kioldó szettet szeretnék készíteni, és ehhez a Micro:Bit-re gondoltam, mivel:
- van beépített rádió
- nem ismerek egy program nyelvet sem, viszont a block szerkesztővel könnyen boldogulok, összedobtam már a vevő egység programjának prototípusát.Viszont nem hagyott nyugodni a gondolat, hogy elég gyors lesz-e, és utána olvasva azt találtam, hogy a polling rate 6ms... [Link]
"The scheduler uses a timer built into the micro:bit hardware to interrupt execution every 6 milliseconds and poll the inputs, which is more than fast enough to catch the quickest press of a button."Ez egy gyereknek lehet hogy elég gyors, de vaku szinkronizálásban borzasztó sok idő.
A példában szerepel a Forever loop, ami mindig csinál valamit, pl. frissíti a led-eket, és amíg anak egy ciklusa fut, addig csak Poll-ol, és ütemez későbbre.Namost az én programomban nincs forever loop, mert nem kell folyamatosan csinálnia semmit, csak külső vezérlésre, az lefut, utána úgy áll.
A kérdésem az lenne, hogy ha nem fut éppen semmilyen user által írt feladat, akkor is megmarad a 6ms polling rate, vagy akkor folyamatosan polling-ol?Ha az előbbi, akkor lehet-e ezen változtatni vagy "interrupt" módot beállítani valahogy az Editor-ban, hogy ha valami megszakítást kér (pl. rádió parancs érkezik) azt azzonnal lefuttassa?
Előre is köszi a segítséget.
[ Szerkesztve ]
(P.H.)
-
Teasüti
nagyúr
Láttam már ezt boltban, de nem olvastam utána mi is ez a Micro:bit egész pontosan. Ez az Arduino gyerek kiadásban és a "programozás" szép színes blokkdiagrammal készül?
Szerk: nem egészen, az a képernyőmentés engem az Android App Inventor-ra emlékeztet, bár azt se láttam még testközelből.[ Szerkesztve ]
-
Tomi8822
tag
üdv, segítenétek kijavítani a kódom, nem kapcsol rendesen, de nem találom a hibát.
beszúrom ide,ha tudnátok a hibát kijavítva beszúrnátok ti is, köszönom#include <Wire.h>
#include <RTClib.h>
#include <Time.h>
#include <TimeAlarms.h>
RTC_DS1307 RTC;
// Start Time Light 1
int sHour = 06;
int sMinute = 40;
int sSecond = 0;
// Start Time Light 2
int s2Hour = 07;
int s2Minute = 00;
int s2Second = 00;
// Start Time Light 3
int s3Hour = 07;
int s3Minute = 20;
int s3Second = 00;
// Start Time Light 4
int s4Hour = 07;
int s4Minute = 40;
int s4Second = 00;
// Start Time Light 5
int s5Hour = 07;
int s5Minute = 00;
int s5Second = 00;
// Start Time Light 6
int s6Hour = 07;
int s6Minute = 20;
int s6Second = 24;
// End Time Light 1
int eHour = 17;
int eMinute = 40;
int eSecond = 00;
// End Time Light 2
int e2Hour = 18;
int e2Minute = 00;
int e2Second = 00;
// End Time Light 3
int e3Hour = 18;
int e3Minute = 20;
int e3Second = 00;
// End Time Light 4
int e4Hour = 18;
int e4Minute = 40;
int e4Second = 00;
// End Time Light 5
int e5Hour = 19;
int e5Minute = 00;
int e5Second = 00;
// End Time Light 6
int e6Hour = 19;
int e6Minute = 20;
int e6Second = 00;
int lightRelay1 = 9;
int lightRelay2 = 2;
int lightRelay3 = 3;
int lightRelay4 = 4;
int lightRelay5 = 5;
int lightRelay6 = 6;
void setup() {
// Set the relay to off immediately
digitalWrite(lightRelay1, HIGH);
digitalWrite(lightRelay2, HIGH);
digitalWrite(lightRelay3, HIGH);
digitalWrite(lightRelay4, HIGH);
digitalWrite(lightRelay5, HIGH);
digitalWrite(lightRelay6, HIGH);
Serial.begin(9600);
Wire.begin();
RTC.begin();
// Set the pinmode
pinMode(lightRelay1, OUTPUT);
pinMode(lightRelay2, OUTPUT);
pinMode(lightRelay3, OUTPUT);
pinMode(lightRelay4, OUTPUT);
pinMode(lightRelay5, OUTPUT);
pinMode(lightRelay6, OUTPUT);
// Notify if the RTC isn't running
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running");
}
// Get time from RTC
DateTime current = RTC.now();
DateTime compiled = DateTime(__DATE__, __TIME__);
if (current.unixtime() < compiled.unixtime()) {
Serial.println("RTC is older than compile time! Updating");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Use RTC time to set the start time1
setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year());
time_t s = now();
// Use RTC time to set the start time2
setTime(s2Hour, s2Minute, s2Second, current.day(), current.month(), current.year());
time_t s2 = now();
// Use RTC time to set the start time3
setTime(s3Hour, s3Minute, s3Second, current.day(), current.month(), current.year());
time_t s3 = now();
// Use RTC time to set the start time4
setTime(s4Hour, s4Minute, s4Second, current.day(), current.month(), current.year());
time_t s4 = now();
// Use RTC time to set the start time5
setTime(s5Hour, s5Minute, s5Second, current.day(), current.month(), current.year());
time_t s5 = now();
// Use RTC time to set the start time6
setTime(s6Hour, s6Minute, s6Second, current.day(), current.month(), current.year());
time_t s6 = now();
// Use RTC time to set the end time1
setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year());
time_t e = now();
// Use RTC time to set the end time2
setTime(e2Hour, e2Minute, e2Second, current.day(), current.month(), current.year());
time_t e2 = now();
// Use RTC time to set the end time3
setTime(e3Hour, e3Minute, e3Second, current.day(), current.month(), current.year());
time_t e3 = now();
// Use RTC time to set the end time4
setTime(e4Hour, e4Minute, e4Second, current.day(), current.month(), current.year());
time_t e4 = now();
// Use RTC time to set the end time5
setTime(e5Hour, e5Minute, e5Second, current.day(), current.month(), current.year());
time_t e5 = now();
// Use RTC time to set the end time6
setTime(e6Hour, e6Minute, e6Second, current.day(), current.month(), current.year());
time_t e6 = now();
// Use RTC time to set the current time
setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year());
time_t n = now();
// Test if grow light should be on
if (s <= n && n <= e) {
digitalWrite(lightRelay1, LOW); // Sets the grow light "on"
}
if (s2 <= n && n <= e2) {
digitalWrite(lightRelay2, LOW); // Sets the grow light "on"
}
if (s3 <= n && n <= e3) {
digitalWrite(lightRelay3, LOW); // Sets the grow light "on"
}
if (s4 <= n && n <= e4) {
digitalWrite(lightRelay4, LOW); // Sets the grow light "on"
}
if (s5 <= n && n <= e5) {
digitalWrite(lightRelay5, LOW); // Sets the grow light "on"
}
if (s6 <= n && n <= e6) {
digitalWrite(lightRelay6, LOW); // Sets the grow light "on"
}
Alarm.alarmRepeat(sHour, sMinute, sSecond, Light1On);
Alarm.alarmRepeat(eHour, eMinute, eSecond, Light1Off);
Alarm.alarmRepeat(s2Hour, s2Minute, s2Second, Light2On);
Alarm.alarmRepeat(e2Hour, e2Minute, e2Second, Light2Off);
Alarm.alarmRepeat(s3Hour, s3Minute, s3Second, Light3On);
Alarm.alarmRepeat(e3Hour, e3Minute, e3Second, Light3Off);
Alarm.alarmRepeat(s4Hour, s4Minute, s4Second, Light4On);
Alarm.alarmRepeat(e4Hour, e4Minute, e4Second, Light4Off);
Alarm.alarmRepeat(s5Hour, s5Minute, s5Second, Light5On);
Alarm.alarmRepeat(e5Hour, e5Minute, e5Second, Light5Off);
Alarm.alarmRepeat(s6Hour, s6Minute, s6Second, Light6On);
Alarm.alarmRepeat(e6Hour, e6Minute, e6Second, Light6Off);
}
void loop() {
DateTime now = RTC.now();
setTime(now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());
Serial.print("Current time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println();
Alarm.delay(600000);
}
void Light1On() {
Serial.println("Turning Light 1 On");
digitalWrite(lightRelay1, LOW);
}
void Light1Off() {
Serial.println("Turning Light 1 Off");
digitalWrite(lightRelay1, HIGH);
}
void Light2On() {
Serial.println("Turning Light 2 On");
digitalWrite(lightRelay2, LOW);
}
void Light2Off() {
Serial.println("Turning Light 2 Off");
digitalWrite(lightRelay2, HIGH);
}
void Light3On() {
Serial.println("Turning Light 3 On");
digitalWrite(lightRelay3, LOW);
}
void Light3Off() {
Serial.println("Turning Light 3 Off");
digitalWrite(lightRelay3, HIGH);
}
void Light4On() {
Serial.println("Turning Light 4 On");
digitalWrite(lightRelay4, LOW);
}
void Light4Off() {
Serial.println("Turning Light 4 Off");
digitalWrite(lightRelay4, HIGH);
}
void Light5On() {
Serial.println("Turning Light 5 On");
digitalWrite(lightRelay5, LOW);
}
void Light5Off() {
Serial.println("Turning Light 5 Off");
digitalWrite(lightRelay5, HIGH);
}
void Light6On() {
Serial.println("Turning Light 6 On");
digitalWrite(lightRelay6, LOW);
}
void Light6Off() {
Serial.println("Turning Light 6 Off");
digitalWrite(lightRelay6, HIGH);
} -
.DLL
veterán
"nemcsak lassú, de igen drága is" Hallgatok rád...
Szóval az applikáció: 5db LED-es stúdió lámpa fej (DIY) vezérlése egy kézből, egy központi egységről.
Az alábbi, nagyon idealizált illusztrációt dobtam össze, netes képekből:
Két módot kell tudniuk:
1. folyamatos fény, 0-100% (videós projektekhez)2.) Vaku mód: a beállított erősséggel villan exponáláskor, különben pedig csak az ún. "beállítófénnyel" világít, ami jóval kisebb intenzitású, nem égeti ki a modell szemét, kevesebbet fogyaszt, kíméli a LED-et, stb. A beállítófény a villanási erősséghez kötött, beállított %-kal (pl annak 40%-a) Ezen kívül terveztem egy "duration" azaz villanási idő paramétert is egyes témák "megfagyasztásához" akár 1/1000s, 1/2000s rövidségű villanás is kellhet.
Ezt a MicroBit-en egy küldött stringgel akartam megoldani, ami tartalmazta a lámpafej azonosítóját, a villanás, az állandó fény értékét (0-1023) és egy "duration" értéket, ezekből az azonosítónak megfelelő lámpa kihalássza az értékeket és beállítja az adott változókba, kb. ennyi. Ezen kívül ha a packet nem stringet, hanem egy számot tartalmaz (1) akkor azonnal a Flash azaz villanás érték kerül a kimenetre. Bocsánat, hogy itt végig a fenti screenshotra hivatkozom, azáltal talán jobban megérthető amit itt leírni próbálok. A villanás triggerelését a fényképezőgép küldi ki a vaku csatlakotón.
Lehet hogy ennek a triggerelését nem is a mikrokontrolleren keresztül kéne megoldani, hanem egy jóval egyszerűbb csatornán külön? A uC meg csupán a beállításokért felelne?
[ Szerkesztve ]
(P.H.)
-
gyapo11
őstag
Minden vakuba kell egy arduino rádióval, meg a központi beállító egységbe is, meg a fényképezőgép vakucsatlakozójára egy rádió, aminek a másik fele a központra? Vagy a fényképezőgép vezetékkel csatlakozik a központra?
Ki kellene számolni vagy lemérni, hogy az arduino mennyi idő alatt hajtja végre a rádióról beolvasást, a kapott string vizsgálatát, hogy mit tartalmaz, csak beállítást vagy villantást, és hogy ez az egész belefér-e az 5 ms-ba, amit egy 1/200 s-os exponálás jelent.
Ha csak a felét viszi el az 5 ms-nak, akkor a ledeknek már csak 2.5 ms marad a világításra, nem tudom ez elég-e, a stúdióvakuk 300-500 Ws-osak, egy 100 W-os lednek 3-5 s kell ehhez. Ha meg növeled az expo időt és a ledek világítási idejét, akkor bemozdulhat a modell.
Lehetne azt, hogy a villantást nem az arduino kezeli a vakukban, hanem egy másik rádió, ami azonnal villant, ha a fényképezőgép vakucsatlakozójából jön a rádió jel. Az arduino meg csak a beállításokat végezné, ott nem kritikus az idő.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
-
távcsőves
senior tag
válasz Tomi8822 #7567 üzenetére
Remélem ez már elég segítség lesz. (nagyon belezavarodtál) Ha nem világos valami, kérdezz, de igyekeztem rendesen elmagyarázni a vázlatban.
// Megadod a szükséges könyvtárokat
#include <RTClib.h> //Ez kell az óramodul hardwerének kezeléséhez
#include <Wire.h> //Ez a könyvtár kezeli az I2C buszt, amihez az óramodulod kapcsolodik, A4 (SDA) és A5 (SCL) pin az Uno-n.
RTC_DS1307 RTC;
void setup() {
// Inditod az I2C buszt
Wire.begin();
// (3-as számú digitális pint kimenetre állítod) ezt majd töbszörözöd, ahány reléd van
// és amelyik pinhez kapcsoltad értelemszerűen változtattod a számát
pinMode(3, OUTPUT);
}
void loop() {
// minden ciklus elején kéred az óramodultól az aktuális időt/dátumot
DateTime now = RTC.now();
/*Szerintem érdemes lenne az időt egy egységben kezelned.
Tehát nem 6óra és 40percben, hanem percben. Ekkor a kapcsolási időket percben adod meg.
Példa: 6óra = 6*60perc ami, 360 perc, ehhez adod a plusz 40 perced. Az eremény
pedig 400 perc, ami egyenlő 6óra és 40 percel. A vázlatod alapján ez az első relé bekapcsolási ideje.
A vázlatodban az első relé kikapcsolási ideje pedig 17óra 40 perc (=1060 perc) ami felírható így is: 1060perc=(17*60)+40
A másodperceket szerintem teljesen elfelejthetted, nem hiszem, hogy egy akvárium lakói a másodpercekre
érzékenyek lennének. Meg az évre, meg a hónapra, meg a.... Természetesen fellehet írni órában is az időt, ekkor tört számot kapsz.
A lényeg, hogy egy egységben kezeld. Almát almával, körtét körtével hasonlíts össze. */
// Elkészíted a perc változót és a tartalma az aktuális óra és perc, percek számában.
int perc = (now.hour() * 60) + now.minute();
/* használod az if else statement a be és kikapcsolási idők ellenőrzésére egy egyszerű érték összehasonlításal.
tehát, ha az aktuális percek száma nagyobb, mint 400 de kisebb, mint 1060, a relé bekapcsolva, minden más esetben kikapcsolva.
if ((perc > 400) && (perc < 1060)) {
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}
*/
// Emberi szemnek értelmesebb formábban pedig így néz ki az if else, ez alapján remélem érthető a müködése egy relére
if ((perc > (6 * 60) + 40) && (perc < (17 * 60) + 40)) {
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}
} // És amig neked írtam, addig lekapott a pörkölt, ajánlom, hogy megépítsd az akvárium vezérlőd!! ;) -
távcsőves
senior tag
válasz Teasüti #7570 üzenetére
Az átvivő közeg gyorsasága inkább számít szerintem. Ezt talán wifi kapcsolaton oldanám meg. Amíg a vezérlés paramétereit és a modell fényt használja, nem kritikus az idő. Expo esetén viszont nagyon az, de ha előre megkapta a vakuvezérlő a villanás paramétereit, akkor szerintem belefér egy vezérlőbájt vétele/feldolgozása/pin állapot változása néhány mikró másodpercbe. Azt viszont nem tudom, hogy működik a váz fénymérése, mennyi időt hagy a között, hogy elküldi a vakunak az értékeket és expot végrehajtja.
-
.DLL
veterán
válasz gyapo11 #7569 üzenetére
"a stúdióvakuk 300-500 Ws-osak, egy 100 W-os lednek 3-5 s kell ehhez. Ha meg növeled az expo időt és a ledek világítási idejét, akkor bemozdulhat a modell."
Ez mondjuk teljesen jogos, ráadásul a 100W csak a felvett teljesítmény.... Ez esetben mondjuk egy 1/1000 rövidségű villanásnak kb. semmi értelme, így a villanási idő paraméter -> kuka.
Lehet hogy meg kéne fordulni a lovon, és azt mondani, hogy ne a fényképezőgép süsse el a rendszert, hanem fordítva: a vezérlő felnyomja a LED-eket, mondjuk 1 másodpercre, közben elsüti a fényképezőgépet (van erre is csatlakozó) ez bőven belefér 1s-be, majd visszaáll modellfényre?
Köszönöm mindenkinek az eddigi válaszokat!
[ Szerkesztve ]
(P.H.)
-
gyapo11
őstag
válasz Teasüti #7570 üzenetére
Erősebb hw nyilván jobb. De lehet az arduino is elég, nem tudom, talán írni kellene egy kis programocskát, és mérni az egyes stringek beolvasásának idejét, de nincs rádiós modulom. Azt sem tudom, hogy az egyes rádiós modulokon mennyi idő alatt megy át a string. A rádióhullámok fénysebességgel mennek, ezzel nincs gond, és talán elég primitív az elektronikájuk ahhoz, hogy gyors legyen.
Az arduinonak polloznia kell, legalábbis én ilyen megoldásról tudok, ez a ledvillogtatásnál még 0.007 ms ciklusidővel ment neki, de ki tudja milyen kód van a rádiós modulról olvasásnál és írásnál. Meg kell mérni.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
válasz távcsőves #7572 üzenetére
Azt viszont nem tudom, hogy működik a váz fénymérése, mennyi időt hagy a között, hogy elküldi a vakunak az értékeket és expot végrehajtja.
Nem láttam igényként a vázzal történő kommunikációt, az azért eléggé megbonyolítaná a dolgot. Mondjuk egy TTF exponálás.
Szerintem itt a vakucsatlakozó központi érintkezője játszana, ami az első redőny felérkezésekor, vagy a második redőny indulásakor ad jelet.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
1/1000 rövidségű villanásnak kb. semmi értelme
Elég közelről elég erős ledekkel és magas ISO értéket beállítva lehet használni, pl. élő bogarat fotózni bemozdulás nélkül, de modell távolságból elég sok led kellene.
Ez a fordítva vezérlés jó ötlet, bekapcsolni a ledeket az előre beállított fényerővel, és utána exponálni. De meg kellene mérni a fényt ha már megvannak a ledes vakuk, ha nincsenek, akkor a gyári adatokból kiindulva lehet kb. luxot saccolni, és abból már megvan, hogy mekkora expo kellene. Ha túl hosszú, akkor több led kell.
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
válasz Teasüti #7574 üzenetére
Ki van találva. Kb. úgy néz ki, hogy a gép exponál, indítja a vakut, méri a fényt (integrálja), és amikor elég, akkor szól a vakunak, hogy fejezze be a villanást. Kb. ezt csinálja az ún. tirisztoros automata vaku is, csak nem az objektíven át méri a fényt, hanem a vakun levő szenzorral. Objektíven át mérni persze sokkal jobb, szűrőt beleméri, az objektívre beállított blendét is.
Az eggyel gyengébb rendszer meg elővillant egy gyengébbet, ezzel megméri a szükséges fényt, ezt beállítja a vakun és pár ms késéssel exponál. Mivel a villanócsöves vaku 1-2 ms alatt elvillan, a gépek meg 5 ms körüli időt tudnak exponálni teljesen nyitott zárlemezekkel, a vaku mindig gyorsabb mint a gép, tehát nem az expozíció hossza számít, hanem hogy a vaku mennyi fényt nyom ki.
A ledes témánál más a helyzet, az folyamatos fény, gyengébb, ezért akkor jó, ha a téma mozdulatlan, és akkor meg nem a led világítási idejével szabályoznak, hanem a záridővel. Jellemzően makróra jó, virág, étel stb.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
Közben eszembe jutott, hogy ha stúdióban lesz a fotózás, akkor szóba jöhet az infra, ha ez egy sima dióda, akkor rá lehet kötni az arduino egyik bemenetére, és IT-t rendelni hozzá, tuti gyors. De játszottam TSOP4838 infravevővel, szuper jó érzékeny és zavarmentes volt szobában bármerre irányítottam a távirányítót. Ennek az olvasása is már lassabb biztosan, viszont ez kódot is tud átvinni mint a rádió, megint kérdés az idő.
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
-
brickm
őstag
Sziasztok!
Arduinon hogyan programoznátok fel azt, hogy egy összetett HEXA értékre kapcosljon a kimenet. Elértem azt, hogy ha HEXA A(41) érkezik Serial1-re, akkor a DIO13 lekapcsol, másra nem, csak erre, majd minden másra vissza. De az összetett értékre sajna nincs ötletem az && && elésen kívül. -
brickm
őstag
válasz Gergosz2 #7583 üzenetére
Szia,
Az ASCII "A" HEXában 41. Azt akartam elérni, hogy a sorosport1-en kap egy ASCII A betűt, vagy hexa 41-et akkor kapcsoljon. Ez sikerült is, most azt szeretném, hogy pl a HEXadecimális 'B7' -re is kapcsljon. A konkrét gondot az okozza, hogy a B7-et megérttessem vele. Akkor sikerült csak ha átformálom DECimális értékké, és azt veszem fel változóba és azzalé hasonlítok össze.
Bemásolom a kódrészletem egyszerűsítve, hogy lásd miről írok:int incomingByte = 0x00;
char A;
char B;
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
pinMode(2, INPUT);
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
}
void loop() {
if (Serial1.available() > 0) {
incomingByte = Serial1.read();
Serial.print("I received: ");
Serial.println(incomingByte, HEX);
if ((incomingByte) == 'B'){ // Itt szeretné,, ha pl B7, vagy F1 -re is tudnék kapcsolni. Vagy akár még nagyobb HEXA értékre.
digitalWrite(13, LOW);
}
else{
digitalWrite(13, HIGH);
}
}
} -
vargalex
félisten
Miért String-ként hasonlítod? Szerintem így kellene:
if (incomingByte == 0xB7) {
Legalábbis, ha jól értem a problémádat. A serial.read byte-ot ad vissza, FF-ig jó vagy. Vagy 2 byte-on jön a B és a 7? Ha több byte-ban érkezik, akkor ciklusban kell byte-onként beolvasni és összerakni.
[ Szerkesztve ]
Alex
-
távcsőves
senior tag
Őőő, pont ilyen sorosporti kommunikációs protokollon dolgozom, (Celestron nexstar protokoll távcsőveknél), remélem ezzel a csípettel tudtam segíteni. Így meg már azért könnyű összehasonlítani a kapott értéket.
char Str2[] = "12AB0500"; //313197824 a szám hexadecimális formában példaként, UART kiolvasást majd hozzá csapod
long a;
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
}
void loop() {
// put your main code here, to run repeatedly:
a = strtol(Str2, NULL, 16 );
Serial.println(a);
delay(5000);
}Nyilván ugyanez visszafelé is megy. De én is megszenvedtem vele.
[ Szerkesztve ]
-
Imy
veterán
Sziasztok! Eddig TFT-vel nem foglalkoztam. A [linken] található 2.4"-os érintésérzékeny TFT mennyire ajánlott?
Valaki már használt ilyet? Esetleg nincs valahol egy teszt illetve egy mintaprogram? -
Gergosz2
veterán
Nekem van ilyenem és nem tudtam rendesen működésre bírni. Vagy csak a kijelző része ment, vagy csak az érintő. Azóta csak kijelzőként használom.
Helyette inkább ezt vedd: [link]
Ez nálam jól bevált, több projektben is ilyet használtam. UTFT és UTOUCH library-t ajánlom hozzá, azzal baromi gyorsan és egyszerűen tudod használni őket.
Elöljáróban annyit, hogy egyik sem fog olyan minőséget hozni, mint egy telefon. Nyílván, hiszen töredék az áruk. De ettől függetlenül jól használhatóak.
Kicsit drágábban meg itt vannak HMI-k, azok sem rosszak.
[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
Gergosz2
veterán
válasz távcsőves #7589 üzenetére
jaja, már emlékszem. Kb három éve vettem az enyémet, akkor is Adafruitost ajánlották hozzá, de senkinek sem ment.
(#7587) Imy
Még annyi, hogy nem árt ha legalább Mega-val állsz neki. Egy egyszerű projekthez, ahol pl csak kiírod mi van egy UNO is elég lehet, de egy több menüs, érintő funkciót használó projektben igen hamar elfogyhat a flash.
[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
.DLL
veterán
válasz gyapo11 #7581 üzenetére
Köszönöm a tippeket! Az infrás kioldás is jó ötlet! Most már mindenképp különválasztva fog történni a kioldás és a beállítások átvitele, így tényleg nem kritikus a mikrovezérlő sebessége, sőt ez szerintem a megbízhatóságra is dob.
Akkor elkezdek ismerkedni az arduino-val is.
(P.H.)
-
brickm
őstag
válasz távcsőves #7586 üzenetére
Értem a kódod, de ezzel összehaonlítás szempontjából ugyan az a bajom,ami az enyémmel is, hogy a serial terminálba bevitt értéket mikor A-ba írod azt 2karakterre írja be, így a "313197824" így néz ki a-ba írva:
"51
49
51
49
57
55
56
50
52"Itt a kódom, lehet én csinálom rosszul, de nem értem....
//#define debug
char Str2[] = "12AB0500"; //313197824
long a;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
Serial.println(strtol(Str2, NULL, 16 ));
}
void loop() {
if (Serial.available() > 0) {
delay(50);
getserial();
}
else {
delay(50);
loop();
}
}
void getserial () {
a = Serial.read();
Serial.println(a);
if (a == strtol(Str2, NULL, 16 )) {
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
loop();
}
delay(1000);
}[ Szerkesztve ]
-
itg
tag
Sziasztok!
Néhány napja szereztem tudomást ezekről az eszközökről, most éppen a beszerzések fázisánál járok.
Elsőként egy wemos mini d1-hez csatlakoztattam egy dht22-es szenzort, aztán ma megérkezett a második kütyü is. Annyi mindössze a különbség, hogy ez utóbbi nem wemos gyártmány.Felraktam erre is teljesen ugyanazt a kódot és az alábbiakkal kellett szembesülnöm:
(a kód: csatlakozik a wifi hálózathoz és webszerveren elérhetővé teszi a hőmérsékletet és páratartalmat)a nem wemos lapka böngészőből el sem érhető, a pingek pedig a képen látszódnak.
a két eszköz egymástól néhány méterre volt a teszt idején, de próbáltam áthelyezve is.létezik ilyen, vagy csak kifogtam egy gyengébb darabot?
köszi előre is a segítséget. -
Gergosz2
veterán
Szerintem sokan, köztük én is, azért nem válaszolt még neked teljesen mert mintha te sem tudnád pontosan mit akarsz.
Nekem kérdés lenne még, hogy milyen hosszú üzeneteket akarsz küldeni.
De leggyorsabban String-gel tudod kezelni az egészet
String myString="";
void setup() {
Serial.begin(9600);
}
void loop() {
while(Serial.available() > 0) {
myString=myString+Serial.read();
}
Serial.println(myString);
myString="";
}[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
Új hozzászólás Aktív témák
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest