Keresés

Új hozzászólás Aktív témák

  • lanszelot

    addikt

    válasz lanszelot #19848 üzenetére

    Hello,
    Össze raktam a gáz érzékelőt és a hőmérőt.
    Jelenleg mind a kettő a kis kijelzőn külön sorban mutatja az értéket.
    Gondoltam ha tennék be egy gombot hogy vállthassak a
    - ket értek együtt
    - csak hőmérő értéke
    - csak gáz érzékelő értéke
    Között.
    Function -ba kell raknom a kijelző megjelenítéseket és gomb nyomásra más más function -t futtassak?
    Vagy hogy szokás megoldani?

  • lanszelot

    addikt

    válasz lanszelot #19848 üzenetére

    Hello,
    Az jutott eszembe, hogy szakkörön mondták, hogy ha arduinot tudunk programozni, akkor ic-t is úgy kell.
    Erről jutott eszembe, hogy azt a gáz érzékelő progit rá lehet rakni egy ic-re, és nem kell az arduino hozzá?
    Vagy ez nagyon nem így működik?

  • Aryes

    nagyúr

    válasz lanszelot #19848 üzenetére

    A kolléga már szépen elmagyarázta ( :R neki ), én csak a beszúrás részéhez szólnék hozzá:
    A hozzászólás írásakor a szövegmező fölött van egy "Váltás a régi szerkesztőre" link. Ez azt csinálja, amit ígér. :D
    Ezzel hibátlanul lehet kódot beszúrni:

    #include <Adafruit_SSD1306.h>
    #include <splash.h>

    uint32_t lastms = 0;
    bool blink = true;

    Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);

    void setup() {
    Serial.begin(9600);

    // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32

    display.display();
    delay(2000);

    }

    void loop() {
    int sensorValue = analogRead(A0);
    int isgas = digitalRead(2);
    String gas;

    //delay(1000);

    display.clearDisplay(); //this line to clear previous logo
    display.setTextSize(2); /*text size 3*/
    display.setCursor(3, 0); // ez tartja egy helyben a szöveget
    display.setTextColor(WHITE); //without this no display
    display.print("Gasmeter");

    display.setTextSize(1); /*text size 2*/
    display.setCursor(0, 50); // ez tartja egy helyben a szöveget
    display.setTextColor(WHITE); //without this no display
    display.print("CO2 = ");
    display.print(sensorValue);
    display.print(" PPM ");
    if (sensorValue < 90) {
    gas = "No Gas";
    }else {
    gas = " Gas";
    if (millis() - lastms > 4000) {
    lastms = millis();
    blink = !blink;
    }
    if (blink)
    display.drawRoundRect(80, 47, 40, 15, 2, WHITE);
    else
    display.drawRoundRect(80, 47, 40, 15, 2, BLACK);

    }

    display.print(gas);
    display.display(); //to shows or update your TEXT

    }

    Ez javított kód, minden loop ciklusban kirajzolja a keretet, csak a színét változtatja 4000ms-onként (ez szerintem sok, én 500-at állítanék be).

    Ez a két sor a rendszeres törlés miatt valószínűleg nem is kell:

    else
    display.drawRoundRect(80, 47, 40, 15, 2, BLACK);

  • DigitXT

    félisten

    válasz lanszelot #19848 üzenetére

    Most, hogy bemásoltad a kódot, lehet érdemben beszélgetni róla.:R
    Szóval Arduinonál úgy működik, hogy először lefut a setup, aztán meg
    átmegy a loop-ba, s az végtelenül ismétlődik. Esetedben ugye a setup
    egyrészt inicializálja a kijelzőt, másrészt (meglepetés!) elindítja a soros
    portot is, 9600 baud beállítással. Ez azért jó, mert a Serial Monitoron a
    program futását tudod monitorozni és tudod debuggolni, ha vmi "gázos".

    A delay használata egyszerű programoknál rendben van, vagy ha vmire
    kifejezetten várni kell, hogy megtörténjen. Ellenben, egy olyan program,
    ami folyamatosan (kellene hogy!) nézzen egy bemenetet megakad tőle:
    tehát az a delay(1000) az elején feleslegesen vár egy másodpercet. És
    amit utána kiértékelsz, az NEM az aktuális mért érték! Hanem még az
    egy másodperccel korábbi: nyilván "tanulós" programban ez is elmegy,
    amennyiben az ember tisztában van vele. De ha nem, kigyomlálandó...
    Erre jött a jótanács a millis() használatról, hiszen az egy mindenkoron
    növekvő számláló, a bekapcsolástól kezdve, ezredmásodpercben.:R
    (Tehát, anélkül tudsz mondjuk ~1 másodpercenként csinálni "akármit",
    hogy az MCU kifejezetten addig az 1 másodpercig ne csinálna mást...)

    A koncepcionális különbség pedig annyi, hogy nem megállsz és vársz,
    hogy elteljen egy adott időszak (közben nem csinálsz semmit), hanem
    szépen csinálod a dolgod, csak időről időre az órádra pillantasz, és ha
    azt látod, hogy eltelt már az adott (várakozási) idő, akkor csinálod meg
    az időzített/ütemezett feladatot. (Így több dolgot is kényelmesen tudsz
    más-más időközönként végrehajtani.) Első körben szerintem ennyi...:D

    pont ezért nem szúrtam be, mert lehetetlen ide berakni
    Nekem nem úgy néz ki, mintha lehetetlen lenne, ha egyszer sikerült...

Új hozzászólás Aktív témák

Hirdetés