Hirdetés
- StarCraft hírek: Készülhet egy új játék, miközben Game Pass-be tart a széria
- Unknown 9: Awakening - Amit a játékról tudni érdemes
- Jövő hónapban Xboxon is kipróbálható lesz a Fragpunk
- Újabb kedvcsinálón a The Last of Us TV sorozat második szezonja
- Újabb játékmenet videót kapott a Dragon Quest III: HD-2D Remake
- World of Tanks - MMO
- Újabb kedvcsinálón a The Last of Us TV sorozat második szezonja
- eFootball
- Xbox Series X|S
- PlayStation 5
- Megérkezett a METAL GEAR SOLID Δ: SNAKE EATER legújabb előzetese
- Call of Duty: Modern Warfare III (2023)
- Unknown 9: Awakening - Amit a játékról tudni érdemes
- The Finals
- EAFC 25
-
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
-
hukhl
csendes tag
Sziasztok!
Lenne egy kezdő kérdésem. Nyomógomb lenyomásainak számát számolom és erre léptetek állapotokat, mint egy állapotgép szerűen. Az egyes állapotokban 4 db LED-et villogtatok. (minden állapotban más-más sorrendben) Először delay-t használtam. Ezzel az volt a gond, hogy, amíg az egyik állapotom nem járt le addig nem tudtam tovább léptetni.
Aztán rátaláltam a millis()-re amivel szépen meglehetne ezt oldani. Mivel sok LED-em van és sok állapotom, így arra gondoltam, hogy ezt behívható funkcióként kellene megcsinálni. És amikor az egyik állapotban meghívom, akkor megadom a funkció bemeneti értékként a kívánt LED számát és a késleltetés idejét. Ezt a funkciót egy állapotban többször meghívva különböző LED-eket különböző ideig lehetne villogtatni. És közben elvileg a nyomógombom állapotát is tudom figyelni.
Idáig jutottam:
//---------------
//Function
//--------------bool LedMillis(long interval, int LEDPin, unsigned long currentMillis, bool ledState){
bool LEDStateResultInternal;
unsigned long previousMillis = 0;if (currentMillis - previousMillis >= interval)
{if(ledState == LOW)
{
ledState = HIGH;ledState = LEDStateResultInternal;
}
else{
ledState = LOW;
ledState = LEDStateResultInternal;
}
previousMillis = currentMillis;
digitalWrite(LEDPin, ledState);
}
return LEDStateResultInternal;
}Az adott kimenet számát, amelyhez a LED tartozik - LEDPin értéken adom be
CurrentMillis-nél az aktuális Millis értéket adom be
ledState-értéknél pedig a returnként visszaadott led állapot csatolom vissza.A previousMillis értékem sajnos mindig 0 marad mivel újra meghívódik a funkció és kinullázódik.
A previousMillis érétket valahogy funkció meghívásonként el lehet tárolni valahogy külön-külön?
Visszatérési értékként lehet több különböző adatot visszaadni?
Bocsánat, ha kicsit katyvasznak tűnik így elsőre.
Még szoknom kell ezt a környezetet.Köszönöm a segítséget!
[ Szerkesztve ]
-
hukhl
csendes tag
Köszönöm aryes és neked is Janos250!
Ez a globális változó ez bejött.Viszont a funkcióból sajnos nem sikerült kinyernem a return értéket. Biztos valami alap nyelvtani hibát vétek ami miatt nem sikerül. Monitorozva a programot, sajnos nem kapom meg kívülre az értéket...
Lent látató az eddigi kód bejelölve ahova át akarnám másolni a visszatérési értéket majd újra betenni a funkcióba. Így megoldani a LED ki és bekapcsolását...Végig gondolva az eddig megírt funkciót, ha többször fogom behívni akkor a "previousMillis" értékeket külön-külön kell nyilvántartani, mivel más időintervallumot fogok megadni az egyes ledekhez és így máskor kapja meg majd az aktális Millis értéket.
//---------
//Constans
//---------
const int LED1 = 12;
const int LED2 = 10;
const int LED3 = 8;
const int LED4 = 6;
const int BUTTON1 = 4;
const int BUTTON2 = 2;
//---------
//Variables
//---------
unsigned long previousMillis = 0;
int Button1State = 0;
int Button2State = 0;
int Button1LastState = 0;
int Button2LastState = 0;
int Button1CountState = 0;
int Button2CountState = 0;
bool LedStateResult = LOW;
//-------------------
// Start Initializing
//-------------------
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(BUTTON1, INPUT);
pinMode(BUTTON2, INPUT);
Serial.begin(9600);
}
//--------------------
//Main CODE start here
//--------------------
void loop() {
Button1State = digitalRead(BUTTON1);
unsigned long currentMillis = millis();
//---------------------------------
//Button State Reading and Counting
//---------------------------------
if (Button1State != Button1LastState) {
if(Button1State == HIGH){
Button1CountState = Button1CountState+1;
Serial.println("BUTTON STATE CHANGED");
}
}
Button1LastState = Button1State;
Serial.print("LED Result Main Loop : ");
Serial.println(LedStateResult);
//-----------------------------------------
//State machine according to Button 1 State
//-----------------------------------------
switch (Button1CountState)
{
case 0:
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
Serial.println("CASE0");
break;
case 1:
LedMillis(2000, LED1, currentMillis, LedStateResult);
LedStateResult = LedMillis;
// Serial.print("Millis Function Reuslt: ");
// Serial.println(LedMillis);
Serial.print("LED Result CASE1 : ");
Serial.println(LedStateResult);
//LedMillis(500, LED2, currentMillis, LedStateResult);
// LedMillis(500, LED3, currentMillis, LedStateResult);
Serial.println("CASE1");
break;
case 2:
Serial.println("CASE2");
break;
case 3:
Serial.println("CASE3");
break;
case 4:
Serial.println("CASE4");
break;
case 5:
Serial.println("CASE5");
break;
case 6:
Serial.println("CASE6");
Button1CountState = 0;
break;
}
}//----------
//Function
//-----------
bool LedMillis(long interval, int LEDPin, unsigned long currentMillis, bool ledState){
bool LEDStateResultInternal;
Serial.print("Previous Millis :");
Serial.println(previousMillis);
Serial.print("Current Millis :");
Serial.println(currentMillis);
if (currentMillis - previousMillis >= interval)
{
if(ledState == LOW)
{
ledState = HIGH;
LEDStateResultInternal = ledState;
Serial.print("LED Result LedState High :");
Serial.println(LEDStateResultInternal);
}
else{
ledState = LOW;
LEDStateResultInternal = ledState;
Serial.print("LED Result LedState Low :");
Serial.println(LEDStateResultInternal);
}
previousMillis = currentMillis;
digitalWrite(LEDPin, ledState);
Serial.print("LED Result Final LedState :");
Serial.println(ledState);
}
return LEDStateResultInternal;
} -
hukhl
csendes tag
Szia!
Igen ennél a sornál akarnám beírni a "LedMillis" funkció visszatérési értékét a "LedStateResult "-ba, hogy a következő funkció lefuttásnál már ezzel a beolvasott értékkel dolgozzon a funkció. Ekkor elvileg 2000 msec-onként a visszatérési érték negálódik és ezzel a LED kivezérlési értéke is. -
hukhl
csendes tag
Bocsánat a szerkesztésért.
Ahogy fentebb írtam. Egy olyan funkciót szeretnék megírni. Ahol paraméterként egy idő intervallumot és egy pin számot kellene megadni. Amivel a pin-hez tartozó LED-et megadot ideig villogtatom. És van egy állapotgép, amit nyomógombbal léptetek. Az egyes állapotokhoz ezt a funkciót hívnám be. Ahol mindig más és más idő intervallmot adnék majd meg. Tudom elég nyakatekert. -
hukhl
csendes tag
válasz Janos250 #14089 üzenetére
Szia!
Igen előrébb jutottam a témával kapcsolatban
#1404 - aryes - válaszában ahogy írta. Elkezdtem utána nézni hogy lehetne egy ilyen LED classot csinálni. És belefutottam egy leírásba ahol a szerző az OOP előnyeit pont egy ilyen LED-es class készítése közben magyarázta el.
A LED számát, a bekapcsolás és kikapcsolás idejét is meg lehet adni benne.
Magamtól sajnos még nem tudok ilyet írni, de ezt jól be tudtam illeszteni az eddigi programomba.
Tegnapi nap nagy része pedig egy 2004A típusú kijelző élesztésével ment el. A nap végére azt is sikerült összehoznom. Ma, ha lesz időm akkor akarok írni rá fancy szövegeket. Illetve van néhány szenzorom amit fel akarok még éleszteni és beintegrálni az eddigi projektbe.
Szóval köszönöm az eddigi segítséget!
Új hozzászólás Aktív témák
- Kezdő fotósok digitális fényképei
- Apple notebookok
- Milyen légkondit a lakásba?
- Otthoni hálózat és internet megosztás
- World of Tanks - MMO
- Befutott a Redmi Note 14 alapverzió is
- Jelentős fejlődést mutat a Xiaomi Redmi Note 14 Pro széria
- Ukrajnai háború
- Az éj sötét és tele van Xiaomi 14T-vel
- Hálózati / IP kamera
- További aktív témák...
- Dell Latitude 7430 2 in 1 - i7 1265U/32GB/256GB SSD
- Tyű-ha Lenovo Thinkpad T14s G2 Üzleti "Golyóálló" Laptop 14" -50% i5-1135G7 4Mag 16GB /256GB FHD IPS
- Gigabyte Ryzen Gaming PC: RTX 2060 Super 8Gb / 16Gb Ram / 512Gb SSD
- LENOVO LEGION GO 83E10032HV + INGYEN futár
- HP Pavilion x360 14-dy Érintős hajtogatós Laptop Tab 14" -35% i5-1135G7 16/512 FHD IPS
Állásajánlatok
Cég: Ozeki Kft
Város: Debrecen
Cég: Ozeki Kft
Város: Debrecen