-
GAMEPOD.hu
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
-
tam@s
tag
Köszönöm mindkettőtöknek, azt hiszem a kit a nyerő, remélem a banggood nem ad használhatatlan gagyit. Délutánig keresgélek, aztán megveszem valamelyik csomagot.
UNO R3 az ajánlott kezdésnek, ugye? -
robohw
aktív tag
I)gen, az UNO R3 a jó.
Aztr nem tudom, hogy a banggood miért eredeti boarddal illusztrálja, mivel te nyilván nem olyat fogsz kapni, de nincs jelentősége, mert az utángyártottak is ugyanolyan jó minőségűek, a proci, pontosabban kontroller pedig mindegyikben azonos.My own programming language: http://www.robomax.online
-
Teasüti
nagyúr
Üdv urak!
Nagy a baj.
Elkezdtem menüt faragni 1604-es karakteres lcd-re és hozzá egy utasításkezelő rutint, viszont olyan hatalmas lett (és még nincs 100% kész), hogy máris elfogyott a rom.
Nézegettem kész megoldásokat, viszont az osztálykezelés nekem kínai, így state machine-ben csináltam kézzel az összes lehetséges opciót. Nos ez zsákutca.
Kérhetnék segítséget hogy lehetne az alábbit megoldani kisebb kóddal?
Az osztályokban történő kódolás miben különbözik ettől? Azon kívül, hogy olyan bonyolult, hogy beleszagolni se tudok.
Esetleg egy iszonyú szájbarágós tutorial osztálykezelésre? Igazából még azt sem tudom mire jó ez, csak láttam, hogy ebben írtak menüket mások.Az alsó semmi extra, csak sorszámozott képernyők az LCD-n. A menu változó hivatkozik egy adott oldalra, mely tartalmat jeleníti meg. A felső funkció pedig a távirányító egy adott gombjára* (külső switch) és adott oldalra menüben (belső switch) csinál vmit: lapozás, értékadás, stb.
*pl. távirányító 1-9 számgombjai, vagy a kurzor nyilai a numerikus bill.-en vett helyei alapján 14 - balra, 16 - jobbra, 15 - OK, stb.
void menuHandler(byte button) {
if (inMenu) {
lcd_update = true;
switch (button) {
case 10:
switch (menu) {
case 81:
rtc[5] = 0;
menu++;
break;
case 82:
rtc[4] = 0;
menu++;
break;
case 83:
rtc[3] = 0;
menu++;
break;
case 84:
rtc[2] = 0;
menu++;
break;
case 85:
rtc[1] = 0;
menu++;
break;
case 86:
rtc[0] = 0;
menu = 80;
break;
case 91:
evening[3] = 0;
menu++;
break;
case 92:
evening[2] = 0;
menu++;
break;
case 93:
evening[1] = 0;
menu++;
break;
case 94:
evening[0] = 0;
menu = 90;
break;
case 101:
morning[3] = 0;
menu++;
break;
case 102:
morning[2] = 0;
menu++;
break;
case 103:
morning[1] = 0;
menu++;
break;
case 104:
morning[0] = 0;
menu = 100;
break;
}
break;
case 1:
switch (menu) {
case 81:
rtc[5] = 1;
menu++;
break;
case 82:
rtc[4] = 1;
menu++;
break;
case 83:
rtc[3] = 1;
menu++;
break;
case 84:
rtc[2] = 1;
menu++;
break;
case 85:
rtc[1] = 1;
menu++;
break;
case 86:
rtc[0] = 1;
menu = 80;
break;
case 91:
evening[3] = 0;
menu++;
break;
case 92:
evening[2] = 0;
menu++;
break;
case 93:
evening[1] = 0;
menu++;
break;
case 94:
evening[0] = 0;
menu = 90;
break;
case 101:
morning[3] = 0;
menu++;
break;
case 102:
morning[2] = 0;
menu++;
break;
case 103:
morning[1] = 0;
menu++;
break;
case 104:
morning[0] = 0;
menu = 100;
break;
}
break;
case 2:
switch (menu) {
case 81:
rtc[5] = 2;
if (rtc[4] > 3) rtc[4] = 3;
menu++;
break;
case 82:
rtc[4] = 2;
menu++;
break;
case 83:
rtc[3] = 2;
menu++;
break;
case 84:
rtc[2] = 2;
menu++;
break;
case 85:
rtc[1] = 2;
menu++;
break;
case 86:
rtc[0] = 2;
menu = 80;
break;
case 91:
evening[3] = 0;
menu++;
break;
case 92:
evening[2] = 0;
menu++;
break;
case 93:
evening[1] = 0;
menu++;
break;
case 94:
evening[0] = 0;
menu = 90;
break;
case 101:
morning[3] = 0;
menu++;
break;
case 102:
morning[2] = 0;
menu++;
break;
case 103:
morning[1] = 0;
menu++;
break;
case 104:
morning[0] = 0;
menu = 100;
break;
}
break;
case 3:
switch (menu) {
case 82:
rtc[4] = 3;
menu++;
break;
case 83:
rtc[3] = 3;
menu++;
break;
case 84:
rtc[2] = 3;
menu++;
break;
case 85:
rtc[1] = 3;
menu++;
break;
case 86:
rtc[0] = 3;
menu = 80;
break;
case 91:
evening[3] = 0;
menu++;
break;
case 92:
evening[2] = 0;
menu++;
break;
case 93:
evening[1] = 0;
menu++;
break;
case 94:
evening[0] = 0;
menu = 90;
break;
case 101:
morning[3] = 0;
menu++;
break;
case 102:
morning[2] = 0;
menu++;
break;
case 103:
morning[1] = 0;
menu++;
break;
case 104:
morning[0] = 0;
menu = 100;
break;
}
break;
case 4:
switch (menu) {
case 82:
if (rtc[5] < 2) rtc[4] = 4;
menu++;
break;
case 83:
rtc[3] = 4;
menu++;
break;
case 84:
rtc[2] = 4;
menu++;
break;
case 85:
rtc[1] = 4;
menu++;
break;
case 86:
rtc[0] = 4;
menu = 80;
break;
}
break;
case 5:
switch (menu) {
case 82:
if (rtc[5] < 2) rtc[4] = 5;
menu++;
break;
case 83:
rtc[3] = 5;
menu++;
break;
case 84:
rtc[2] = 5;
menu++;
break;
case 85:
rtc[1] = 5;
menu++;
break;
case 86:
rtc[0] = 5;
menu = 80;
break;
}
break;
case 6:
switch (menu) {
case 82:
if (rtc[5] < 2) rtc[4] = 6;
menu++;
break;
case 84:
rtc[2] = 6;
menu++;
break;
case 86:
rtc[0] = 6;
menu = 80;
break;
}
break;
case 7:
switch (menu) {
case 82:
if (rtc[5] < 2) rtc[4] = 7;
menu++;
break;
case 84:
rtc[2] = 7;
menu++;
break;
case 86:
rtc[0] = 7;
menu = 80;
break;
}
break;
case 8:
switch (menu) {
case 82:
if (rtc[5] < 2) rtc[4] = 8;
menu++;
break;
case 84:
rtc[2] = 8;
menu++;
break;
case 86:
rtc[0] = 8;
menu = 80;
break;
}
break;
case 9:
switch (menu) {
case 82:
if (rtc[5] < 2) rtc[4] = 9;
menu++;
break;
case 84:
rtc[2] = 9;
menu++;
break;
case 86:
rtc[0] = 9;
menu = 80;
break;
}
break;
case 15:
switch (menu) {
case 51:
menu = 52;
break;
case 52:
L1switch = analogRead(A1);
break;
case 53:
menu = 54;
break;
case 54:
L2switch = analogRead(A2);
break;
case 56:
L1max = 0;
L1min = 1023;
L2max = 0;
L2min = 1023;
EEPROM.put(0, L1max);
EEPROM.put(2, L1min);
EEPROM.put(10, L2max);
EEPROM.put(12, L2min);
menu = 57;
break;
default:
goto select;
break;
}
break;
case 14:
if (menu >= 20 && menu < 30) menu = 11;
else if (menu < 20) {
menu = 1;
inMenu = false;
}
if (menu >= 40 && menu < 50) menu = 12;
if (menu == 60 || menu == 61) menu = 13;
if (menu >= 70 && menu < 80) menu = 14;
if (menu > 80 && menu <= 86) {
menu--;
break;
}
if (menu > 90 && menu <= 94) {
menu--;
break;
}
switch (menu) {
case 30:
menu = 20;
EEPROM.put(4, Bmax);
break;
case 31:
menu = 21;
EEPROM.put(5, Bmin);
break;
case 32:
menu = 22;
EEPROM.put(6, standby_light);
break;
case 33:
menu = 23;
EEPROM.put(7, default_timeout);
break;
case 34:
menu = 24;
EEPROM.put(8, white);
break;
case 35:
menu = 25;
EEPROM.put(9, gamma_correction);
break;
case 50:
menu = 40;
break;
case 51:
menu = 41;
break;
case 52:
menu = 41;
EEPROM.put(14, L1switch);
break;
case 53:
menu = 42;
break;
case 54:
menu = 42;
EEPROM.put(16, L2switch);
break;
case 55:
menu = 43;
break;
case 56:
menu = 44;
break;
case 57:
menu = 44;
break;
case 64:
menu = 60;
EEPROM.put(18, lcd_light);
break;
case 63:
menu = 61;
EEPROM.put(19, lcd_maxBrightness);
break;
case 80:
setRTC();
menu = 70;
break;
case 90:
EEPROM.put(20, evening);
menu = 71;
break;
case 100:
EEPROM.put(24, morning);
menu = 72;
break;
}
break;
case 16:
select:
if (menu >= 80 && menu < 86) menu++;
if (menu >= 90 && menu < 94) menu++;
if (menu >= 100 && menu < 104) menu++;
switch (menu) {
case 9:
menu = 10;
break;
case 10:
menu = 11;
break;
case 11:
menu = 20;
break;
case 12:
menu = 40;
break;
case 13:
menu = 60;
break;
case 14:
menu = 70;
break;
case 20:
menu = 30;
break;
case 21:
menu = 31;
break;
case 22:
menu = 32;
break;
case 23:
menu = 33;
break;
case 24:
menu = 34;
break;
case 25:
menu = 35;
break;
case 40:
menu = 50;
break;
case 41:
menu = 51;
break;
case 42:
menu = 53;
break;
case 43:
menu = 55;
break;
case 44:
menu = 56;
break;
case 51:
menu = 52;
break;
case 53:
menu = 54;
break;
case 60:
menu = 64;
break;
case 61:
menu = 63;
break;
case 70:
menu = 80;
break;
case 71:
menu = 90;
break;
case 72:
menu = 100;
break;
}
break;
case 18:
if (menu > 10 && menu < 20) menu--;
if (menu >= 20 && menu <= 25) menu--;
if (menu >= 40 && menu <= 44) menu--;
if (menu == 30 && Bmax < 254) {
Bmax += 1;
if (Bmax > maxBrightness) Bmax = maxBrightness;
}
if (menu == 33 && default_timeout < 119) default_timeout++;
if (menu == 52 && L1switch < L1max) L1switch++;
if (menu == 54 && L2switch < L2max) L2switch++;
if (menu == 60 || menu == 61) menu--;
if (menu == 63 && lcd_maxBrightness < 255) lcd_maxBrightness += 5;
if (menu >= 70 && menu <= 72) menu--;
switch (menu) {
case 10:
menu = 14;
break;
case 19:
menu = 25;
break;
case 39:
menu = 44;
break;
case 31:
Bmin += 1;
if (Bmin > Bmax) Bmin = Bmax;
break;
case 32:
standby_light = true;
break;
case 34:
white = true;
break;
case 35:
gamma_correction = true;
break;
case 50:
auto_light = true;
break;
case 55:
auto_dim = true;
break;
case 59:
menu = 61;
break;
case 64:
lcd_light = true;
break;
case 69:
menu = 72;
break;
}
break;
case 12:
if (menu < 15) menu++;
if (menu >= 20 && menu <= 25) menu++;
if (menu >= 40 && menu <= 44) menu++;
if (menu == 31 && Bmin > 0) Bmin--;
if (menu == 33 && default_timeout > 10) default_timeout--;
if (menu == 52 && L1switch > L1min) L1switch--;
if (menu == 54 && L2switch > L2min) L2switch--;
if (menu == 60 || menu == 61) menu++;
if (menu == 63 && lcd_maxBrightness > 20) lcd_maxBrightness -= 5;
if (menu >= 70 && menu <= 72) menu++;
switch (menu) {
case 15:
menu = 11;
break;
case 26:
menu = 20;
break;
case 45:
menu = 40;
break;
case 30:
Bmax -= 1;
if (Bmax < Bmin) Bmax = Bmin;
break;
case 32:
standby_light = false;
break;
case 34:
white = false;
break;
case 35:
gamma_correction = false;
break;
case 50:
auto_light = false;
break;
case 55:
auto_dim = false;
break;
case 62:
menu = 60;
break;
case 64:
lcd_light = false;
break;
case 73:
menu = 70;
break;
}
break;
}
Serial.print(F("Menu: "));
Serial.println(menu);
}
}
void lcd_menu(uint16_t page) {
byte temp;
if (menu <= 80 || menu == 90 || menu == 100) {
lcd.clear();
lcd.setCursor(0, 0);
}
switch (page) {
case 0: //welcome
lcd.print(F("Stairlights v1.0"));
lcd.setCursor(0, 1);
lcd.print(F("by Istvan Kocsis"));
break;
case 1:
if (mode == 0) lcd.print(F("Standby..."));
else if (mode == 255) lcd.print(F("Adjusting..."));
else lcd.print(F("Active..."));
lcd.setCursor(0, 1);
lcd.print(F("Press OK to menu"));
break;
case 2:
if (mode == 0) lcd.print(F("Standby..."));
else if (mode == 255) lcd.print(F("Adjusting..."));
else lcd.print(F("Active..."));
lcd.setCursor(0, 1);
lcd.print(F("Press any to set"));
break;
case 3:
if (mode == 0) lcd.print(F("Standby..."));
else if (mode == 255) lcd.print(F("Adjusting..."));
else lcd.print(F("Active..."));
lcd.setCursor(0, 1);
lcd.print(F("FPS:"));
if (fps > 9) lcd.setCursor(5, 1);
else lcd.setCursor(6, 1);
lcd.print(fps);
lcd.setCursor(8, 1);
lcd.print(F("CPS:"));
lcd.print(cps);
break;
case 4:
readRTC();
lcd.print(F("Time:"));
lcd.setCursor(8, 0);
lcd.print(rtc[5]);
lcd.print(rtc[4]);
lcd.print(F(":"));
lcd.print(rtc[3]);
lcd.print(rtc[2]);
lcd.print(F(":"));
lcd.print(rtc[1]);
lcd.print(rtc[0]);
lcd.setCursor(0, 1);
lcd.print(F("FPS:"));
if (fps > 9) lcd.setCursor(5, 1);
else lcd.setCursor(6, 1);
lcd.print(fps);
lcd.setCursor(8, 1);
lcd.print(F("CPS:"));
lcd.print(cps);
break;
case 9: //inMenu
lcd.write(byte(2));
lcd.setCursor(2, 0);
lcd.print(F("to scroll"));
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.setCursor(1, 1);
lcd.print(F(" to go back"));
break;
case 10: //inMenu
lcd.write(byte(1));
lcd.setCursor(2, 0);
lcd.print(F("or OK"));
lcd.setCursor(0, 1);
lcd.print(F("to select"));
break;
case 11: //LED settings
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("settings"));
break;
case 12: //Sensor settings
lcd.write(byte(3));
lcd.setCursor(2, 0);
lcd.print(F("Ambient light"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.print(F("sensor settings"));
break;
case 13: //LCD settings
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Display"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("settings"));
break;
case 14: //time settings
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Date/Time"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("setting"));
break;
case 20: //LED submenu
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED max"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("brightness"));
break;
case 21: //LED submenu
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED min"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("brightness"));
break;
case 22: //LED submenu
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED standby"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("running light"));
break;
case 23: //LED submenu
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("timeout"));
break;
case 24: //LED submenu
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED color"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("set"));
break;
case 25: //LED gamma
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LED gamma"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("correction"));
break;
case 30: //LED max brightness
lcd.print(F("Max brightness:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
lcd.print(Bmax);
break;
case 31: //LED min brightness
lcd.print(F("Min brightness:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
lcd.print(Bmin);
break;
case 32: //LED standby
lcd.print(F("Standby light:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
if (standby_light) lcd.print(F("ON"));
else lcd.print(F("OFF"));
break;
case 33: //LED timeout
lcd.print(F("LED timeout:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
lcd.print(default_timeout);
lcd.print(F(" sec"));
break;
case 34: //LED color
lcd.print(F("Default mode:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
if (white) lcd.print(F("White"));
else lcd.print(F("Color"));
break;
case 35: //LED gamma
lcd.print(F("Correction:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
if (gamma_correction) lcd.print(F("ON"));
else lcd.print(F("OFF"));
break;
case 40: //Sensor auto light
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Ambient light"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("activating"));
break;
case 41: //Sensor adjust
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Primary light"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("sensor"));
break;
case 42: //Sensor adjust
lcd.write(byte(3));
lcd.setCursor(1, 0);
lcd.print(F("Secondary light"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("sensor"));
break;
case 43:
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Auto dimming"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("in the dark"));
break;
case 44: //Sensor calibration
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Light sensor"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("recalibration"));
break;
case 50:
lcd.print(F("Only in dark?"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
if (auto_light) lcd.print(F("Auto ON"));
else lcd.print(F("Always ACTIVE"));
break;
case 51:
lcd.print(F("OK: read sensor"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(1, 1);
lcd.print(F(": to adjust"));
break;
case 52:
temp = map(L1switch, L1min, L1max, 0, 100);
lcd.print(F("Sensitivity:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
if (L1switch > 99) lcd.setCursor(2, 1);
else if (L1switch > 9) lcd.setCursor(3, 1);
else lcd.setCursor(4, 1);
lcd.print(L1switch);
if (temp < 10 ) lcd.setCursor(7, 1);
else lcd.setCursor(6, 1);
lcd.print(temp);
lcd.print(F("% of max"));
break;
case 53:
lcd.print(F("OK: read sensor"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(1, 1);
lcd.print(F(": to adjust"));
break;
case 54:
temp = map(L2switch, L2min, L2max, 0, 100);
lcd.print(F("Sensitivity:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
if (L2switch > 99) lcd.setCursor(2, 1);
else if (L2switch > 9) lcd.setCursor(3, 1);
else lcd.setCursor(4, 1);
lcd.print(L2switch);
if (temp < 10 ) lcd.setCursor(7, 1);
else lcd.setCursor(6, 1);
lcd.print(temp);
lcd.print(F("% of max"));
break;
case 55:
lcd.write(byte(2));
lcd.setCursor(2, 0);
lcd.print(F("Auto dimming"));
lcd.setCursor(0, 1);
if (auto_dim) lcd.print(F("ON: dim in dark"));
else lcd.print(F("OFF: full power"));
break;
case 56:
lcd.print(F("OK to reset"));
lcd.setCursor(0, 1);
lcd.print(F("stored values?"));
break;
case 57:
lcd.print(F("Calibration data"));
lcd.setCursor(0, 1);
lcd.print(F("cleared!"));
break;
case 60:
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LCD backlight"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("mode"));
break;
case 61:
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("LCD"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("brightness"));
break;
case 63:
lcd.print(F("Brightness:"));
lcd.setCursor(0, 1);
lcd.write(byte(2));
lcd.setCursor(2, 1);
lcd.print(lcd_maxBrightness);
break;
case 64:
lcd.write(byte(2));
lcd.setCursor(2, 0);
lcd.print(F("Auto dimming"));
lcd.setCursor(0, 1);
if (lcd_light) lcd.print(F("Always ON"));
else lcd.print(F("Auto OFF"));
break;
case 70:
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Set time"));
lcd.setCursor(0, 1);
lcd.write(byte(4));;
break;
case 71:
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Set start of"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("night mode"));
break;
case 72:
lcd.write(byte(3));
lcd.setCursor(3, 0);
lcd.print(F("Set end of"));
lcd.setCursor(0, 1);
lcd.write(byte(4));
lcd.setCursor(3, 1);
lcd.print(F("night mode"));
break;
case 80:
lcd.print(F("Time:"));
lcd.setCursor(8, 0);
lcd.print(rtc[5]);
lcd.print(rtc[4]);
lcd.print(F(":"));
lcd.print(rtc[3]);
lcd.print(rtc[2]);
lcd.print(F(":"));
lcd.print(rtc[1]);
lcd.print(rtc[0]);
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.write(byte(1));
break;
case 81:
lcd.setCursor(8, 0);
lcd.print(F("_"));
lcd.print(rtc[4]);
break;
case 82:
lcd.setCursor(8, 0);
lcd.print(rtc[5]);
lcd.print(F("_"));
lcd.print(F(":"));
lcd.print(rtc[3]);
break;
case 83:
lcd.setCursor(9, 0);
lcd.print(rtc[4]);
lcd.print(F(":"));
lcd.print(F("_"));
lcd.print(rtc[2]);
break;
case 84:
lcd.setCursor(11, 0);
lcd.print(rtc[3]);
lcd.print(F("_"));
lcd.print(F(":"));
lcd.print(rtc[1]);
break;
case 85:
lcd.setCursor(12, 0);
lcd.print(rtc[2]);
lcd.print(F(":"));
lcd.print(F("_"));
lcd.print(rtc[0]);
break;
case 86:
lcd.setCursor(14, 0);
lcd.print(rtc[1]);
lcd.print(F("_"));
break;
case 90:
lcd.print(F("Evening starts at"));
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.setCursor(7, 1);
lcd.print(evening[3]);
lcd.print(evening[2]);
lcd.print(F(":"));
lcd.print(evening[1]);
lcd.print(evening[0]);
break;
case 91:
lcd.setCursor(7, 1);
lcd.print(F("_"));
lcd.print(evening[2]);
break;
case 92:
lcd.setCursor(7, 1);
lcd.print(evening[3]);
lcd.print(F("_"));
lcd.print(F(":"));
lcd.print(evening[1]);
break;
case 93:
lcd.setCursor(8, 1);
lcd.print(evening[2]);
lcd.print(F(":"));
lcd.print(F("_"));
lcd.print(evening[0]);
break;
case 94:
lcd.setCursor(10, 1);
lcd.print(evening[1]);
lcd.print(F("_"));
break;
case 100:
lcd.print(F("Morning starts at"));
lcd.setCursor(0, 1);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.setCursor(7, 1);
lcd.print(morning[3]);
lcd.print(morning[2]);
lcd.print(F(":"));
lcd.print(morning[1]);
lcd.print(morning[0]);
break;
case 101:
lcd.setCursor(7, 1);
lcd.print(F("_"));
lcd.print(morning[2]);
break;
case 102:
lcd.setCursor(7, 1);
lcd.print(morning[3]);
lcd.print(F("_"));
lcd.print(F(":"));
lcd.print(morning[1]);
break;
case 103:
lcd.setCursor(8, 1);
lcd.print(morning[2]);
lcd.print(F(":"));
lcd.print(F("_"));
lcd.print(morning[0]);
break;
case 104:
lcd.setCursor(10, 1);
lcd.print(morning[1]);
lcd.print(F("_"));
break;
}
}[ Szerkesztve ]
-
Teasüti
nagyúr
SD-re? Ennyi erővel be lehetne vetni külső ROM-ot is, na de hogy veszem rá arra az AVR-t, hogy külső tárhelyre töltse fel az IDE a kódot és onnan futtassa a programot?
VAGY megtanulok programozni, ha ez az osztálykezelés ennél hatékonyabban el tudja végezni mindezt.
Na meg mások vígan menüznek Atmel328-as procikon az enyémnél bonyolultabbnak tűnő projektekben, így szerintem én csinálok vmit rosszul.[ Szerkesztve ]
-
nagyúr
Ma elklezdtem én is bóhockodni az ardu-val, egyelőre abszolút kezdőként RGB ledes móka már megvolt, a kérdésem az lenne, hogy ezt a buzzlert hogyan kell bekötni? A neten annyit találtam, hogy az egyik lábát az 5V-ra, másikat testre, harmadikat pwn-re kell kötni, de melyiket melyikre? A gnd az egyértelmű.
-
Pubszon
veterán
Megjött ma a 3 Digispark ATTiny85 board.
Tesztelgetem, eddig nagyon jó és nagyon pici.ASRock X79 Extreme6, i7 4930K, 32GB DDR3, GTX 1080 G1, Corsair RM750x...
-
zka67
őstag
válasz Teasüti #4158 üzenetére
Szia, kód feltöltésére ott van pl. a http://data.hu/
A kódodhoz pedig annyit tudok hozzátenni, hogy optimalizálni kell. Nem néztem ugyan teljesen végig, de látszik belőle, hogy ugyan azokat a dolgokat írod le ezerszer, és ezeket ezerszer beleteszi a fordító a programodba.
A helyedben én táblázat alapján kezdenék neki, amit persze nem most fogok kitalálni neked, csak mint egy lehetőséget mondok. Ez a case ... case felejtős. Ahogy azért belenéztem, van morning, rtc stb.. tömböd, amiknek ugyan azokat az elemeit változtatod más más menükben. Ezeket lehetne egy két indexű tömbben tárolni, és nem case-vel, hanem if-fel és a gombok számából számolt indexxel dolgozni, vagy a gombok számát egy tömb alapján konvertálni indexszé, és a végén ha kell, elég egyszer is beletenni pl. a menu++ -t.
-
szaszyka
senior tag
-
Teasüti
nagyúr
Kivágtam, ami nem létszükséglet (távirányító gombjait 0..9 közt), befejeztem minden mást és hivatalosan is elkészültnek tekinthető a v1.0.
Ezt igencsak ki kellett centiznem. A program kereken 30720 bájtot foglal a rom-ban...
...a rendelkezésre álló 30720 bájtból!!(#4162) zka67
Nem mondom, hogy ebből mindent értek, viszont volna egy kérdésem.
A switch nem hatékonyabb kód, mint az if?
Nem arra lett kitalálva, hogy 110 db if helyett legyen inkább 110 db switch case?[ Szerkesztve ]
-
szaszyka
senior tag
Közben érdeklődnék én is. Adott a képen egy képlet. A dht1, és dht2 azok mért értékek, a pwm 1 pedig előre definiált. Egy ilyen viszonylag bonyolultabb képletet /számolást le lehet - e programozni arduinora, esetleg milyen paranccsal próbálkozzak, illetve az arduino mega képes ilyen számítási kapacitásra úgy, hogy kétszer lenne a képlet a programban. Nem bonyolult ez már neki? A mérések 2db páramérővel történik, 1db pwm jel meghatározása miatt. A segítséget előre is köszönöm, ha valakinek van tippje, milyen parancsot használjakLenovo Thinkpad X220 :D
-
zka67
őstag
válasz Teasüti #4167 üzenetére
Szia, nem minden esetben:
Ilyesmire gondoltam első lépésben, szerintem ez kisebb kódot generál:
if (menu >= 80) {
if (menu <= 86) {
rtc[86-menu] = 0;
if (++menu > 86) menu = 80;
} else
if (menu <= 94) {
evening[94-menu] = 0;
if (++menu > 94) menu = 90;
} else
if (menu <= 104) {
morning[104-menu] = 0;
if (++menu > 104) menu = 100;
}
// ehelyett
case 81:
rtc[5] = 0;
menu++;
break;
case 82:
rtc[4] = 0;
menu++;
break;
case 83:
rtc[3] = 0;
menu++;
break;
case 84:
rtc[2] = 0;
menu++;
break;
case 85:
rtc[1] = 0;
menu++;
break;
case 86:
rtc[0] = 0;
menu = 80;
break;
case 91:
evening[3] = 0;
menu++;
break;
case 92:
evening[2] = 0;
menu++;
break;
case 93:
evening[1] = 0;
menu++;
break;
case 94:
evening[0] = 0;
menu = 90;
break;
case 101:
morning[3] = 0;
menu++;
break;
case 102:
morning[2] = 0;
menu++;
break;
case 103:
morning[1] = 0;
menu++;
break;
case 104:
morning[0] = 0;
menu = 100;
break; -
szaszyka
senior tag
Ne bassz. Hülyéskedsz? Ennyi az egész? A programban beirom ezt a képletet a pwm száma helyére, és kész? Semmi tömbözés, hókusz pókusz, csak berakom, és le is kezeli? azt hittem sokkal bonyolultabb, mindenféle parancsok kellenek majd. Köszönöm a segítséget
Lenovo Thinkpad X220 :D
-
nagyúr
válasz szaszyka #4172 üzenetére
Azért arra figyelj, hogy a SZ.P helyett olyan változó nevet használj, amiben nincs pont (pl SZ_P), és persze előtte deklaráld a változókat (nem tudom mennyire vágod a témát). Ja, a pwm kitöltöttség természetesen 1 és 255 közt megadható, szóval a kapott százalékot (1-100) szorozd meg 2.55-tel.
[ Szerkesztve ]
-
szaszyka
senior tag
Az sz. P csak nekem jelzés, az csak egy tört lesz (1023-dht1 mérési eredmény). Nem feltétlenül akarom külön elnevezni. Abszolút járatlan vagyok a programozásban, ez lesz az első, és talán utolsó ilyen projektem. Folyamatábrát még tudok csinálni esetleg, illetve logikailag megvalósítani a programot, hogyan működhetne, de a kódolásról azt sem tudom eszik-e, vagy isszák. De azért igyekszem. Deklarálás alatt a definiálást érted?. Azt hittem a pwm is 0-1023, mint az analóg jel, de akkor 255-ig számolok majd. Köszönöm a tájékoztatást
[ Szerkesztve ]
Lenovo Thinkpad X220 :D
-
Teasüti
nagyúr
WOW!
MÁS
Uhm nem emlékszem rá, hogyan is kell két integer-be konvertált idővel számolni?
Mondjuk ki akarom vonni a 915-ből (9 óra 15 perc) a 845-öt. És 30 percet kéne eredményül kapnom.
Tudnom kéne nem csak azt, hogy egy adott időpont elérkezett, hanem azt is, hogy mennyi idő telt el azóta.
Kérhetnék erre tippet?Ok, percekben kell számolni, nem órában és percben. De buta vagyok.
[ Szerkesztve ]
-
nagyúr
Szeretnék csinálni egy ehhez hasonló bankkártyaemulátort, Gazdálkodj okosan-hoz. De nem tudok dönteni, hogy hogy oldjam meg a kártyaolvasót. Először régi telefonkártya + chipkártyaolvasót akartam, de nem találok hozzá semmi segítséget, leírást, meg kéne hardver is hozzá, de ez volna a legjobb, ha meg tudnám csinálni valahogy. Valakinek vmi használható ötlete ehelyett? A leghasználhatóbb ötletem talán a lyukkártya + résopto, de a lyukas kártya nem a legelegánsabb. Gondoltam még vmi nyák-os megoldáson (mint egy régi játék-cartridge), de ahhoz meg vmi csatlakozó kéne ami bírja a gyűrődést. Ez utóbbi kettőnél az adattárolást az arduinoval kellene megoldani.
-
nagyúr
Nem rossz, de drágállom. Meg kéne hozzá rfid-s kártya vagy tag. Mondjuk lehetne használni vele a saját (igazi) bankkártyám, az vagány lenne...
De a banki adatokat így se tudnám a kártyán tárolni, pedig az praktikus lenne. (Vagy helyette tároljam eeprom-ban? Az hányszor írható?) -
FireKeeper
nagyúr
esetleg ugyanez csak 125kHz-en? a protokoll még egyszerűbb. ennél olcsóbban amúgy sem hinném hogy bárhogy megúsznád ezt.
steam, GOG, uPlay: @petermadach || HotS: PeterMadach#2675 || Xperia 10 V || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill
-
nagyúr
válasz FireKeeper #4180 üzenetére
Igazából egyre jobban tetszik az ötlet. De mi a különbség a kettő közt?
-
fpeter84
senior tag
Sziasztok ismét!
Segítsetek rajtam plz, bajban vagyok egy STM32F103C8T6 kínai minimal board-al...
"deszkamodell" formájában jól működött a kapcsolásom - bár akkor még más PB lábakat használtam kimenetnek, és tették is a dolgukat ahogy kell. Aztán terveztem egy saját nyákot alá, ahol célszerű volt az adott lábakat másikakra cserélni, így most a PA11, PA12, PA15-nek kellene vezérelnie egy külső eszközt (ki/bekapcs, reset, int), de meg se mozdulnak, hiába kapcsolom őket OUTPUT-ra és változtatom az értéküket... A végén visszanyúltam a "hello world" LED villogtatásig, hátha valami részegységet incializálik ami lefogja ezeket a lábakat a háttérben, de erről sincsen szó, már ez a kapcsolás sem képes a fenti PA lábakat megmozdítani
#define LED PC13
#define gprs_rst PA11
#define gprs_pwr PA12
#define gprs_int PA15
void setup() {
pinMode(LED, OUTPUT);
pinMode(gprs_rst, OUTPUT);
pinMode(gprs_pwr, OUTPUT);
pinMode(gprs_int, OUTPUT);
}
void loop() {
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(gprs_rst, HIGH);
digitalWrite(gprs_pwr, HIGH);
digitalWrite(gprs_int, HIGH);
delay(1000); // wait for a second
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
digitalWrite(gprs_rst, LOW);
digitalWrite(gprs_pwr, LOW);
digitalWrite(gprs_int, LOW);
delay(1000); // wait for a second
}Próbáltam turkálni a doksiját a procinak, és ami feltűnt, hogy a PA11, PA12-n az USB is, de elvileg a "main function after reset" az a GPIO módjuk lenne. A PA15 pedig a JTAG sor része, és a GPIO csak alternatív funckió. Tovább puhatolóztam, és kiderült hogy a szintén JTAG-hoz társított PB3 és PB4 is döglöttnek mutatja magát, és a legközelebbi 3-as amit szépen kapcsolgat a fenti példaprogram az a PB5, PB6, PB7...
Hiányzik valami lépés amitől GPIO módba váltanak ezek a lábak? A nyák már készen van, nem szívesen kezdenék "léggányolásba" ha szoftverből is helyrebillenthető a dolog...
-
zka67
őstag
válasz fpeter84 #4183 üzenetére
Szia, először is, a JTAG portok letilthatóak, de csak óvatosan vele. Nem ismerem a boardodat, a chipet viszont igen. Ha a boardod az SWDIO/SWCLK pineken programozza a chipet, a letiltás után nem fogod tudni újraírni. Meg lehet oldani, kell hozzá egy ST-LINK V2 programozó, és az STM32 ST-LINK Utility nevű program, amivel a Connect Under Reset módban tudod ekkor programozni a chipet, vagy legalább törölni.
Szóval: az STM32F103C8T6 Refenence Maunal 184. oldalán megtalálod a 9.4.2 AF remap and debug I/O configuration register (AFIO_MAPR) leírását, ezzel tudod letiltani a JTAG pineket.
Kap-e órajelet a GPIOA portod? Ezt a 112. oldalon található 7.3.7 APB2 peripheral clock enable register (RCC_APB2ENR)-ben tudod engedélyezni. Ne felejtsd el, hogy minden perifériának engedélyezni kell az órajelét mielőtt elkezded használni.
Ha bármi kérdésed van, szívesen segítek, elég jól ismerem az ST chipjeit
Viszont én a Keil uVisiont használom, nem az arduinot, ezért nem is tudom, hogy mit csinál pl. egy pinMode, amikor ezer féle beállítása lehet egy pinnek, még output módban is négy különböző.Lehet, hogy open-drain módban vannak a pinek, ezért nem világitanak a ledjed. Le kellene szokni a pin és a GND közé kötött ledekről, és áttérni a pin és a Vdd közé kötésre.
A Keil uVision ARM 32kb kódig ingyenesen használható, ST-LINK V2 adapterrel (~800Ft) nagyon jól lehet futásidőben is debuggolni vele.
-
nagyúr
Megint jött egy rakat mütyűr aliról, végre lehet mókázni
Vettem ilyen próbapadot, de még sosem használtam ilyesmit. Valaki el tudja magyarázni tömören, hogy ez pontosan hogyan működik?
-
nagyúr
válasz FireKeeper #4186 üzenetére
Igen Nem teljesen tiszta a használata.
-
FireKeeper
nagyúr
az alsó és felső sávban vízszintesen vannak összekötve a pontok (tehát a sorok), közötte pedig függőlegesen (tehát az oszlopok), de úgy hogy középen ketté van vágva, szóval nem a teljes oszlop van összekötve csak külön az alsó és felső része. középen a rés pont akkora, hogy egy DIP foglalatos IC-t bele tudsz szúrni, amúgy meg a pontok egy raszter távolságra vannak, szóval a legtöbb furatszerelt dolgot egyszerűen bele tudod szúrni.
steam, GOG, uPlay: @petermadach || HotS: PeterMadach#2675 || Xperia 10 V || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill
-
nagyúr
válasz FireKeeper #4188 üzenetére
Köszönöm, kipróbálgattam és működik
-
Bazs87
tag
Sziasztok!
Légminőség mérőt szeretnék építeni. Érdekes módon a készen kapható cuccok olcsóbbak, mint ha csak a szenzort szeretném megvenni. Ez vajon miért lehet?
Stabil CO2 szenzor érdekelne elsősorban, továbbá minden egyéb amit teszteltetek és ajánlotok a témához kapcsolódóan. (pl CO)A CO2 szenzorok témakörében már gugliztam pár kört, de sajnos mindig odáig jutottam, hogy egy min. 15ezres szenzor és mégsem tudja azt a fórumok szerint amire ki van találva.
Tapasztalatok érdekelnének.
Köszi!
Bazs87[ Szerkesztve ]
-
Janos250
őstag
válasz fpeter84 #4183 üzenetére
Kipróbáltam, és nekem ez a példaprogram ugyanezen a panelon mind a ledet, mind a 3 lábat megfelelően mozgatja. Próbáld ki, hogy a NYÁKból kivéve se mozognak a lábak? Jól állítottad be a panel típusát?
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
nagyúr
Mi a hiba a következő összeállításban? Valamiért gombnyomás nélkül is villog a led
int led = 13;
int button = 4;
boolean buttonOn = false;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT);
}
void loop() {
if (digitalRead(button) == HIGH) {
buttonOn = !buttonOn;
}
if (buttonOn) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
} -
Teasüti
nagyúr
Nincs felhúzó ellenállásod. Próbáld ki ezt:
pinMode(button, INPUT_PULLUP)
!
Valamint ugyan elektronikában analfabéta vagyok, de mitől lenne a jelenlegi felállásban HIGH, ha földre húzod a gombbal és alapból nincs felhúzva? Azon kívül, hogy nyitott áramkörnél lebeg a port és néha lehet pont átesik HIGH-ra. Vagyis, ha a lenyomást akarod vizsgálni, akkor az LOW lesz a gombnyomásra.[ Szerkesztve ]
-
FireKeeper
nagyúr
mert ez inkább elektronikai dolog mint. ha van egy bemeneted arra ugye kerül mindenféle zaj, és van hogy ezért rossz értéket olvasol be róla ha csak úgy lebegve vizsgálod. az arduinoban legalább annyi hardveres apróság van (ha nem több) mint progos
steam, GOG, uPlay: @petermadach || HotS: PeterMadach#2675 || Xperia 10 V || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill
-
nagyúr
válasz FireKeeper #4195 üzenetére
Na hat igen, itt jon ki hogy elektronikabol nulla vagyok.
Tehat akkor osszefoglalva, a led osszeszed valami zajt, ezert villog?
A pinMode(button, INPUT_PULLUP) parancs, tehat az input_pullup, pontosan mit is csinal a gombommal?
-
fpeter84
senior tag
STLink-em van, azzal programozom. Próbáltam soroson is, de meguntam a macerát hogy ide-oda kell tenni a jumpereket és vettem hozzá programozót.
Azthiszem Janos250 #4191 és a Te hsz-ed rávilágít a problémámra: ha az IDE-ben a programozási módot sorosra tesszük, akkor letiltja a JTAG-ot valamint az USB-t és GPIO módba kerülnek a lábai. Ha viszont az STLink módot választjuk, akkor az összes JTAG-hoz köthető lábat elkapcsolja a GPIO módról (azt is amit egyébként nem használ a programozó), valamint itt találtam rá utalást hogy ekkor az USB-t is inicializálja valamennyire akkor is ha én nem teszem meg a programomban, így azok a lábak is átállítódnak. A futó programból regisztereket kapcsolgatva valószínűleg helyre lehetne tenni - elvileg ahogy nézem, a JTAG szabad lábait egyesével is vissza lehetne állítani, így talán működne az STLink és, meg a GPIO-k is. De végül nem húzhattam már az időt, átdrótoztam a PB5-6-7-re a vezérlést, így működik, tudok haladni.
Mindenesetre jó tanulság, hogy nyákgyártás előtt próbapados szakaszban alaposabban kell tesztelni a konkrét lábakat, és nem cserélgetni utólag a funkciókat
Amikor megjött az STLink, akkor ugyan felraktam a Keil-t mert kíváncsi voltam a realtime belső debugra, de valahogy nem kapott el a gépszíj - már túlzottan hozzászoktam ahhoz hogy megoldom a debugot sorosporton... A jövőben lehet adok még neki esélyt, de egyelőre az Arduino IDE hatalmas támogatottsága nagy előny, és haladnom kell a projektekkel, nem tölthetek időt azzal hogy még a környezettel is ismerkednem kelljen...
Néhánnyal lejjebb volt egy sleepmode-al kapcsolatos kérdésem - esetleg abban van tapasztalatod? Miért van az, hogy az összes példaprogram/library kizárja a loop-ot, a setup végén meghívja az alvást, és trigger esetén mindig újraindul a program. Olyat nem is tud, vagy csak nem találtam még, hogy onnan folytatódik a program ahol fel lett függesztve?
Az eddigieket köszönöm, a jövőben talán segít elkerülni az ilyen fél napos szívásokat
[ Szerkesztve ]
-
Janos250
őstag
válasz fpeter84 #4197 üzenetére
STLink-el nem próbáltam, de ma nemigen érek rá, de kíváncsiságból majd azért megnézem. A legegyszerűbb - szerintem - ilyen esetben arduinon a megfelelő regisztereket (pl. amit fpeter javasolt) kiíratni
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
-
nagyúr
A javaslatotokra átírtam erre a kódot:
int led = 13;
int button = 4;
boolean buttonOn = false;
void setup() {
pinMode(led, OUTPUT);
pinMode(button, INPUT_PULLUP);
}
void loop() {
if (digitalRead(button) == LOW) {
buttonOn = !buttonOn;
}
if (buttonOn) {
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}viszont most sem jó. Már nem villog, viszont véletlenszerűen kapcsolódik fel-le gombnyomáskor. Tehát megnyomom vagy felkapcsol vagy nem, 2., 3. alkalomra felkapcsol, majd megnyomom lehet lekapcsol, lehet égve marad. Szóval tök random még mindig
-
Tankblock
aktív tag
Hello
Timert tegyél hozzá. mert így looponként fogsz váltani.
unsigned long timer = 0;
az if feltételét egészítsd ki millis()-timer > X ahol X lehet játszani
az ifben meg timer = millis();
így a változás csak X enként van követve.
Szerk: Annyire nem is volt rossz az ötletem : [link]
[ Szerkesztve ]
Release the Beast....
Új hozzászólás Aktív témák
- Linux felhasználók OFF topikja
- A fociról könnyedén, egy baráti társaságban
- Dell notebook topic
- (nem csak) AMD FX / Ryzen tulajok OFF topikja
- Eredeti játékok OFF topik
- Modern monitorokra köthető 3dfx Voodoo kártya a fészerből
- Rezsicsökkentés, spórolás (fűtés, szigetelés, stb.)
- iRacing.com - a legélethűbb -online- autós szimulátor bajnokság
- Milyen billentyűzetet vegyek?
- Fujifilm X
- További aktív témák...
- Újszerű - ASROCK B450 Fatal1ty Gaming K4 AMD AM4 alaplap + Windows 10/11 HOME digitális licensz
- Újszerű - ASROCK B450 Pro4 AMD AM4 dobozos alaplap
- HP Elitedesk 800 G4 DM I5-8500T 16GB 256GB SSD (1 USB sérült, de működik)
- Dell 7060 Micro I5-8500T 8GB 500 GB SSD WIFI
- DELL LATITUDE 7390 I5-8250U/8GB/256GB SSD/1920X1080