Hirdetés

Ú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?

  • tboy93

    nagyúr

    válasz robohw #4150 üzenetére

    3k-ból ideér a pakk, csak sok kis csomagban, nekem megérte ezt a "kényelmetlenséget" az ár differencia :)

    [ Szerkesztve ]

  • robohw

    aktív tag

    válasz tam@s #4151 üzenetére

    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. :O
    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. :B
    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

    válasz tboy93 #4155 üzenetére

    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. :O
    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 ]

  • robohw

    aktív tag

    válasz Teasüti #4154 üzenetére

    Hogy jutott eszedbe ezt a 30 kilométer hosszú kódot betenni ide? :W

    My own programming language: http://www.robomax.online

  • Teasüti

    nagyúr

    válasz robohw #4157 üzenetére

    Mea culpa.
    Azért megpróbáltam megkeresni a topikban ki milyen oldalt ajánlott korábban kód megosztásra, de nem jártam sikerrel. :R

  • tboy93

    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? :F 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...

  • szaszyka

    senior tag

    válasz tboy93 #4159 üzenetére

    Gnd körül van az 5V-os csati is, oda az 5V, a pwm pedig az egyik digitális láb, amelyik "~" - al van jelölve. Elvileg.

    Lenovo Thinkpad X220 :D

  • 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.

  • FireKeeper

    nagyúr

    válasz Teasüti #4158 üzenetére

    github?

    steam, GOG, uPlay: @petermadach || HotS: PeterMadach#2675 || Xperia 10 IV || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill

  • szaszyka

    senior tag

    válasz tboy93 #4164 üzenetére

    Csak nem, 5V nem hinném, hogy nagy gondot okozna. Én is kezdő vagyok a témában, de mindenhol így kötik, vagy külső tápra. Uno-n pedig ha jól tudom a digitális csatlakozóknál a hullámvonallal jelölt a pwm-et tudó láb. Ha rossz lesz, nem én voltam :D

    Lenovo Thinkpad X220 :D

  • bardi

    aktív tag

    válasz Gergosz2 #4146 üzenetére

    Köszönöm, az kár, 12 bit jó lenne játékvezérlőhöz. Elég lenne a 10 bit, de a potmétert nem tudom úgy megcsinálni, hogy 90 foknál többet forogjon, ahhoz valami fogaskerekes megoldás kéne.

    '92 Honda VFR 750

  • 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!! :Y

    (#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áljak :R

    Lenovo Thinkpad X220 :D

  • Aryes

    nagyúr

    válasz szaszyka #4169 üzenetére

    Úgy történik, hogy a képletet copy-paste módszerrel átmásolod az arduino programba, megfelelően definiálod a változókat és a többit rábízod a fordítóra. :)

  • 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

    válasz Aryes #4170 üzenetére

    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? :O azt hittem sokkal bonyolultabb, mindenféle parancsok kellenek majd. Köszönöm a segítséget :R :)

    Lenovo Thinkpad X220 :D

  • Aryes

    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

    válasz Aryes #4173 üzenetére

    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 :R

    [ Szerkesztve ]

    Lenovo Thinkpad X220 :D

  • Aryes

    nagyúr

    válasz szaszyka #4174 üzenetére

    Kb annyi kell, hogy megnézed az arduino oldalán a dokumentációban a pwm példaprogramot, és belemásolod a kódot. Én nagyjából az összes programomat így írom, öregszem és nem bírok már annyi kódot fejben tartani. :)

    [ Szerkesztve ]

  • Teasüti

    nagyúr

    válasz zka67 #4171 üzenetére

    WOW! :R

    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? :R

    Ok, percekben kell számolni, nem órában és percben. De buta vagyok. :W

    [ Szerkesztve ]

  • Aryes

    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. :DDD 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.

  • Aryes

    nagyúr

    válasz Pulsar #4178 üzenetére

    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

    válasz Aryes #4179 üzenetére

    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 IV || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill

  • FireKeeper

    nagyúr

    válasz Aryes #4181 üzenetére

    más frekin működnek, más a protokoll, más a tárolható cucc mennyisége a kártyákon.

    steam, GOG, uPlay: @petermadach || HotS: PeterMadach#2675 || Xperia 10 IV || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill

  • 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 :F

    #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.

  • tboy93

    nagyúr

    Megint jött egy rakat mütyűr aliról, végre lehet mókázni :C

    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?

  • FireKeeper

    nagyúr

    válasz tboy93 #4185 üzenetére

    ilyesmire gondolsz?

    steam, GOG, uPlay: @petermadach || HotS: PeterMadach#2675 || Xperia 10 IV || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill

  • FireKeeper

    nagyúr

    válasz tboy93 #4187 üzenetére

    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 IV || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill

  • 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.

  • tboy93

    nagyúr

    Mi a hiba a következő összeállításban? Valamiért gombnyomás nélkül is villog a led :F

    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

    válasz tboy93 #4192 üzenetére

    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 ]

  • tboy93

    nagyúr

    válasz Teasüti #4193 üzenetére

    Tyu. A celom az volt, hogy gombnyomasra kapcsoljon ki, majd kovetkezo nyomasra kapcsoljon be. Ez a felhuzo ellenallas nekem uj, a peldakodban nem szerepelt :B

    [ Szerkesztve ]

  • FireKeeper

    nagyúr

    válasz tboy93 #4194 üzenetére

    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 IV || Ultrawide & SFF masterrace || Unofficial and unpaid VXE R1 shill

  • tboy93

    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

    válasz zka67 #4184 üzenetére

    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.

  • tboy93

    nagyúr

    válasz tboy93 #4192 üzenetére

    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 :D

  • Tankblock

    aktív tag

    válasz tboy93 #4199 üzenetére

    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