-
Fototrend
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
- Teljes verziós, ingyenes mobil játékok és alkalmazások
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- Futás, futópályák
- Call of Duty: Black Ops 6
- SONY LCD és LED TV-k
- Újjászületés: szombattól új szerverkörnyezetben a PROHARDVER! lapcsalád
- Formula-1
- Marvel Snap
- gban: Ingyen kellene, de tegnapra
- Debrecen és környéke adok-veszek-beszélgetek
- További aktív témák...
- HIBÁTLAN iPhone 13 mini 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3319
- SzinteÚJ! HP Elitebook 860 G10 i7-1355U 32GB 1000GB 16" FHD+ Gar.: 1 év
- HIBÁTLAN iPhone 13 256GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS37701 100% Akkumulátor
- Lenovo ThinkPad T14 Gen1 Ryzen5 4650U
- 0% THM 6 havi részlet beszámítás! RX 9060 XT / 9070 / 9070 XT videokártyák készletről KAMATMENTESEN
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest