Hirdetés
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- OLED monitor topic
- Projektor topic
- Milyen billentyűzetet vegyek?
- Bluetooth hangszórók
- Apple asztali gépek
- Az SK Hynix elárulta, hogy meddig nem lesz elég memória
- HiFi műszaki szemmel - sztereó hangrendszerek
- Azonnali informatikai kérdések órája
- Milyen alaplapot vegyek?
-
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
-
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? -
-
válasz
lanszelot
#19848
üzenetére
A kolléga már szépen elmagyarázta (
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.
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.

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.
(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...
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
- Kuponkunyeráló
- Xbox Series X|S
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Gyúrósok ide!
- Xiaomi 14 - párátlanul jó lehetne
- OLED monitor topic
- A fociról könnyedén, egy baráti társaságban
- Projektor topic
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Apple iPhone 13 - hízott, de jól áll neki!
- További aktív témák...
- Mio Star Coffe One Milk Automata kávégép 6 hónap Garancia Beszámítás Házhozszállítás
- Beszámítás! Acer Predator Helios Neo 16 notebook-i9 14900HX 16GB DDR5 1TB SSD RTX 4060 8GB W11
- Apple iPhone 14 128GB,Újszerű,Dobozával,12 hónap garanciával
- ÁRGARANCIA! Épített KomPhone Ultra 9 285K 64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Sony Playstation 4 Slim 500GB játékkonzol garanciával hibátlan működéssel
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: ATW Internet Kft.
Város: Budapest
neki ), én csak a beszúrás részéhez szólnék hozzá:
ekkold

