Hirdetés
-
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
-
Janos250
őstag
válasz Teasüti #3497 üzenetére
Én is javasolom tvamos első kettő linkjén szereplőket, én is használom mindkettőt, igen elégedett vagyok vele. Akkut is ilyennel töltök.
A harmadikat nem ismerem, de tetszetős, egyből rendeltem is egyet :-)[ Ezeken kívül én még használom a filléres tápokat is, persze mielőtt valakinek a kezébe adom, magam állítom be a feszültséget :-)
[link] 210 Ft
[link] 240 Ft
Ezen meg áramkorlát is állítható 430 Ft-ért:
[link]Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
-
tvamos
nagyúr
válasz Teasüti #3497 üzenetére
Szpidsoppban volt regen olcso cucc, meg hasonlo cuccok vannak az ebay-en is. [link] [link] [link]
Szerintem az fontos, hogy legyen rendesen bekotve a bemenete, legyen doboza, kijelzoje. Valami minimalis vedelme. Nem is tudom... mas nem jut az eszembe.[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Teasüti
nagyúr
Taknyoljam össze bő nyállal és lejön?
Esetleg nincs ötlet mivel lehet tápolni a breadboard-okat, ami nem ilyen megoldás, hanem kicsit szofisztikáltabb?
A másodikat füstöltem el ebből, mert kilóg a bele és hozzáért vmi a tüskékhez, aminek nem kellett volna. -
Teasüti
nagyúr
Produktív nap volt a mai.
Kinyírtam két Nano-t, egy 16x2-es lcd kijelzőt és egy breadboard buck converter-t.
Rövidzár vitte el a tápot és az egyik Nano-t (verification error), majd második körben vmiért az lcd kijelző nem díjazta, hogy a kontrasztra ráadtam az 5 voltot. Még egy szikra és a másik Nano azóta elfelejti a programot áramtalanítás után.
Amúgy jelent vmit a villogó D13 led a Nano-kon? Mindkettő ezzel indul, hogy villog a led rajta. A programban ez nincs benne.
Meg nem értem az lcd-t se, hogy mi baja az 5 volttal. Elvileg egy potival kéne szabályozni, ami fasza is volt amíg el nem kezdtem továbbgondolni, hogy ezt lehetne vezérelni is. Na de a poti is 0-5 között szabályoz, szóval miért volt baj, ha közvetlen rádugtam a tápra?Bónusz kérdés: miként tudnám levenni a halott Nano-ról a fesz stabilizátort és kicserélni az elfüstölt társával a breadboard tápon? A pákával próbáltam melegíteni, de ahogy látom egyszerre kéne melegíteni 4 ponton, hogy levegyem.
[ Szerkesztve ]
-
Gergosz2
veterán
válasz gyapo11 #3487 üzenetére
Simán jó lehet a komparátoros megoldás is.
Az ADC kikapcsolva és SLEEP_MODE_PWR_DOWN-ot használva már bőven uA-es tartományban alszik az Arduinod, csak arra kell figyelni, hogy LOW interruptra tudod csak felébreszteni (Due-t ,Zerot mással is lehet ebben.)
Gyakorlatilag ennyi az egész:
#include <avr/sleep.h>
void sleepNow() // here we put the arduino to sleep
{
byte adcsra = ADCSRA;
wait(100);
ADCSRA = 0;
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
attachInterrupt(0, wake_up_pin, LOW);
sleep_mode();
sleep_disable();
ADCSRA = adcsra;
detachInterrupt(0);
}Loop-ban meg meghívod a sleepNow()-t. Ha felébredt akkor onnan folytatja ahol elaludt. Pl.
Serial.println(" Megyek aludni..");
sleepNow() ; // elmegy aludni, majd felkelted
Serial.println(" Most keltem fel."); // majd innen folytatja[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
-
tvamos
nagyúr
válasz gyapo11 #3485 üzenetére
Arduino frameworkkel nem probaltam meg a sleep modokat, de a wdt siman mehet.
Level Interrupts
When the arduino is in SLEEP_MODE_PWR_DOWN the only way to wake it is with either a watchdog timer interrupt, a level interrupt on pins 2 or 3, or a Pin Change interrupt (see ATmega328 datasheet Table 10-1, including note 3, on pg. 38).[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
gyapo11
őstag
Csinálnék egy töltésvezérlést egy 12 V-os akkura, ezzel kapcsolatban kérdezek.
Az akku keveset van terhelve, leginkább csak az önkisülését meg az arduino fogyasztását a relépanellel együtt kell pótolni a néha bekapcsolt töltéssel. Vagyis jó lenne minél kevesebbet fogyasztani két töltés között.
- bealtatnám az arduinot, és percenként/óránként/naponta kellene fölébreszteni egy pillanatra (még nem tudom milyen gyakoriság lesz a jó), amíg megnézi, hogy kell-e tölteni. Mivel csináljam ezt? Külső cmos oszcillátor generáljon interruptot? Van más mód? Gondolom ha alszik, akkor nincs WD vagy más számláló, ami föl tudná ébreszteni.
- de lehet, hogy inkább külső komparátorral nézném az akkufeszt, és ha eléri az alsó értéket, akkor ébreszteném föl az arduinot, és egyből lehet kezdeni a töltést. Ajánljatok valami 12 V-ról működő ultra kis fogyasztású műveleti erősítőt.
- a feszültség nyilván nagyon lassan csökken, ezért a komparátor kimenő jele sem ugrásszerű, működik-e így az interrupt, vagy tennem kell még oda valami schmitt triggert is, hogy legyen él?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
válasz Janos250 #3482 üzenetére
Köszi, sokat utánaolvastam, sok helyen azt írják amit te, néhányan viszont nem tudtak rá írni. "Serial port is busy" üzenettel állt le az égetés.
Annó az UNO(nem eredeti volt)-val én is találkoztam ezzel az üzenettel, amikr egyszerre volt megnyitva a serial monitor és égettem volna bele, na akkor rendszeresen erre futott ki.
A Mega(ami nem utánzat mega) nem ír ki ilyet, serial monitor mellett is ír rá. Remélem sikerül, már csinálom hozzá a shieldet.[ Szerkesztve ]
-
Janos250
őstag
Elvileg igen. Azért mondom, hogy elvileg, mert még nem csináltam.
1. Az "üres" atmegába vagy programozóval, vagy egy másik arduinoval, tudsz programot felrakni.
Ez vonatkozik bármely programra, a bootloaderre is.
2. Az ember életét megkönnyítendő, szokás a mikrokontrollerekre felrakni olyan pici programot, ami utána képes betölteni a usernek egy másik, ténylegesen általa írt programot. Ez a bootloader.
3. Ha ez valamiképp felmegy, akkor már a PC-ről az arduino keret fel tudja tölteni az általad írt programot. A PC- az USB-t használja, ezért vagy az arduino panelon van egy USB-soros átalakító, vagy használsz külön USB-soros átalakítót. A kész panelok egyik része az egyik, másik része a másik módszert használja.
4. A WEB áruházakban árult panelok mikrokontrollere már tartalmazza a bootloadert.
4. Egy szó mint száz, programozóval (ami lehet egy másik arduino is) bármit feltölthetsz, arduino keret által fordított, vagy bármi más programot is.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Daszkalosz19 #3472 üzenetére
Holnap valószínűleg lesz annyi időm, hogy megnézzem.
Hirtelenjében csak annyi tűnt fel, hogy a pinMode előzze meg a digitalWrite-ot!Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
gyapo11
őstag
válasz MasterMark #3478 üzenetére
Van rajta egy usb-soros ic, a pc meg soros portnak látja, vagyis amit a pc soros portjára küldesz, azt azonnal megkapja a micro, és alkalmas programmal beolvasható az adat.
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 MasterMark #3476 üzenetére
Usb, soros port, wifi, BT, infra.
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
-
MasterMark
titán
PC-ről egy micro-ra hogy tudnék valós időben adatot küldeni?
Switch Tax
-
Pubszon
veterán
válasz nemethdann #3470 üzenetére
Szia.
Nekem a garázsba megy majdnem egy éve folyamatosan minden hiba nélkül.
Ott van télen jó hideg, nyáron pedig jó meleg.ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
-
brickm
őstag
válasz nemethdann #3470 üzenetére
Kiteheted. Bírja. Sok mikrovezérlős kapunyitot csináltam már.
-
brickm
őstag
Sziasztok!
Az lenne a kérdésem, hogy Arduino Mega 2560-am van, amin ugyebár smd IC van, ha veszek DIP28as Atmel IC-t, kivezetékelve bele tudom égetni a bootloadert [link]
De programot is tudok így bele égetni? Vagy kell hozzá egy UNO? -
Daszkalosz19
aktív tag
válasz Janos250 #3469 üzenetére
Szia! Változtattama a kódon,a menubackendet kiszedtem. Egy másik menüt hoztam létre,de nem tudom folytatni. Csak a másodpercet hívtam meg,az óra és a perc még hátra van,mert nem tudom hogy hol hívjam meg. További almenük kellenek? Ezt a részét nem értem. A fordító most lefordítja. Felteszem az LCD és az RTC könyvtáramat is,ha szükséges
időkapcsoló.ino
LCD lib
RTC libKöszi a segítségedet
[ Szerkesztve ]
-
gyapo11
őstag
válasz nemethdann #3470 üzenetére
Ebayen, de vannak más webshopok is, aliexpress, banggod stb.
-40 +85 között megy a proci, de hogy az egyéb alkatrészek, a forrasztások hogy viselik a hőingadozást, az jó kérdés. Tesztelni kell, és esetleg egy plusz nanoval figyelheted a működését. Soros porton lehet kérdezgetni, és ha jól válaszol, akkor megy. A második nano persze bent legyen épületben, annak a működését meg figyelheti a watchdog, vagy egy külső újraindítható monostabil, amit a nano indítgat.
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
-
nemethdann
csendes újonc
Helló!
Érdeklődnék, hogy hol szokás olcsón arduinot vásárolni? Most kezdenék neki az ismerkedésnek vele, úgy gondoltam először veszek egy nano-t és csinálok egy kapunyitó vezérlést. Más mikrovezérlőket már programoztam, szóval annyira nem lenne idegen.
Mit gondoltok, jó választás lenne? Mennyire időjárás érzékenyek ezek? Kirakhatom az udvarra egy zárt dobozban? Nem árt neki a hideg/meleg?Üdv.: nemethdann
-
Janos250
őstag
válasz Daszkalosz19 #3468 üzenetére
Közben letöltöttem az LCD könyvtárát, így ha a megfelelő sorrendben raktam össze a részeket és kikommentelten a (szerintem) hiányzó dolgokat, akkor lefordította.
Kipróbálni nem tudom, mert ami LCD kijelzőt nekem I2C gyanánt küldött a kicsi kínai, az nem az :-(Nekem úgy tűnik, hiányzik a
readButtons()
navigateMenus()
relayhour_setting()
relayminute_setting()
relaysec_setting()Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Daszkalosz19 #3466 üzenetére
Pár megjegyzés:
Próbáltam legalább szintaktikailag leellenőrizni, rendbehozni.
Az LCD kivételével a többi rendbehozható (szintaktikailag), ahhoz valószínűleg meg kell keresni a passzoló könyvtárat, de arra már nem futotta az energiámból.A MenuBackend menükezelőből több példány kering a neten, a legújabb valószínűleg az 1.1,
de ebből is hiányzik a
void toRoot() {
setCurrent(&getRoot() );
}
tagfüggvény, amit ha használni akarja az ember, kézzel be kell írni.
[link]
Egyébként ez a MenuBackend meglehetősen régi, régóta nem fejlesztik, vannak más menükezelők is. (Én egyiket se használtam)A LiquidCrystal_I2C könyvtárral szintén vannak gondok, mert (nekem legalábbis) a megjegyzéssel ellentétben nincs az arduino standard könyvtárában.
Amit a Google elsőre kiad, azzal nem kompatibilis.Egyébként ez valóban hátránya a szabad szoftveres dolgoknak, hogy mindenki fejleszti, nem tudni ki melyik verziót használta, kik adták ugyanazt a nevet a saját fejlesztésű könyvtáruknak.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Daszkalosz19
aktív tag
Sziasztok!
Van egy időkapcsoló óra kódom,ami nincs befejezve,mert elakadtam! Ebben kérném a segítségeteket.
A menü rendszerhez nem értek!
Ezt a rutint kéne meghívni a menü rendszerhez az "1. Dugalj" "Be" almenühöz!// Kel 1 menü ahol kiválasztod a relé számát, és onan meghivod vele a rutinodat:
...
relaysecBe_settting(relayNum); // 0 ... 3
...
//............................................................sec_settting()................................................
void relaysecBe_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rbe_sec = now_.minute();
lcd.setCursor(0,0);
lcd.print("Set second, relayBe: ");
lcd.print(relay);
lcd.setCursor(0,1);
lcd.print("mPerc = ");
if(relaysT[relay].Rbe_sec < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_sec);
do { //
lcd.setCursor(8,1);
if(relaysT[relay].Rbe_sec < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_sec);
keypressed =customKeypad.getKey(); //
delay(100);
if (keypressed=='1') //
{
if(relaysT[relay].Rbe_sec < 60){
relaysT[relay].Rbe_sec ++; //
}else{
relaysT[relay].Rbe_sec = 0;
}
}
if (keypressed=='2') //
{
if(relaysT[relay].Rbe_sec > 0){
relaysT[relay].Rbe_sec --; //
}else{
relaysT[relay0].Rbe_sec = 59;
} //
}
//delay(100);
} while(keypressed != '3'); //
}Ez is kell hozzá,de nem tudom hova illesszem!
uint8_t relayNum;
...
relayNum = 0; //0...3
..
relaysecBe_settting(relayNum); << ide kerül a relé száma 0 ... 3
Amit át adsz a hívott rutinakEz lenne a teljes kód!
//Idokapcsolo_Proba
#include <MenuBackend.h> //MenuBackend library - copyright by Alexander Brevig
#include <LiquidCrystal_I2C.h> //this library is included in the Arduino IDE
#include <Wire.h>
#include <Keypad.h>
#include "RTClib.h"
LiquidCrystal_I2C lcd(0x27, 20, 4);
RTC_DS1307 RTC;
const int REL1 = 7;
const int REL2 = 8;
const int REL3 = 9;
const int REL4 = 10;
int hour;
int minute;
int second;
const byte ROWS = 4; //four rows
const byte COLS = 1; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS] = {'0','1','2','3'};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[1] = {8}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
DateTime now;
//relays adat structure
struct relays {
// bekapcsolás
uint16_t Rbe_year;
uint8_t Rbe_mon;
uint8_t Rbe_day;
uint8_t Rbe_hour;
uint8_t Rbe_min;
uint8_t Rbe_sec;
// kikapcsolás
uint16_t Rki_year;
uint8_t Rki_mon;
uint8_t Rki_day;
uint8_t Rki_hour;
uint8_t Rki_min;
uint8_t Rki_sec;
};
// Relay flags
#define Rbe1 0
#define Rbe2 1
#define Rbe3 2
#define Rbe4 3
relays relaysT[4]; // Tömböd 4 relének
uint8_t relayF = 0; // Relék állapotjelző bitek
uint8_t relayNum;
relayNum = 0; //0...3
relayhourBe_settting(relayNum); //ide kerül a relé száma 0 ... 3
relayhourKi_settting(relayNum);
relayminuteBe_settting(relayNum);
relayminuteKi_settting(relayNum);
relaysecBe_settting(relayNum);
relaysecKi_settting(relayNum); //Amit át adsz a hívott rutinak
//Menu variables
MenuBackend menu = MenuBackend(menuUsed,menuChanged);
//initialize menuitems
MenuItem menu1Item1 = MenuItem("1. Dugalj 1");
MenuItem menuItem1SubItem1 = MenuItem("1.1 BE");
MenuItem menuItem1SubItem2 = MenuItem("1.2 KI");
MenuItem menu1Item2 = MenuItem("2. Dugalj 2");
MenuItem menuItem2SubItem1 = MenuItem("2.1 BE");
MenuItem menuItem2SubItem2 = MenuItem("2.2 KI");
MenuItem menu1Item3 = MenuItem("3. Dugalj 3");
MenuItem menuItem3SubItem1 = MenuItem("3.1 BE");
MenuItem menuItem3SubItem2 = MenuItem("3.2 KI");
MenuItem menu1Item4 = MenuItem("4. Dugalj 4");
MenuItem menuItem4SubItem1 = MenuItem("4.1 BE");
MenuItem menuItem4SubItem2 = MenuItem("4.2 KI");
MenuItem menu1Item5 = MenuItem(" Vissza ");
void setup()
{
Serial.begin(9600);
lcd.begin(20, 4);
lcd.backlight();
Wire.begin();
lcd.clear();
RTC.begin();
digitalWrite(REL1, HIGH);
digitalWrite(REL2, HIGH);
digitalWrite(REL3, HIGH);
digitalWrite(REL4, HIGH);
pinMode(REL1, OUTPUT);
pinMode(REL2, OUTPUT);
pinMode(REL3, OUTPUT);
pinMode(REL4, OUTPUT);
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Valahol feltöltöd az relay tömböt
// bekapcsolás
relaysT[0].Rbe_hour = 10;
relaysT[0].Rbe_min = 30;
relaysT[0].Rbe_sec = 0;
// kikapcsolás
relaysT[0].Rki_hour = 10;
relaysT[0].Rki_min = 50;
relaysT[0].Rki_sec = 0;
// bekapcsolás
relaysT[1].Rbe_hour = 10;
relaysT[1].Rbe_min = 30;
relaysT[1].Rbe_sec = 0;
// kikapcsolás
relaysT[1].Rki_hour = 10;
relaysT[1].Rki_min = 50;
relaysT[1].Rki_sec = 0;
// bekapcsolás
relaysT[2].Rbe_hour = 10;
relaysT[2].Rbe_min = 30;
relaysT[2].Rbe_sec = 0;
// kikapcsolás
relaysT[2].Rki_hour = 10;
relaysT[2].Rki_min = 50;
relaysT[2].Rki_sec = 0;
// bekapcsolás
relaysT[3].Rbe_hour = 10;
relaysT[3].Rbe_min = 30;
relaysT[3].Rbe_sec = 0;
// kikapcsolás
relaysT[3].Rki_hour = 10;
relaysT[3].Rki_min = 50;
relaysT[3].Rki_sec = 0;
// Példa flag használatára
relayF |= (1 << Rbe1); // Jelző set
relayF &= ~(1 << Rbe1); // Jelző reset
if(relayF &(~(1 << Rbe1))){}; // flag vizsgálat bekapcsoltra
if(!(relayF &(~(1 << Rbe1)))){}; // flag vizsgálat kikapcsoltra
relayF |= (1 << Rbe2); // Jelző set
relayF &= ~(1 << Rbe2); // Jelző reset
if(relayF &(~(1 << Rbe2))){}; // flag vizsgálat bekapcsoltra
if(!(relayF &(~(1 << Rbe2)))){}; // flag vizsgálat kikapcsoltra
relayF |= (1 << Rbe3); // Jelző set
relayF &= ~(1 << Rbe3); // Jelző reset
if(relayF &(~(1 << Rbe3))){}; // flag vizsgálat bekapcsoltra
if(!(relayF &(~(1 << Rbe3)))){}; // flag vizsgálat kikapcsoltra
relayF |= (1 << Rbe4); // Jelző set
relayF &= ~(1 << Rbe4); // Jelző reset
if(relayF &(~(1 << Rbe4))){}; // flag vizsgálat bekapcsoltra
if(!(relayF &(~(1 << Rbe4)))){}; // flag vizsgálat kikapcsoltra
}
//Menü Konfig....
menu.getRoot().add(menu1Item1);
menu1Item1.addRight(menu1Item2).addRight(menu1Item3).addRight(menu1Item4).addRight(menu1Item5);
menu1Item1.add(menuItem1SubItem1).addRight(menuItem1SubItem2);
menu1Item2.add(menuItem2SubItem1).addRight(menuItem2SubItem2);
menu1Item3.add(menuItem3SubItem1).addRight(menuItem3SubItem2);
menu1Item4.add(menuItem4SubItem1).addRight(menuItem4SubItem2);
menu1Item5.add(menu1Item5);
menu.toRoot();
lcd.setCursor(0,0);
lcd.print("MenuControl v1.0");
}
void loop()
{
DateTime now = RTC.now();
lcd.setCursor(0, 0);
lcd.print(now.year(), DEC);
lcd.print('.');
lcd.print(now.month(), DEC);
lcd.print('.');
lcd.print(now.day(), DEC);
lcd.print(' ');
lcd.setCursor(10, 0);
if (now.hour()<10)
lcd.print('0');
lcd.print(now.hour(), DEC);
lcd.print(':');
if (now.minute()<10)
lcd.print('0');
lcd.print(now.minute(), DEC);
lcd.print(':');
if (now.second()<10)
lcd.print('0');
lcd.print(now.second(), DEC);
lcd.setCursor(6, 1);
for(uint8_t i = 0; i < 4; i++){
// relé bekapcsol
if(!(relayF &(~(1 << i)))){ // Ha flag = 0
if((relaysT[i].Rbe_hour == now.hour()) && (relaysT[i].Rbe_min == now.minute()) && (relaysT[i].Rbe_sec == now.second())){
digitalWrite(REL1 + i, HIGH);
relayF |= (1 << i); // Jelző set
}
}
// relé kikapcsol
if(relayF &(~(1 << i))){ // Ha flag = 1
if((relaysT[i].Rki_hour == now.hour()) && (relaysT[i].Rki_min == now.minute()) &&(relaysT[i].Rki_sec == now.second()) ){
digitalWrite(REL1 + i, LOW);
relayF &= ~(1 << i); // Jelző reset
}
}
}
// Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
if((relaysT[0].Rbe_hour == now.hour()) && (relaysT[0].Rbe_min == now.minute()) && (relaysT[0].Rbe_sec == now.second())){
digitalWrite(REL1, HIGH);
}
// relé ki
if((relaysT[0].Rki_hour == now.hour()) && (relaysT[0].Rki_min == now.minute()) && (relaysT[0].Rki_sec == now.second())){
digitalWrite(REL1, LOW);
}
// Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
if((relaysT[1].Rbe_hour == now.hour()) && (relaysT[1].Rbe_min == now.minute()) && (relaysT[1].Rbe_sec == now.second())){
digitalWrite(REL2, HIGH);
}
// relé ki
if((relaysT[1].Rki_hour == now.hour()) && (relaysT[1].Rki_min == now.minute()) && (relaysT[1].Rki_sec == now.second())){
digitalWrite(REL2, LOW);
}
// Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
if((relaysT[2].Rbe_hour == now.hour()) && (relaysT[2].Rbe_min == now.minute()) && (relaysT[2].Rbe_sec == now.second())){
digitalWrite(REL3, HIGH);
}
// relé ki
if((relaysT[2].Rki_hour == now.hour()) && (relaysT[2].Rki_min == now.minute()) && (relaysT[2].Rki_sec == now.second())){
digitalWrite(REL3, LOW);
}
// Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
if((relaysT[3].Rbe_hour == now.hour()) && (relaysT[3].Rbe_min == now.minute()) && (relaysT[3].Rbe_sec == now.second())){
digitalWrite(REL4, HIGH);
}
// relé ki
if((relaysT[3].Rki_hour == now.hour()) && (relaysT[3].Rki_min == now.minute()) && (relaysT[3].Rki_sec == now.second())){
digitalWrite(REL4, LOW);
}
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
if (customKey == '0'){
relayhour_setting();
} else if (customKey == '1'){
relayminute_setting();
} else if (customKey == '2'){
relaysec_setting();
}else{}
}
readButtons(); //I splitted button reading and navigation in two procedures because
navigateMenus(); //in some situations I want to use the button for other purpose (eg. to change some settings)
} //loop()...
void menuChanged(MenuChangeEvent changed){
MenuItem newMenuItem=changed.to; //get the destination menu
lcd.setCursor(0,1); //set the start position for lcd printing to the second row
if(newMenuItem.getName()==menu.getRoot()){
lcd.print(" Idokapcsolo menu ");
}else if(newMenuItem.getName()=="1. Dugalj 1"){
lcd.print("1. Dugalj 1 ");
}else if(newMenuItem.getName()=="1.1 BE"){
lcd.print("1.1 BE");
}else if(newMenuItem.getName()=="1.2 KI"){
lcd.print("1.2 KI");
}else if(newMenuItem.getName()=="2. Dugalj 2"){
lcd.print("2. Dugalj 2" );
}else if(newMenuItem.getName()=="2.1 BE"){
lcd.print("2.1 BE");
}else if(newMenuItem.getName()=="2.2 KI"){
lcd.print("2.2 KI");
}else if(newMenuItem.getName()=="3. Dugalj 3"){
lcd.print("3. Dugalj 3" );
}else if(newMenuItem.getName()=="3.1 BE"){
lcd.print("3.1 BE");
}else if(newMenuItem.getName()=="3.2 KI"){
lcd.print("3.2 KI");
}else if(newMenuItem.getName()=="4. Dugalj 4"){
lcd.print("4. Dugalj 4 ");
}else if(newMenuItem.getName()=="4.1 BE"){
lcd.print("4.1 BE");
}else if(newMenuItem.getName()=="4.2 KI"){
lcd.print("4.2 KI");
}else if(newMenuItem.getName()=="5.Vissza"){
lcd.print(" Vissza");
}
}
void menuUsed(MenuUseEvent used){
lcd.setCursor(0,0);
lcd.print("You used ");
if ((used.item.getName()) == "1.1 BE")
{
menu.toRoot(); //back to Main
}
if ((used.item.getName()) == "5. Vissza")
{
lcd.setCursor(0,2);
lcd.print("Vissza");
// lcd.print(used.item.getName());
delay(3000); //delay to allow message reading
lcd.setCursor(0,0);
lcd.print("MenuControl v1.0");
menu.toRoot(); //back to Main
}
}
//............................................................secBe_settting()................................................
void relaysecBe_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rbe_sec = now.sec();
lcd.setCursor(0,1);
lcd.print("Set second: ");
lcd.print(relay);
lcd.setCursor(0,2);
lcd.print("mPerc = ");
if(relaysT[relay].Rbe_sec < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_sec);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
lcd.setCursor(8,1);
if(relaysT[relay].Rbe_sec < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_sec);
delay(100);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
if (keypressed=='1') //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rbe_sec< 60){
relaysT[relay].Rbe_sec ++;
}else{
relaysT[relay].Rbe_sec = 0;
}
}
if (keypressed=='2') //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rbe_sec > 0){
relaysT[relay].Rbe_sec --;
}else{
relaysT[relay].Rbe_sec = 59;
}
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
//............................................................secKi_settting()................................................
void relaysecKi_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rki_sec = now.minute();
lcd.setCursor(0,1);
lcd.print("Set second: ");
lcd.print(relay);
lcd.setCursor(0,2);
lcd.print("mPerc = ");
if(relaysT[relay].Rki_sec < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rki_sec);
do {
lcd.setCursor(8,1);
if(relaysT[relay].Rki_sec < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rki_sec);
delay(100);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
if (keypressed=='1') //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rki_sec< 60){
relaysT[relay].Rki_sec ++;
}else{
relaysT[relay].Rki_sec = 0;
}
}
if (keypressed=='2') //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rki_sec > 0){
relaysT[relay].Rki_sec --; //
}else{
relaysT[relay].Rki_sec = 59;
}
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
//.....................................................hourBe_setting().......................................................
void relayhourBe_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rbe_hour = now.hour();
lcd.setCursor(0,1);
lcd.print("Set hour: ");
lcd.setCursor(0,2);
lcd.print("Ora = ");
if(relaysT[relay].Rbe_hour< 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_hour);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
lcd.setCursor(6,1);
if(relaysT[relay].Rbe_hour < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_hour);
delay(100);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
if (keypressed=='1') //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rbe_hour < 24){
relaysT[relay].Rbe_hour ++;
}else{
relaysT[relay].Rbe_hour = 0;
}
}
if (keypressed=='2') //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rbe_hour> 0){
relaysT[relay].Rbe_hour --; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
relaysT[relay].Rbe_hour = 23;
}
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
//.....................................................hourKi_setting().......................................................
void relayhourKi_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rki_hour = now.hour();
lcd.setCursor(0,1);
lcd.print("Set hour: ");
lcd.setCursor(0,2);
lcd.print("Ora = ");
if(relaysT[relay].Rki_hour< 10) lcd.print(" ");
lcd.print(relaysT[relay].Rki_hour);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
lcd.setCursor(6,1);
if(relaysT[relay].Rki_hour < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rki_hour);
delay(100);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
if (keypressed=='1') //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rki_hour < 24){
relaysT[relay].Rki_hour ++;
}else{
relaysT[relay].Rki_hour = 0;
}
}
if (keypressed=='2') //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rki_hour> 0){
relaysT[relay].Rki_hour --;
}else{
relaysT[relay].Rki_hour = 23;
}
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
//...........................................................minuteBe_setting().................................................
void relayminuteKi_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rbe_min = now.minute();
lcd.setCursor(0,1);
lcd.print("Set Minute: ");
lcd.setCursor(0,2);
lcd.print("Perc = ");
if(relaysT[relay].Rbe_min < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_min);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
lcd.setCursor(7,1);
if(relaysT[relay].Rbe_min< 10) lcd.print(" ");
lcd.print(relaysT[relay].Rbe_min);
delay(100);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
if (keypressed=='1') //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rbe_min < 60){
relaysT[relay].Rbe_min ++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
relaysT[relay].Rbe_min = 0;
}
}
if (keypressed=='2') //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rbe_min > 0){
relaysT[relay].Rbe_min --; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
relaysT[relay].Rbe_min = 59;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
//...........................................................minuteKi_setting().................................................
void relayminuteKi_settting(uint8_t relay)
{
char keypressed;
relaysT[relay].Rki_hour = now.minute();
lcd.setCursor(0,1);
lcd.print("Set Minute: ");
lcd.setCursor(0,2);
lcd.print("Perc = ");
if(relaysT[relay].Rki_hour< 10) lcd.print(" ");
lcd.print(relaysT[relay].Rki_hour);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
lcd.setCursor(6,1);
if(relaysT[relay].Rki_hour < 10) lcd.print(" ");
lcd.print(relaysT[relay].Rki_hour);
delay(100);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
if (keypressed=='1') //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rki_hour < 60){
relaysT[relay].Rki_hour ++;
}else{
relaysT[relay].Rki_hour = 0;
}
}
if (keypressed=='2') //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
{
if(relaysT[relay].Rki_hour> 0){
relaysT[relay].Rki_hour --;
}else{
relaysT[relay].Rki_hour = 59;
}
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}Valaki segítsen! Köszönöm
-
Janos250
őstag
válasz MasterMark #3462 üzenetére
"szabad is ilyet venni"
Persze. Közben rájöttem, hogy nem ezzel voltak gondjaim a feltöltésnél, hanem ezzel:
[link]
mert nincs USB csatlakozás, soroson kell feltölteni, és nem figyeltem arra, hogy kézzel kell a feltöltés előtt bootloader módba állítani.
"nem gyújtja fel a lakást?"
Nem! :-)
5V, (vagy 3.3) és párszáz mA még akkor sem csinálna bajt, ha valami gubanc lenne, de nem szokott lenni.
Mennek ezek rendesen. Nálam még az egész arduino seregből egy se purcant ki, pedig mind a legolcsóbb kínai.
Ha meg túl pesszimista az emberfia és fél az 1-2 Watt-tól, akkor egy olyan táppal hajtja meg, ami eleve csak kisebb áramot tud leadni.Az más kérdés, hogy én helyette (mivel ez ATmega328 procival megy) inkább az ARM chippel készülteket szoktam ajánlani, pl:
[link]
Ezt a lapocskát én nagyon szeretem. Jók a paraméterei, gyors, miegymás. Na, meg ARM.
vagy :
[link]
Az a jó - többek között - az Arduino kompatibilis lapokban, hogy a megírt program az adott lapra fordítva ugyanúgy fut gyakorlatilag mindegyiken. Persze, ha nem használunk spéci dolgokat.Na, meg ezeket is kedvelem, mert szintén nagyon jók a paraméterei és alapból benne van a WiFi:
[link]
[link]Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz MasterMark #3459 üzenetére
Persze.
A minire a program feltöltéssel nekem voltak gondjaim, de aztán megoldódott.
Ha jól emlékszem úgy, hogy az ebay-en megadott linkről töltöttem le a drivert, de ebben már nem vagyok biztos, régen használtam.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
-
MasterMark
titán
-
zetecR
addikt
Sziasztok,
a kérdésemből egyértelmű lesz, hogy teljesen laikus vagyok a témában.
Egy nagyon egyszerű projektet szeretnék összehozni, egy leírás alapján a Panasonic plazmám fekete szintjét állítanám visszaállítani a gyári értékre.
Az említett leírásban konkrétan EZT az Arduino Uno Rev. 3-at használja és mivel szeretnék biztosra menni kérdezném a szakértőket, hogy ebben a hirdetésben szereplő cucc gyak. ugyanaz?Előre is köszi.
-
kovimre
tag
válasz gyapo11 #3450 üzenetére
Egy időzítőt kellene készíteni. Egyik állásban számoljon vissza 10 perctől, majd váltosn átt a másikra, ahol számoljon vissza 60 másodpercről (közben tartson bekapcsolva egy relét). Ezután kezdje az elsővel. Továbbá legyen lehetőség mindkét idő állítására (nyomógombokkal). Kb. ennyi.
-
Janos250
őstag
válasz Teasüti #3454 üzenetére
"Mit értesz vektor alatt?"
Amit Te puffernak nevezel.
"ugyanúgy el kell tárolnom a ram-ban a vezérlőbájtokat minden szalagra vonatkozóan"
Így van.
"akkor ezt sehogy nem lehet leredukálni egy változóra"
Azt tényleg nem.
"Vagyis ha jól értem az egyetlen előny az volna, hogy átláthatóbb és rendezettebb lenne a program a mostani katyvasz helyett."
Jól érted.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Teasüti
nagyúr
válasz Janos250 #3453 üzenetére
A szalag frissítése sosem volt probléma. Egyben kitolja a puffert, aztán amíg nem hívja meg semmi megint, addig a szalag tartja a mintát. Nincs frissítési probléma és tetszőleges fps-el lehet frissíteni.
A "gond" az volna, hogy nagyrészt globális változókkal dolgozok, mint amilyen a szalag pufferje is.
Ezt a puffert manipulálja az összes függvény, amíg végül kiküldésre nem kerül sor.
A puffer és a vezérlőbájtok mind globálisak, ami számomra egyszerűvé teszi a munkát.Egy képkocka első szalagra, bele a vektorba.
A vektor kiküldése az első szalagra.
Mit értesz vektor alatt? Mi volna itt a "vektor" feladata?
Ha itt generálom a képkockát, az rendben is volna, de végső soron ugyanúgy el kell tárolnom a ram-ban a vezérlőbájtokat minden szalagra vonatkozóan, nem?
Vhonnan elő kell kaparni a paramétereket a függvényhez/osztályhoz.Tehát ha pl. a
byte fényerő
változóból van négy példány, mert négy szalaghoz kell eltárolni az infót, akkor ezt sehogy nem lehet leredukálni egy változóra.
Vagyis ha jól értem az egyetlen előny az volna, hogy átláthatóbb és rendezettebb lenne a program a mostani katyvasz helyett.[ Szerkesztve ]
-
Janos250
őstag
válasz Teasüti #3451 üzenetére
Igen, jól érted.
Nem biztos, hogy jó a javallatom, mert nincs energiám részleteiben átbogarászni a programod.
Talán: egy képkocka generálás egy class, paraméter a kocka adatait tároló vektor.
Egy képkocka adatait mindenképpen egy vektorban kell tárolnod, és egyszerre küldeni ki a szalagra, mert - ha jól emlékszem - talán
8-9 microsec lehet max a szalag következő ledjének az adatainak küldése között, mert ha hosszabb, akkor "elölről kezdi",
azaz ami pl. 10 microsec múlva érkezik, azt már újra az első led kapja el, mint "sajátját".
Tehát akkor:
Egy képkocka első szalagra, bele a vektorba.
A vektor kiküldése az első szalagra.
Egy képkocka második szalagra, UGYANABBA a vektorba (memória takarékosság)
A vektor kiküldése a második szalagra.Változók/memória:
Amit a classban "felül" deklarálsz, azok a példány élete során végig megmaradnak. Amit az egyik tagfüggvényben, az csak a tagfüggvény működése közben.
A class a paramétereket (többnyire) érték szerint veszi át, de pl. a vektort nem, hanem "hivatkozás szerint", azaz a címét veszi át, és a "kintit" használja, így nem foglal
külön memóriát. Ha kell, lehet olyat is, hogy valamely változóból ne jöjjön létre példányonként egy-egy, hanem összesen egy, és minden példány azt az egyet használja ("static").Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
gyapo11
őstag
Most láttam a hírt.
https://create.arduino.cc/
IDE a felhőben, böngészőben fut, megosztható, friss libraryk azonnali eléréssel. Remélem jó lesz.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
-
Teasüti
nagyúr
válasz Janos250 #3449 üzenetére
/*Ez egy hevenyeszett bevezeto bevezetoje az osztalyokrol teasuti keresere
* jogallasa "beerware", azaz szabadon hasznalhatod, de ha kocsmaba megyunk, Te fizeted a sort
*/LOOOL
Viszont ha jól értem ezzel dolgozik az összes WS2812 library is, hisz eleve osztályként definiálod a led szalagot.
Az én esetemben viszont akkor nem értem miként lehetne osztályokba rendezni konkrétan az egész loop-ot, hisz egy loop ciklus egy képkockát generál.
Aztán ha több szalagom lesz, akkor azt kell megoldanom, hogy egy ciklusban több képkocka jöjjön létre több szalagra, amit vagy úgy fogok megoldani, hogy oda-vissza ugrálok a loop-ban, vagy copy&paste.
Aztán ami a változókat illeti, ha osztályokba rendezve fut le, akkor is több példány jön létre minden változóból, vagy ahogy kilép az egyik osztályból úgy üríti a ram-ot?[ Szerkesztve ]
-
gyapo11
őstag
-
Janos250
őstag
válasz Teasüti #3442 üzenetére
Kérésedre készítettem egy hevenyészett egy oldalas mintát az osztályok, objektumok témában.
A dolog persze sokkal összetettebb, de azt nem egy oldalon, hanem teljes könyvekben írják le.
[link]Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
kovimre
tag
Sziasztok! Egy egyszerű számláló áramkör működésének program írását el tudná valaki vállalni? (4*7 szegmenses kijelző, + 2 mikrókapcsoló lenne az áramkörben)
[ Szerkesztve ]
-
Daszkalosz19
aktív tag
Sziasztok! Próbálok összehozni egy 4 csatornás időkapcsoló órát lcd kijelzővel és 1x4 keypaddal,de tudás hiánya miatt nem jön össze!
Esetleg ha valaki kar keresni egy kis pénzt a programkód megírásával az privátban jelezze!
Sajnos ez meghaladja a tudásom,de tanulgatom azért!
Köszönöm előre is! -
tvamos
nagyúr
válasz Teasüti #3445 üzenetére
Arduinoban nem C-ben programozunk?
De. Úgy értettem, arduino framework nélkül. Rendes IDE-ben, debuggerrel, ilyenek.SerialEvent() is volt már
Akkor nem tudom. Nekem atmennek adatok gépről AVR-re gond nélkül. Tobb kB egy hibás byte nélkül.[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Teasüti
nagyúr
SerialEvent() is volt már, technikailag lényegtelen, h loop()-ban olvasod be, vagy a loop után. Nálam az a kód volt a SerialEvent()-ben, ami ki van kommentelve az érkező adat olvasásának meghívása fölött a loop elején.
328p, igen.
Arduinoban nem C-ben programozunk? Vagy vmi elfajzott C++?[ Szerkesztve ]
-
tvamos
nagyúr
válasz Teasüti #3442 üzenetére
En inkabb megprobalnam elhagyni a switch-case-t, ha lehet, ha ilyet csinalok.
A serialll kapcsolatban: [link]
En nem hasznaltam meg az Arduino frameworkot ilyen bonyolultsagu projekthez, megirtam C-ben. (Vagy regebben Asm.) Igy nem kellett megszakitasokkal sem bajlodnom, kiveve a pin change interruptot, azt hasznalta azert.
Most a te Unodban melyik AVR van? 328?
[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Janos250
őstag
válasz Teasüti #3442 üzenetére
Sajnos nincs kéznél, és a napokban nem is érek rá csinálni , neten meg nem tudok egyszerűt.
"Az effektezésnél tudatosan vannak kihagyva, így paramétertől függően végigmehet mindegyiken."
Én azért próba-szerencse alapon kipróbálnám enélkül, azaz ideiglenesen kikommentelve.
Vagy másként szervezném a switchet, hogy szabályos legyen, bár lehet, hogy így is az.Erőforrás:
Ja, igen, én ESP-t és ARM-ot használok többnyire :-)Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Teasüti
nagyúr
válasz Janos250 #3439 üzenetére
Az effektezésnél tudatosan vannak kihagyva, így paramétertől függően végigmehet mindegyiken.
Ez az objektum/class nekem új. Vmi szájbarágós tutorial esetleg nincs kéznél?
Pedig az elképzelés éppen az volt, hogy sorszámozom a globális váltózókat.
De akkor létezik elegáns megoldás is.A saját megszakítás kezelőre van vmi ötlet? Merre induljak egyáltalán?
Próbáltam kilőni a programból az összes megszakítással babráló részt, mint a kikapcsolás a led frissítésénél és a gyroszenzor jelzésénél új adatról.
Szóval elméletileg nem kéne közbevágnia semminek a soros kommunikációnál, de így is eldobálja a karaktereket.
Úgy amúgy mi történik, ha megszakítás közben bejön még egy megszakítás?Az Adafruit és Fastled library-t nem véletlenül nem használom, túl erőforrás igényesek és televannak demóval.
FABled-nél meg te magad kezeled a puffert direkt módon és mentes minden felesleges extrától, így jóval kisebb méretre fordul le.[ Szerkesztve ]
-
Janos250
őstag
Pár szigorún szubjektív megjegyzés azoknak, akik színes led szalagot akarnak programozni:
#include <RGBConverter.h> után kényelmes RGB - HSL átszámítási lehetőséget kapunk:
RGBConverter enKonverterem = RGBConverter();
enKonverterem.rgbToHsl(R, G, B, HSL); //byte R, byte G, byte B, double HSL[]
enKonverterem.hslToRgb(H, S, L, RGB); //double H, double S, double L, byte RGB[]
Az eredményt az utolsó paraméter 3 elemében kapjuk.
Ha az RGB-t átrakjuk HSL-be, változtathatjuk a H (hue) színezettséget,azaz a színt, az S (saturation) színtelítettséget, és az L (lightness) fényerőt.
Utána visszarakhatjuk RGB-be.LED szalaghoz én az Adafruit osztályát próbáltam:
#include <Adafruit_NeoPixel.h>
Egy ciklusban (vagy akárhogy) feltöltjük minden egyes (i.) ledhez a három színt.
enLEDszalagom.setPixelColor(i,R,G,B);
Amikor kész a feltöltés, akkor jöhet a show:
enLEDszalagom.show();
Szerintem kényelmes, de több másik is fellelhető a neten.A neten található példákban a szabályozásra különféle tekertyűket használnak. Azt már korábban írtam, hogy - sokakkal ellentétben - én a mindenféle tekertyű helyett a WiFi/telefon képernyője használatát javasolom.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Teasüti #3437 üzenetére
Még egy megjegyzés egy amatőrtől:
Majd amikor már teljesen készen lesz a program, javasolom a globális változók használata helyett a class/objektum-ra átírást. Ugyanis ha csak egy szalagod van, akkor nem okoz gondot a globális változók használata, de ha több szalagot vezérelsz, akkor egymásnak bekavarnak. Objektum esetén viszont minden példánynak sajátjai vannak, tehát nem bántják egymáséit.Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
válasz Teasüti #3437 üzenetére
Okosat nem tudok mondani, de az egyik case-ből hiányoznak a break-ek.
Tapasztalatom szerint ez teljesen meg tudja bolondítani a programot, teljesen váratlan módon képes futni, nem csupán azt teszi, hogy ráfut a többire is.Ezt másnak is hangsúlyozom: Hiányzó break-ekre vigyázni!
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Ribi
nagyúr
Ha az i2c scanner nem ad ki eszközt, akkor mivel érdemes próbálkozni?
Kijelző elvileg jó. -
Teasüti
nagyúr
Azt hittem inkább csak megmosolyognak majd a profik.
Pedig az elképzelésim kis része valósult még csak meg.Saját megszakítás kezelő? Olyat is lehet?
Mondjuk megnézném mire mennék a megszakítások prioritási sorrendjének átrendezésével. Mondjuk feljebb rakni az adatkapcsolatot a sorban, esetleg a legtetejére a hardveres megszakítók után.[ Szerkesztve ]
-
Teasüti
nagyúr
Win10 laptop, IDE 1.6.8 -> Arduino Uno (eredeti). Hozzá a gyári usb kábele ~1,5m VAGY HC-05 BT adapter a hardveres UART-n és egy random kínai usb BT a laptopon. A helyzet mindkettő felállásban ugyanaz.
Serial monitorból szeretnék küldeni pár vezérlőbájtot az Uno-ra, mint pl. "R255G255B255" ahol a sort a "/n" zárja. A soros kimenet vagyis a Serial.print() hibátlanul működik, sose szemetel a kimenetre.
A bemenet viszont kvázi teljesen használhatatlan. Úgy két karakterig üzembiztos kb, e felett elhagyja az üzenet további részét. A new line karakter viszont úgy látszik mindig megérkezik, különben nem volna feldolgozás a programban, hisz ez a delimiter.Ötletem már nincs, átrágtam magam szinte mindenen, amit a Google kidob az "Arduino serial lost characters" szavakra, kipróbáltam már többféle megoldást is a Serial.read()-re, mások által közzétett kódokat egy az egyben emeltem át a programba. Alapvető megközelítés, hogy a pufferben elérhető bájtokat polling-gal rakom be egy tömbbe amíg megérkezik a delimiter. Ha ez megjött, akkor a tömböt pofozom formára ilyen-olyan módon : atoi() segítségével főként.
Letölthető fájl a munkámról.
A loop elején szerepel a meghívás és a loop alatt vannak a releváns függvények.Előre is köszönöm!
-
Ribi
nagyúr
válasz Janos250 #3431 üzenetére
Mondjuk ezek után nem árt még egy kevés szűrést rakni, mert eléggé tüskés amit kiadnak magukból.
Illetve a konvertereknél is igaz, hogy a cél értékhez nem szabad közel engedni a bemenő feszt, mert a konverter nem szereti és egyre nagyobb zajt nyom ki magából. Szóval ezt is legalább 6 elemmel etetném, cserébe tényleg nem lesz akkora vesztesége mint az Ardu beépített konverterének. Csak figyelni kell az elem feszt, mert ha egyszer lemerülnek akkor a konverter megintcsak megzavarodhat.
[ Szerkesztve ]
-
Janos250
őstag
válasz Teasüti #3421 üzenetére
Esetleg egy próba:
Már nem pontosan emlékszem a problémára, és nem találom az eredeti bejegyzést, de soros átvitel során elvesznek adatok.
Nekem a Serial.print okozott hasonló problémákat ott is, ahol nem lett volna szabad. Igaz, én ESP-t használtam. Ha kihagytam az ellenőrző Serial.print-eket, hiba nélkül ment. Ha a Serial.print-ek elé, után delayt raktam, általában az is megjavította. Ha gondolod, próbáld ki.
Nincs más a programban, ami a megszakításaival bekavar?Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Janos250
őstag
Én ezt használom szinte mindenre:
[link]Meg ezt:
[link]Néha ezt:
[link]Ha nagyobb teljesítmény kell, akkor ezt:
[link]Erre tervezem átállni az Arduinoknál, de még nem próbáltam ki
[link]Ezeknek a hatásfoka igen jó!
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
Ribi
nagyúr
Lenne nékem egy Leonardo illetve egy RX2004A kijelzőm.
Mind2 elvileg tudja az i2c vezérlést, csak nem igazán világos, hogy melyik libet kellene használni, hogy pontosan mik is az értékek a LiquidCrystal_I2C lcd(0x20, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE)-ban
Illetve az elején ez a 0x20 vagy 0x27 mit is jelent.
Ezt az oldalt néztem, ezzel indíthatok egy teszttel?
Van esetleg bővebb leírás mi mit jelent? -
-
Ribi
nagyúr
Tudomásom szerint ahogy írtam LOD regulátor van benne és ha az 0.6-0.8V alá esik a ki és bemenet között, akkor onnantól nem tudja ellátni feladatát és vagy csak lentebb engedi a fesz, vagy rossz esetben teljesen megzakkan. Plusz a dióda miatt is kell még 0.6V. Szóval ha 6.2V alá mész akkor kitudja mit kap a rendszer.
De a leírásában is 7-12V van a tápcsatlakozóján. Az 5V-ra meg 5Vot kell kötni és akkor megkerüli a beépített regulátorát. De annak stabilizált 5V kell lenni általában max 5% eltéréssel. Egy elem nem stabilizált, mert terheléstől függően változik a fesz.[ Szerkesztve ]
-
Ribi
nagyúr
Attól függ hova.
Legalábbis én úgy tudom az 5V-ra csak 5Vot szabad kötni, 4 elem pedig kb 6V+
Ha a tápcsatira kötöd oda pedig ugye 7V minimumot írnak, mert 0.6V dióda + másik min 0.6V LDO regulátor miatt. Szóval ez így határeset. Inkább vagy 6 elem menjen rá.
Úgy néztem a neten inkább 9V elemet szoktak rákötni.Viszont egy kérdés.
Elvileg 40mA a terhelhetősége a pineknek.
Az 5V pinnek is 40mA a terhelhetősége?
Nincs olyan ami direktbe össze van kötve mondjuk az USB csatlakozóval?
Csak 60mA kellene, de azt már nem merem rákötni, mert hátha elfárad.[ Szerkesztve ]
-
tvamos
nagyúr
válasz Teasüti #3421 üzenetére
En elso blikkre azt javasolnam, hogy menj le, amennyuire lehet. 600 baud, ha az a minimum.
Masodikra meg azt, foglald itt ossze, mirol van szo, mert en mar nem emlekszem pontosan.
- Hardware elemek: Windows PC / laptop --- Arduino Uno R3 USB kabellel osszekotve, vagy ket kinai nano 1km riaszto kabellel, ilyesmi. Esetleg egy kep.
- Ird le, mit szeretnel, mert mar arra sem emlekszem. Idojaras adatokat kuldeni, vagy Tolsztoj Háború és békejet akarod atkuldeni soronkent.
- A programodat esetleg rakd fel valahova, hogy be tudd nekunk linkelni. (Mondjuk a pastebinre.) En most kiprobalni nem fogom tudni, de azert beleolvasok... (Ami nem sokat segit, mert en nem futtatok fejben programot, meg amugy is hw tervezo vagyok, de hatha megis jon valami otlet.)Ha osszefoglalod, mit akarsz, lehet, hogy neked is lesz otleted, nekem mar tobbszor segitett, hogy valakivel beszeltem a problemarol, es osszefoglaltam, mi a gond, mit is kell megoldani.
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
Zoja™
őstag
Jó reggelt.
Csatlakoznék én is a társasághoz egy Uno R3-mal. Egyelőre a tudásom e téren konvergál a nullához, de igyekszem felfejlődni. Feliratkoztam a TavIR 60 napos tanfolyamára kezdésként, viszont annyiban iránymutatásként a segítségeteket kérném, hogy mely programnyelvbe kellene bele ásnom magam ahhoz, komolyabban is tudjak fejlődni a témában. Esetleg némi könyv és/vagy link alapú szakirodalom ajánlás is jó lenne.
Előre is köszönöm a segítségeteket.
-
Gergosz2
veterán
-
Teasüti
nagyúr
Na bakker, egy az egyben átemeltem az itt látható pufferelt bemenetet és ugyanúgy elhagyja a karaktereket, mint eddig minden megoldás.
De iszonyú nagy hibaszázalékkal, talán 5-ből csak 1 üzenet érkezik meg 100%-osan.
USB, BT tökmindegy (hardveres UART - Uno).
Általában az első kettő megjön, aztán vége szakad.
Pl. elküldöm a C255-öt és megérkezik a C2. Vagy R255G255B255 és megérkezik az R2.[ Szerkesztve ]
-
whYz
őstag
Egy ilyet ra lehet kotni az UNO-ra rele nelkul?
-
tvamos
nagyúr
válasz gyapo11 #3408 üzenetére
Oke, de akkor mar nem jo a sima, egyszeru tactile switch.
A fizika mar csak ilyen, prellezik a kapcsolo. Szoftverbol meg kell irni a filtert, oszt kesz! Akinek olyan gyorsan kell az eredmenyt, az vesz egy cortex-et, oszt tol ra egy fft-t. (Bocs, mindenre ezt szoktam a programozo kollegaimnak mondani, ha ertetlenkednek, miert ugy mukodik a hw, ahogy.)[ Szerkesztve ]
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
gyapo11
őstag
A jó öreg 7400 hogy vigyorog a rajzokon.
Merthogy lehet kondizni, de az is időzít, idő kell neki a töltődéshez és a kisüléshez is. Másrészt maga a jelzés is késik emiatt, mert a kondi feszültségének el kell érni a bemenet küszöbfeszültségét, tehát a nyomógomb megnyomása (vagy fölengedése) és a processzor általi érzékelés között lesz egy késleltetés. És nem feltétlenül csak nyomógomb lehet ott, hanem valami gyors mechanikai kontaktus, végálláskapcsoló stb.
A nand kapuk meg ns-ok alatt kapcsolnak és garantáltan egyszer, persze nem nyomógomb kell hozzá, hanem váltókapcsoló, pl. mikrokapcsoló.[ Szerkesztve ]
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
-
tvamos
nagyúr
válasz gyapo11 #3404 üzenetére
Ne is mond a mechanikai designt... vagy 200 tactile switchet mertem ki egy projecthez (kulonbozo gyartoktaol, a legjobb Japantol, a legegyszerubb "nevtelen" kinaiig,) oscilloscoppal. (Sajnos nem tudok meresi eredmenyeket megosztani, mert ceg.) Iszonyat ami ott tortenik, foleg, ha nem hatarozottan nyomod / engeded el. Persze, mit tud tenni a gyarto, ha meg 10 Ft-ot sem adsz egy darabert? Ott sporol, ahol csak tud... Nem vesznek az emberek higannyal nedvesitett erintkezoju nyomo gombokat.
Itt nagyon jo az oscilloscope snapshot. Mintha a sajat scope-om latnam...."Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
-
gyapo11
őstag
Nincs semmi, ha be kell tartanom gombnyomási hosszakat, csak szeretem, ha nem én alkalmazkodok a processzorhoz, hanem fordítva.
Csak el kell képzelni egy számológépet, ahol nem pikkpakk nyomogathatom a gombokat, hanem hosszabban, hogy bevegye a számokat, hamar földhöz vágnám.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 #3395 üzenetére
A hardware-es kevésbé, egyszerűbb programból megoldani, de akadhat eset, amikor jobb a hw-ban.
Pont az a baj, hogy csak egy nyamvadt gomb, olyan érintkező felületekkel és mechanikával, amikből következik a prell. Nem is tudom, hogy egyáltalán el lehet-e tüntetni a prellt tisztán a kapcsoló mechanikai kialakításával, arany vagy bármi más érintkező felületekkel. Elektronikával sokkal egyszerűbb. A programmal szűrés időzítést kíván, és az néha gond lehet.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
-
Teasüti
nagyúr
Uhm, van arra vkinek vmi ötlete, hogy az alábbi képlet miért ad nekem negatív számot eredményül?
int16_t = 250 * uint8_t / 255 + 2;
Ahol a bájtot 255-ről indítva végigpörgetem nulláig egy vmekkora léptetéssel és a kimeneten azt látom, hogy 252 helyett -5-ről indul a számláló és elszámol -124-ig, ami után átugrik a pozitív oldalra és 130-tól számol lefelé (ahogy a teljes tartományban kéne neki).Azt várnám, hogy 252-től számol lefelé 2-ig. Hogy a p.cs.ba lesz ebből negatív? És miért esik át a pozitív tartományra félúton?
Új hozzászólás Aktív témák
Hirdetés
- Nintendo Switch OLED 19.0.1 Dual-Boot Cfw + 128GB MicroSD + Atmosphere 1.8.0, 3 hó garival!
- XBOX ONE S 1TB, dobozában, gyári tarozékaival és 6 hó garanciával, Bp-i üzletből!
- XBOX ONE X 1TB, makulátlan szép állapotban, 6 hó teljeskörű és 1 év SW garanciával Bp-i üzletből!!
- XBOX Series X, dobozában, gyári tartozékaival, 2025.06.28.-ig gyári garancia!! Bp-i üzletből eladó!
- GIGABYTE Nvidia Geforce GTX 1080 TI Aorus
Állásajánlatok
Cég: Axon Labs Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest