- Milyen joysticket vegyek?
- HiFi műszaki szemmel - sztereó hangrendszerek
- Így nézz tévét 2025-ben: új ajánlások, régi szabályok
- NTFS, exFAT, FAT32 – Melyiket válaszd és miért?
- Hobby elektronika
- Vezetékes FÜLhallgatók
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen processzort vegyek?
- Azonnali VGA-s kérdések órája
- Milyen egeret válasszak?
-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
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="";
} -
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. -
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);
} -
.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.
-
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.
-
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.
-
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? -
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.
-
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.
-
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);
}
}
} -
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. -
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ő.
-
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. -
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.
-
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. -
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. -
.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!
-
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.
-
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
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!! ;) -
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ő. -
.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?
-
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
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);
} -
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. -
.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.
-
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. -
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
-
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.... -
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
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>";
//} -
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?
-
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. -
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.
-
távcsőves
senior tag
válasz
Tomi8822 #7539 üzenetére
Nem fordul le IDE-ben vagy mi a baj vele? Valamit azért írhatnál. Most ezt a sok linkelt könyvtárat nem töltöm le, ha nincs meg nekem, milyen lap amit használsz, kicsit bővebben kellene szerintem.
(Én sem vagyok profi, sőt azért keveredtem ide, mert programozás technikai kérdésem lenne. (Saját kódom működik, de valószínű van elegánsabb/hatékonyabb módja is egy bizonyos funkciónak. Csak az én dinnye fejem nem érti a megoldást.) Épp visszaolvasgattok, hátha más is feltette már a kérdést. Meg mindjárt nézem azt is, Wemos D1 mini vagy ESP8266 esetleg ESP32 legyen amit megrendelek.
Nem tudom ugyanis elsőre mi az ajánlott. Eddig csak AVR boardjaim voltak, 1 hete használok STM32DUINO-t, és hát a kakaó , ami benne van, megtetszett nagyon. )
-
Teasüti
nagyúr
válasz
Janos250 #7547 üzenetére
Felcímkézik a csomagolást. Kibontás után meg beépítésre kerül. A maradékot meg visszateszem a csomagolásba.
Amúgy nem rendelek olyan sokat, hogy ne tudjam követni mi micsoda.
Van, hogy az Aliexpress rendeléseim között keresgélek leírások után hónapokkal később is.Egyébként nem is nagyon érdekelt még a kérdés. Eddig azt hittem mindegyik ugyanolyan protokollt használ, azt hittem csak a szín sorrendben van különbség (GRB vs RGB, WRGB, stb.).
Belenéztem a könyvtárba és valóban van némi differencia mondjuk egy ws2812 és sk6812 között, de nem egyeztettem a doksikat így lehet csak a könyvtár alkotója okoskodott (ws2812 el is van szúrva nálam, ahogy nézem). Most ha nem megy elsőre, akkor majd megy másodikra... -
Janos250
őstag
válasz
Victoryus #7545 üzenetére
Amit leírtál, az tanulságos lehet mindenki számára, aki új lapra tér át. Ne vegye komolyan, ami a lapra van írva. Igaz, meg lehet nézni a hozzá tartozó fájlban, hogy melyik lábat minek nevezi, ha biztosan tudjuk, hogy azzal a lappal van dolgunk. Én nem is szoktam használni a lábak neveit, tehát én ilyet többnyire nem használok, pl. hogy pinmode(D2, hanem pinmode(2, .
Ha ezt átviszem egy másik lapra, ott is megkeresem, hogy melyik a GPIO2, és nincs gond.
Gyakori, hogy új lapnál leellenőrzöm leddel, hogy ténylegesen az a láb-e az adott sorszámú. -
Janos250
őstag
válasz
Teasüti #7546 üzenetére
"Ezt olvastad?" Mostmár igen
Kösz.
Egyébként a helyzet az, hogy mivel itt vannak már az olcsó, gyors, viszonylag sok memóriával rendelkező kontrollerek, én egyszerűen nem akarok már AVR-el foglalkozni. Annak idején számos rutint sok munkával megcsináltam Z80-ra, és elöntött a hú milyen jó érzése. Viszont pár év múlva jöttek a jobb procik, és a sok munka egyszerűen hamuvá vált. Ennek tapasztalatai alapján nem nagyon akarom már nyakatekert megoldásokkal kissé feljebb tornászni a proci teljesítményét, inkább használok jobbat. Most pl. ESP32-t, mint rajtam kívül még sokan mások.A leírt időzítéses dolgok viszont tanulságosak, érdemes elolvasni!
Azt, hogy az 1 bitet meddig szabad magasan tartani, ki fogom próbálni, mert ez érdekes. Mivel nekem semmi konkrét célom nincs ezekkel a ledekkel, csak játszom velük, így azokat a dolgokat próbálom ki, ami számomra érdekes, szórakoztató.
Más:
Mondjátok, Ti honnan a csudából tudjátok egy kínai led szalagról, hogy az most éppen melyik típus? Ráírva semmi info nincs erről, a kis kínai meg felsorolja majdnem az összes típust, hogy keresésnél minél többen megtalálják.
Én egyszerűen játszottam az időzítésekkel, hogy mi válik be legjobban, de fogalmam sincs, hogy éppen melyik típus van a kezemben. -
Teasüti
nagyúr
válasz
Janos250 #7528 üzenetére
Ezt olvastad egyébként?
Meg ezt.
Ez utóbbi tárgyalja a láncba fűzött ledek közti kommunikációt.
Még egy bejegyzés.
Hmm, ha pixelenként változik a T0H és T1H hossza, és a TxL hossza meg az a szünet lesz, ami két TxH között van, akkor tényleg nem nehéz elképzelni hibázó pixeleket, amik némi módosítással beleesnek a specifikációba, ha az előttük lévő pixelnek más az ideális jelhossza. -
válasz
Victoryus #7544 üzenetére
Elnézést, hogy megint dupla, nyugodtan lehet törölni az előzőt! Jobban megnézve a wemos ábráját, leesett, hogy a 15-ös pin a tx láb. Ezért nem engedte feltölteni a programot. Most már jó! Elég fura a lábkiosztása szerintem, nagyon oda kell figyelni, a sima uno az nem ilyen volt, azt 'szoktam meg'. No majd valamikor folytatom tovább az ismerkedést vele, következő lépés wifin történő hőmérséklet lekérdezés. Azzal is szivatott fél órát, hogy d1-d8 stb van a lapra írva, pedig nagyon nem annyi az, ki kell keresni a gpio számát helyette.
-
Kérdezek mást. Az alaplapot úgy látom felismerte, ha meg eltűnik akkor újra be kell írni a http://arduino.esp8266.com/stable/package_esp8266com_index.json címet a beállításoknál, erre jutottam.
Adott a wemos d1 r2, és szeretném vele használni a dht-11 hő és páratartalom mérőt. Ennek a példaprogramját használom, de a wemosra nem lehet feltölteni, mert hibát ír:
warning: espcomm_sync failed
error: espcomm_open failed
error: espcomm_upload_mem failed
error: espcomm_upload_mem failed
A teszt előtte hiba nélkül lefut. Ugyanez a program működik sima uno-val és az esp32-vel is! Arra gondolok, hogy ezzel a szerencsétlen wemos-szal nem tud valamiért kommunukálni a cucc. 15-ös pint használnám. -
válasz
Victoryus #7540 üzenetére
Nos, csak nem boldogulok. Letöltöttem az előző hsz-ban említett drivert az alaplap kezelővel. Ott is volt, hogy esp8266, fel is tettem a led villogtató programot. Nem villog, ha konkrét pint adtok meg, akkor se. De utána eltünt maga az eszköz a választhatóak közül, és az alaplap kezelőben sincs ott. Ezt megelőzően annyit írt az arduino, hogy frissítéseket talált. Most ilyenkor mi van?
Windows eszközkezelő látja (usb serial ch340 com3) -
Megint kérnék egy kis segítséget. Megjött a wemos d1 r2. (RobotDyn wifi d1 r2 esp8266 dev board 32m) Erre szeretném a led villogtató programot feltenni, de nem sikerül. Azt írja az arduino, hogy "A fatal error occurred: Timed out waiting for packet header" Esp32 dev modulnak tettem be. Vagy ez nem az? Én azt rendeltem.
Találtam megoldást, esp8266 leírás -
Tomi8822
tag
Üdv, van egy ilyen kódom amit nem tudok működésre bírni, valaki tudja mi a probléma?
RTC_DS3231 rtc;
const int LED_PIN = 6;
const int FILTER_PIN = 7;
// A világítás bekapcsoló gombja, egy óra után kikapcsolja magát
AutoSwitch LedButton(2, 3600);
// A szűrő stop etetéshez, ami 5 perc után újraindítja a szűrőt
AutoSwitch FilterStopButton(3, 300);
AquaTimer LedTimer;
AquaTimer Micro(8, "13:40:00", "13:40:04");
AquaTimer Macro(9, "13:40:20", "13:40:24");
AquaTimer Carbo(10, "13:40:40", "13:40:44");
AquaTimer Phosphate(11, "13:41:00", "13:41:04");
void setup() {
pinMode(FILTER_PIN, OUTPUT);
rtc.begin();
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Világítás beállításai. A sok paraméter miatt metódus láncolással, hogy olvashatóbb legyen
// A LED dimmeléséhez a PWM kimenet miatt relé helyett itt egy MOSFET-re lesz szükség!
LedTimer
.setPin(LED_PIN)
.setOn("14:00") // bekapcs
.setTransition("30") // átmenet ideje percben
.setOff("22:00") // kikapcs
.setMoonDuration("60") // holfény derengés ideje percben, a kikapcs után
.setMaxVal("75%") // a teljes fényerő dimmeléséhez. Ha 100% kellene, akkor elhagyható
.setMoonVal(1); // a holfény fényereje. Itt szándékosan van int, a lehető legkisebb fényerő kedvéért
}
void loop() {
// Tápadagolók
Micro.write();
Macro.write();
Carbo.write();
Phosphate.write();
// Világítás a teljes fényerő gombbal
int buttonState = LedButton.getState();
LedTimer.write(buttonState);
// Szűrő stop - a relén a NC (Normally Closed) kimenetre érdemes kötni a szűrő konnektorát
int filterStopState = FilterStopButton.getState();
digitalWrite(FILTER_PIN, filterStopState);
} -
-
Tomi8822
tag
// Date and time functions using a DS3231 RTC connected via I2C and Wire Lib
RTC_DS1307 RTC;
// Start Time
int sHour = 11;
int sMinute =30;
int sSecond = 0;
// End Time
int eHour = 11;
int eMinute = 30;
int eSecond = 4;
int lightRelay = 2;
int lightRelay2 = 3;
int lightRelay3 = 4;
int lightRelay4 = 5;
int lightRelay5 = 6;
int lightRelay6 = 7;
void setup() {
// Set the relay to off immediately
digitalWrite(lightRelay, HIGH);
Serial.begin(9600);
Wire.begin();
RTC.begin();
// Set the pinmode
pinMode(lightRelay, 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 time
setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year());
time_t s = now();
// Use RTC time to set the end time
setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year());
time_t e = 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(lightRelay, LOW); // Sets the grow light "on"
}
Alarm.alarmRepeat(sHour, sMinute, sSecond, LightOn);
Alarm.alarmRepeat(eHour, eMinute, eSecond, LightOff);
}
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(1000);
}
void LightOn() {
Serial.println("Turning Light On");
digitalWrite(lightRelay, LOW);
}
void LightOff() {
Serial.println("Turning Light Off");
digitalWrite(lightRelay, HIGH);
}Csak annyit szeretnék hogy a hat relét adott időben be majd ki kapcsolni külön külön
-
-
-
brickm
őstag
válasz
Janos250 #7529 üzenetére
Próbáltam a portable-t is már, sajna azzal is ugyan az a jelenség fogadott. Viszont megszületett a compile.
A preference-ben bekapcsoltam, hogy írjon ki mindent a terminál outputra. Így megtapasztaltam, hogy igazából csinálja a dolgát, csak khm.... igen szerény sebességgel. (a blinknek kellett úgy 7-8perc)
Köszönöm a segítséget neked is!
-
Janos250
őstag
Na, akkor én a következőt mondanám:
Portable verzió!
Letöltöd az arduino rendszert, kicsomagolod egy külön könyvtárba, pl C:\arduinoPortable. Lehetőleg ne a dokumentumokba, mert akkor túl hosszú lesz a path, amit nem fog szeretni. () MIELŐTT ELŐSZÖR ELINDÍTOD, csinálsz egy portable könyvtárat. Most már elindíthatod az arduino.exe-t. Ebbe töltöd le az ESP8266-ot a szokásos módon. A portable verzió nem akad össze a fenn lévő másik verzióval/verziókkal.
-
Janos250
őstag
válasz
Teasüti #7523 üzenetére
"Ha szerencsés vagy, akkor üzembiztos lesz. Ha nem, akkor sorra jönnek elő a pixelhibák aktív használat közben"
Van valakinek pixelhibás led szalagja? Ki tudná próbálni, hogy ha a 0 bit hosszát lényegesen lecsökkenti (mondjuk 0.25, vagy 0.2 microsecre), nem szűnik-e meg a hiba? Két szalagot próbáltam, az egyikben egy, a másikban két olyan pixel volt, ami gyakran hibázott egy idő után. Levittem a 0 bit hosszát, és megszűnt a pixelhiba. -
Janos250
őstag
válasz
Teasüti #7523 üzenetére
Mivel nem ismertem a WS2813-at, rákerestem.
"250us or more of reset time, it won’t cause wrong reset while interruption, it work on the lower frequency and inexpensive MCU."
Ez egy fontos szempont lehet, ha nem akar az ember nyűglődni az interrupt letiltásával. Próbára rendelek is egyet!Smart home:
Vannak már rá példák. Én is ki akarom próbálni, de még nem jutottam odáig. Pl. Sonoff cuccok jól illeszthetők. -
vargalex
félisten
válasz
Teasüti #7523 üzenetére
A ws2813-at a pixelhibák miatt javaslod (ugye itt csak a hibás led nem fog működni, a mögötte lévőket nem befolyásolja)?
Elsőre egy hyperion-t (ambilight) próbálnék ki. Ehhez 60 led/m szalagot javasolnál, vagy kevesebbet?
Illetve lehet, hogy a gyerekeknek valami ébresztő napfelkelte "szimulátort" csinálok majd. -
Teasüti
nagyúr
válasz
Janos250 #7517 üzenetére
Érdekes a smart home integráció.
Még nem láttam ilyen alkalmazást, bár adja magát.
Legalább lehetne vmi értelmet adni ezeknek az asszisztenseknek a világításon kívül.(#7518) vargalex
Aliexpress. A minőség elég vegyes. Gyakori a pixelhiba, azt ki kell vágni belőle.
Ha szerencsés vagy, akkor üzembiztos lesz. Ha nem, akkor sorra jönnek elő a pixelhibák aktív használat közben.
Ledek száma attól függ mit szeretnél. 60 led/m még megfizethető, a 120-as már túl van árazva a többihez képest és nincs is belőle csak egy-két méteres. Mondjuk ez érthető, már a 60-ason is jelentős feszültségesés van 5 méteren.
Ha ws2812b-ben gondolkodsz, akkor megfontolnám a ws2813-at helyette. -
-
Tomi8822
tag
Üdv, valaki tudna segíteni nekem?
Ezt a programot szeretném használni de úgy hogy 6 db relét tudjak egyesével időre kapcsolni, lényegében 6 relére kéne kibővíteni. Eggyel működik gond nélkül.// Date and time functions using a DS3231 RTC connected via I2C and Wire Lib
#include <Wire.h>
#include <RTClib.h>
#include <Time.h>
#include <TimeAlarms.h>RTC_DS1307 RTC;
// Start Time
int sHour = 11;
int sMinute =30;
int sSecond = 0;// End Time
int eHour = 11;
int eMinute = 30;
int eSecond = 4;int lightRelay = 2;
void setup() {
// Set the relay to off immediately
digitalWrite(lightRelay, HIGH);Serial.begin(9600);
Wire.begin();
RTC.begin();// Set the pinmode
pinMode(lightRelay, 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 time
setTime(sHour, sMinute, sSecond, current.day(), current.month(), current.year());
time_t s = now();// Use RTC time to set the end time
setTime(eHour, eMinute, eSecond, current.day(), current.month(), current.year());
time_t e = 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(lightRelay, LOW); // Sets the grow light "on"
}Alarm.alarmRepeat(sHour, sMinute, sSecond, LightOn);
Alarm.alarmRepeat(eHour, eMinute, eSecond, LightOff);
}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(1000);
}void LightOn() {
Serial.println("Turning Light On");
digitalWrite(lightRelay, LOW);
}void LightOff() {
Serial.println("Turning Light Off");
digitalWrite(lightRelay, HIGH);
} -
Janos250
őstag
Karácsony : arduino + WS2812 kombó:
linkMiért nem előbb találtam meg?
-
brickm
őstag
Halo,
Valakinek van valami ötlete, hogy az arduino program miért nem compile-olja le az esp-s programokat?
Ha kiválasztom a generic esp8266 panelt a compile megáll 3\4-ednél. Kipróbáltam 3 verziót.Ha vissza állok megára, azt megcisnálja bele is írja a megába.
-
Teasüti
nagyúr
Nem volna egyszerűbb venni egy működő fejegységet a gyári helyére, ha ez beszart?
Ilyen fapados cuccok már kaphatók alig pár ezerrel többért, mint amibe ez a projekt kerül egy igényesebb kivitelezésben. Az időráfordítást nem számolva. A véletleneket meg meg se említsük... -
Felho
csendes tag
Sziasztok !
Kis segítséget szeretnék kérni!
Egyik fórumtárs javasolta írjak ide a fórumba hátha valaki tud segíteni.
Tehát adott egy Ford 6000CD RDS E-O-N autó rádió.
Szerettem volna megvalósítani itthon egy cd emulátort autórádióhoz.
Reméltem találok részletes leírást instrukciót hozzá a neten ami alapján elkészíthetem
de nem
Részletes leírás útmutatás alapján nem okozott volna problémát a megépítése.
De itt már programozás is szóba jött ami számomra kínai főleg úgy hogy sosem csináltam de
ha még útmutatás lenne ugye akkor bizt valahogy sikerülne
Végső soron találtam egy két leírásthttp://www.instructables.com/id/Ford-CD-Emulator-Arduino-Mega/
http://victoare.blogspot.hu/2015/10/ford-bluetooth-audio-lassuk-medvet.html
Itt talán forráskód Ford
https://www.mictronics.de/projects/cdc-protocols/#FordACP
Na nekem ennyi mindenre nem lenne szükségem csak arra hogy valami úton módon
azt higgye a rádió hogy van egy cd tár rákötve.
Gondolom erre szolgálna rajta a acp+ és acp- csatlakozó
és ha már azt hinné hogy van akkor a hang meg mehetne a megfelelő csatlakozólábakra
a projektnél olvastam hogy próbálkoznak vagy lehet már meg is oldották anduino mini - vel .
így kezdtem olvasgatni ez után de ez nekem nagyon magasnak tűnikTehát kérdésem lenne megoldható valahogy valamivel az emulálás ?
Vagy nagyon komplikált? És értelme sincs belekezdeni ?
Esetleg valaki tudna segíteni útmutatással?
Előre is köszönöm megtisztelő válaszotokat
És "gyapo11" fórumtársnak is
Laci
Valamint mindenkinek kellemes ünnepeket!!! -
Tankblock
aktív tag
válasz
Janos250 #7507 üzenetére
Soft WDT reset
ctx: cont
sp: 3fff0330 end: 3fff0550 offset: 01b0>>>stack>>>
3fff04e0: 3ffe8764 3ffef270 3ffef464 40208bb8
3fff04f0: 000001f4 3ffef270 3ffe8382 402022c8
3fff0500: 3ffe8784 3ffef270 3ffef464 402024d4
3fff0510: feefeffe 3ffef270 3ffef464 3ffef520
3fff0520: 3fffdad0 3ffef270 3ffef270 4020252b
3fff0530: 3fffdad0 00000000 3ffef518 402099d8
3fff0540: feefeffe feefeffe 3ffef530 40100718
<<<stack<<<és nem hal meg hanem rebootol és megy a WifiManagerbe ....
Oh My GoD.... valamit benéztem...és megis van a hiba:
delay(1); ez van egyel beljebb mint kellene......
-
brickm
őstag
Halo.
Esp8266 nodmcu firmware. A gpio állapotát hogy lehet megjeleníteni html lapon egyszerűen. Amit találtam neten és egyszerű, arduinos, nálam a lua script van feltöltve. -
Tankblock
aktív tag
-
Tankblock
aktív tag
Sziasztok, remélem tudtok segíteni.
Van egy problémám amire nem tudok rájönni://
// Mod: Add a double knock to send extra message to the MQTT
//
//
//
//GPIO Pin definitions
//Only output info to serial if this is HIGH
//Set our inital states and values
boolean ledState = false;
boolean lastButtonState = false;
boolean buttonState = false;
// Removed because of the new concept implemented
//unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
//unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers
// Button timing variables
unsigned long debounce = 20; // ms debounce period to prevent flickering when pressing or releasing the button
unsigned long DCgap = 250; // max ms between clicks for a double click event
unsigned long holdTime = 1000; // ms hold period: how long to wait for press+hold event
unsigned long longHoldTime = 3000; // ms long hold period: how long to wait for press+hold event
unsigned long currentTime = 0;
// Button variables
boolean buttonVal = HIGH; // value read from button
boolean buttonLast = HIGH; // buffered value of the button's previous state
boolean DCwaiting = false; // whether we're waiting for a double click (down)
boolean DConUp = false; // whether to register a double click on next release, or whether to wait and click
boolean singleOK = true; // whether it's OK to do a single click
unsigned long downTime = 0; // time the button was pressed down
unsigned long upTime = 0; // time the button was released
boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered
boolean waitForUp = false; // when held, whether to wait for the up event
boolean holdEventPast = false; // whether or not the hold event happened already
boolean longHoldEventPast = false;// whether or not the long hold event happened already
const PROGMEM uint16_t MQTT_SERVER_PORT = 1883;
const PROGMEM char* MQTT_CLIENT_ID = "Enterance Room Light Switch";
const PROGMEM char* MQTT_USER = "mqtt_user";
const PROGMEM char* MQTT_PASSWORD = "mqtt_psw";
const char* MQTT_LIGHT_STATE_TOPIC = "enterance/lightswitch/status";
const char* MQTT_LIGHT_COMMAND_TOPIC = "enterance/lightswitch/switch";
const char* MQTT_LIGHT_SPECIAL_TOPIC = "enterance/lightswitch/special";
const char* LIGHT_ON = "ON";
const char* LIGHT_OFF = "OFF";
const char* CLICK = "CLICK";
const char* LONGPRESS = "LONGPRESS";
//Create our objects for MQTT and define our IP Address class
WiFiClient espClient;
PubSubClient client(espClient);
IPAddress MQTT_SERVER_IP(192, 168, 1, 140);
void setup() {
Serial.begin(115200); Serial.println(); Serial.println(); Serial.println();
//Setup our GPIO pins for input/output as needed
pinMode(WiFiLED, OUTPUT);
pinMode(TouchLED, OUTPUT);
pinMode(TouchInput, INPUT);
//Turn those LEDS's off :)
digitalWrite(WiFiLED, HIGH);
digitalWrite(TouchLED, ledState);
//Instantiate the WifManager library
WiFiManager wifiManager;
//Set a host name
wifi_station_set_hostname("sonoffTouch");
//Un remark this if your want to clear the saved connection settings.
//wifiManager.resetSettings();
wifiManager.setDebugOutput(true);
//If autoconnection fails, go into AP mode so the user can configure the WiFi connection to the local WLan
if (!wifiManager.autoConnect("TaTaTatooouchMe")) {
delay(3000);
ESP.reset();
} else {
//WiFi LED is on when low
digitalWrite(WiFiLED, LOW);
//get our MQTT servers address
//WiFi.hostByName("your_mgtt.server.co.uk", MQTT_SERVER_IP);
yield();
//Establish conenction to MQTT server
client.setServer(MQTT_SERVER_IP , MQTT_SERVER_PORT);
client.setCallback(callback);
//Phew, have a bit of a breather to give everything a chance to settle down
delay(1000);
}
}
// function called to publish the state of the light (on/off)
void publishLightState() {
Serial.println("PublishLightState Called");
Serial.print("Light State: ");
Serial.println(ledState);
if (ledState == HIGH) {
Serial.print("Light state high ");
Serial.println(ledState);
client.publish(MQTT_LIGHT_STATE_TOPIC, LIGHT_ON, true);
} else {
Serial.print("Light state low ");
Serial.println(ledState);
client.publish(MQTT_LIGHT_STATE_TOPIC, LIGHT_OFF, true);
}
}
void publishClickState() {
Serial.print("Click event ");
client.publish(MQTT_LIGHT_SPECIAL_TOPIC, CLICK, true);
}
void publishLongPushState() {
Serial.print("Long push event ");
client.publish(MQTT_LIGHT_SPECIAL_TOPIC, LONGPRESS, true);
}
// function called to turn on/off the light
void setLightState() {
//Set our light state, ie turn the touch LED on/off which is the same GPIO pin as the relay.
digitalWrite(TouchLED, ledState);
}
// function called when a MQTT message arrived
void callback(char* p_topic, byte* p_payload, unsigned int p_length) {
// concat the payload into a string
Serial.println("Callback...");
String payload;
for (uint8_t i = 0; i < p_length; i++) {
payload.concat((char)p_payload[i]);
}
Serial.print("Payload: ");
Serial.println(payload);
// handle message topic
if (String(MQTT_LIGHT_COMMAND_TOPIC).equals(p_topic)) {
// test if the payload is equal to "ON" or "OFF"
if (payload.equals(String(LIGHT_ON))) {
if (ledState != true) {
ledState = true;
setLightState();
publishLightState();
}
} else if (payload.equals(String(LIGHT_OFF))) {
ledState = false;
setLightState();
yield();
publishLightState();
}
}
}
void reconnect() {
// Loop until we're reconnected
while (!client.connected()) {
Serial.print("INFO: Attempting MQTT connection...");
// Attempt to connect
if (client.connect(MQTT_CLIENT_ID, MQTT_USER, MQTT_PASSWORD)) {
Serial.println("INFO: connected");
yield();
// Once connected, publish an announcement...
publishLightState();
// ... and resubscribe
client.subscribe(MQTT_LIGHT_COMMAND_TOPIC);
} else {
Serial.print("ERROR: failed, rc=");
Serial.print(client.state());
Serial.println("DEBUG: try again in 5 seconds");
// Wait 5 seconds before retrying
for (int i = 0; i < 500; i++) {
if ( checkButton() == 1) {
ledState = !ledState;
setLightState();
delay(10);
}
}
}
}
}
void loop() {
if (!client.connected()) {
Serial.println("Reconnect");
reconnect();
}
//Get the current button state
// int reading = digitalRead(TouchInput);
// //De-bounce the button
// if (reading != lastButtonState){
// lastDebounceTime = millis();
// }
// if ((millis() - lastDebounceTime) > debounceDelay) {
// // whatever the reading is at, it's been there for longer
// // than the debounce delay, so take it as the actual current state:
//
// // if the button state has changed:
// if (reading != buttonState) {
// buttonState = reading;
//
// // only toggle the LED if the new button state is HIGH
// if (buttonState == HIGH) {
// ledState = !ledState;
// }
// // set the LED:
// setLightState();
// publishLightState();
// }
// }
// // save the reading. Next time through the loop,
// // it'll be the lastButtonState:
// lastButtonState = reading;
// delay(64);
int b = checkButton();
yield();
if (b == 1) {
ledState = !ledState;
setLightState();
publishLightState();
}
if (b == 2) {
publishClickState();
}
if (b == 3) {
// Not Used
}
if (b == 4) {
publishLongPushState();
}
yield();
client.loop();
yield();
}
int checkButton() {
int event = 0;
buttonVal = digitalRead(TouchInput);
currentTime = millis();
// Button pressed down
if (buttonVal == LOW && buttonLast == HIGH && (currentTime - upTime) > debounce)
{
downTime = currentTime;
ignoreUp = false;
waitForUp = false;
singleOK = true;
holdEventPast = false;
longHoldEventPast = false;
if ((currentTime - upTime) < DCgap && DConUp == false && DCwaiting == true) DConUp = true;
else DConUp = false;
DCwaiting = false;
}
// Button released
else if (buttonVal == HIGH && buttonLast == LOW && (currentTime - downTime) > debounce)
{
if (not ignoreUp)
{
upTime = currentTime;
if (DConUp == false) DCwaiting = true;
else
{
event = 2;
DConUp = false;
DCwaiting = false;
singleOK = false;
}
}
}
// Test for normal click event: DCgap expired
if ( buttonVal == HIGH && (currentTime - upTime) >= DCgap && DCwaiting == true && DConUp == false && singleOK == true && event != 2)
{
event = 1;
DCwaiting = false;
}
// Test for hold
if (buttonVal == LOW && (currentTime - downTime) >= holdTime) {
// Trigger "normal" hold
if (not holdEventPast)
{
event = 3;
waitForUp = true;
ignoreUp = true;
DConUp = false;
DCwaiting = false;
//downTime = millis();
holdEventPast = true;
}
// Trigger "long" hold
if ((currentTime - downTime) >= longHoldTime)
{
if (not longHoldEventPast)
{
event = 4;
longHoldEventPast = true;
}
}
}
buttonLast = buttonVal;
return event;
}Ez egy SONOFF Touch kódja. Ha a checkButtont használom a loopba lévő kikommentezett rész helyett akkor random kifagy stack overflow ra hivatkozik. Mit rontottam el?
-
gamb1t9
újonc
Igen, az Index fórumán is ezt írták, köszönöm a gyors választ !
-
gamb1t9
újonc
sziasztok
első project, egy plotterről leolvasott értéket duplázva (0-10) szeretném megoldani, h az 5 ledem közül felvillanjon az értéknek megfelelő számú (0-2-ig 1, 2-4-ig 2 stb..), és az érték(kerekítvenyilván) megjelenjen egy 7szegmensű kijelzőn. Ennek ugye egyszerű az emélete, mégsem jön össze. Külön külön minden tökéletesen működik, de nem tudom összehozni az egészet egyszerre. Nem a hivatalos arduino-m van, hanem vmi copy (ebayen az első ha rákeresel h arduino uno).
Mivel a switch-case-t egyáltalán nem tudtam működésre bírni (ahogy olvastam nem igazán működik az arduinon), elkezdtem az if-eket. 0 és 1 tökéletesen működik, prímán meg is jelenik a kis kijelzőn, ég a megfelelő LED, alles gut, but onnantól az istenért se menne tovább. A kód külön működik, de valamiért nem akar a program belépni oda ahová kellene...
int pinA = 6;
int pinB = 5;
int pinC = 2;
int pinD = 3;
int pinE = 4;
int pinF = 7;
int pinG = 8;void setup() {
//serialmonitor
Serial.begin(9600);//7segment
pinMode ( pinA, OUTPUT);
pinMode ( pinB, OUTPUT);
pinMode ( pinC, OUTPUT);
pinMode ( pinD, OUTPUT);
pinMode ( pinE, OUTPUT);
pinMode ( pinF, OUTPUT);
pinMode ( pinG, OUTPUT);//LEDs
pinMode (9, OUTPUT);
pinMode (10, OUTPUT);
}void loop() {
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.0);
float kaka = voltage*2;
Serial.println(kaka);if (kaka<1) {
digitalWrite (pinA, HIGH);
digitalWrite (pinB, HIGH);
digitalWrite (pinC, HIGH);
digitalWrite (pinD, HIGH);
digitalWrite (pinE, HIGH);
digitalWrite (pinF, HIGH);
digitalWrite (pinG, LOW);
digitalWrite (9, HIGH);}
else if (1<kaka<2){
digitalWrite (pinA, LOW);
digitalWrite (pinB, HIGH);
digitalWrite (pinC, HIGH);
digitalWrite (pinD, LOW);
digitalWrite (pinE, LOW);
digitalWrite (pinF, LOW);
digitalWrite (pinG, LOW);
digitalWrite (9, HIGH);}
else if (2<kaka<3){
digitalWrite (pinA, HIGH);
digitalWrite (pinB, HIGH);
digitalWrite (pinC, LOW);
digitalWrite (pinD, HIGH);
digitalWrite (pinE, HIGH);
digitalWrite (pinF, LOW);
digitalWrite (pinG, HIGH);
digitalWrite (9, HIGH);
digitalWrite (10, HIGH);}
}Ha az "else if (2<kaka<3)"-at átírom sima "if (2<kaka<3)"-ra akkor abba lép be, megjelenik a 2-es a kijelzőn és ég a 2 led az értéktől függetlenül. Jól működik a plotter, ha a fent leírt kód fut akkor 0 és 1 között tud váltani, aztán nemtom, elfogy a tudomány ha tovább kéne állni. A programozás terén IS kezdő vagyok de azért szerintem itt nem ejtettem olyan nagy hibát.
Mit csinálok rosszul ? Előre is köszi (L)
-
brickm
őstag
Sziasztok!
Az a helyzet, hogy tegnap még feltudtam csatolni a wifire az ESP8266-01-et. Most viszont majdnem minden programra ír ki valami errort.
Pl:-- print ap list
function listap(t)
for k,v in pairs(t) do
print(k.." : "..v)
end
end
wifi.sta.getap(listap)erre dobja:
> -- print ap list
function listap(t)
for k,v in pairs(t) do
print(k..> " : "..v)
end
end
wifi.sta.getap(listap)
stdin:1: unexpected symbol near '" : "'
>Azt figyeltem meg, hogy valami karakterkódolási baj lehet néha, mert pl a wifi SSID-met is felbontja pl TP>>LINK_B= stb, természetesen a >> nincs benne, ő teszi bele. Esetleg valakinek valami ötlete?
-
pigster
senior tag
Kipróbáltam így is: ugyanaz
Próbáltam Janos250 ötletét az ellenállással: ugyanaz.
Ahogy már írtam, pár napja teljesen pöpecül működött, bár a modulon semmiféle visszajelző led műkődés nem volt tapasztalható eddig (nem tudom, kellene-e egyáltalán lenni vminek), most meg csinálja az említett "szellemjel" küldést. Ha kihúzom a panelből, akkor még pár másodpercig villog az Arduinon az adatforgalmazást jelző led, aztán abbamarad...
Új hozzászólás Aktív témák
Hirdetés
- Milyen joysticket vegyek?
- Windows 11
- HiFi műszaki szemmel - sztereó hangrendszerek
- Építő/felújító topik
- Nem minden Nothing Phone (3) születik egyenlőnek
- Így nézz tévét 2025-ben: új ajánlások, régi szabályok
- Mercedes topic
- NTFS, exFAT, FAT32 – Melyiket válaszd és miért?
- Kerékpárosok, bringások ide!
- A fociról könnyedén, egy baráti társaságban
- További aktív témák...
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest