Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   736 / 839
(#) Bakman válasza Jonni hozzászólására (») Jún 2, 2022 /
 
Nextion HMI a legegyszerűbb megoldás. Arra viszont figyelj, hogy a 7" változat enyhén torzított képet ad, a pixelek nem négyzet alakú területet foglalnak el. Legalábbis az ilyen volt, amelyikkel találkoztam személyesen. Aztán ki tudja, lehet azóta javították de nem biztos.
(#) willmenn hozzászólása Jún 3, 2022 /
 
Üdvözlet!
Szeretnék egy kis segítséget kérni, arduino programozas terén. Most próbálkozok elsajátitani az alapokat, de meg akadtam. Nem tudom hogy tudom megoldani a vezérlés átadását, mint Bascom-ban a gosub utasítás. Próbáltam már a void akármi() opciót a while; do-while opcióval, de nem tudom kiszürni hogy addig ne menjen vissza a
void loop()-ba ameddig a feltétel nincs meg. Az átadás megy, de ahogy egyszer lefut vissza tér.

Segítséget előre is köszönöm!
"Guglit" meg ha lehet hadjuk ki, mert ott sokat kutakodtam eredménytelenül!
(#) Régi motoros válasza willmenn hozzászólására (») Jún 3, 2022 /
 
Egy függvény meghívásával nem fog megállni benne a program, hanem végrehajtja és megy tovább.
Ha azt akarod, hogy megálljon benne, valamit be kell iktatni, amire várni kell. Viszont ha megállítod a program futását pl késleltetéssel, akkor nem megy tovább. Esetleg még ciklust lehet bele tenni,
amíg nem igaz a feltétel addig folyamatosan ellenőrzi, aztán ha igazzá válik mehet tovább.
Másold be a programodat, a koponyák majd elmondják mit lehet, vagy javasolt tenni...
A hozzászólás módosítva: Jún 3, 2022
(#) Massawa válasza willmenn hozzászólására (») Jún 3, 2022 /
 
Lehet, hogy rossz a programmenet. Az ilyen gosub ( nem is erem a Bascomot) dolgokat az arduinio nyelvben egyszerübb egy statmachine eljárással használni.
A loopban csak a kondiciokat kell folyton vizsgálni, és ha teljesülnek akkor ugrik a program a megfelelö void-ra. Igy akármennyi állapotot irhatsz, és mindegyikre egy alprogramot, ami az adott állapothoz elvégzi a kivánt feladatot, majd visszamegy a loopba.
(#) willmenn hozzászólása Jún 3, 2022 /
 
Valóban ugrik a kért void-ra, de mondjuk én pl. if( akarmi ) x++ opcónál a feltétel teljesül, de visszaugrik a loop-ba és kezdi előről. Bascomba ha átugrik és ameddig nem határozom meg a return opciot, addig számol, annélkül, hogy a fő programba vissza térne. Vissza térés a return utasiás után. Na ezt hiányolom a programból eggyenlőre. De ha mondjuk egy goto utasítás lenne, az se lenne baj.
(#) Massawa válasza willmenn hozzászólására (») Jún 3, 2022 /
 
Na pont ezt kezelné másképp ha állapotokkal dolgoznál.
A loop csakis a feltételeket vizsgálja és irányitja a programot a megfelelö alprogramba, ami elvégzi a feladatot, a loop közben meg vizsgálja mi változott a változok közül.
(#) Bakman válasza willmenn hozzászólására (») Jún 3, 2022 /
 
Ha jól értem, te a while utasítást akarod használni. Pl. itt
  1. while (x<10){
  2. akármi;
  3. x++;
  4. }
az "akármi" programrészlet annyiszor fut le, ahányszor teljesül a zárójelbe tett feltétel.
(#) willmenn hozzászólása Jún 3, 2022 /
 
void loop()
gomb_aa = digitalRead(gomb_a);


if (gomb_aa == LOW)
{
lcd.setCursor(10,1);
lcd.print(a_ho);
delay(1000);
lcd.clear();
gomb_aa = digitalRead(gomb_a);

while(gomb_aa == HIGH)
return;

also();

/*********************************************************/

void also()
{
gomb_aa = digitalRead(gomb_a);


while (gomb_aa == HIGH);
{

lcd.setCursor(0,1);lcd.print("Als");lcd.write(2); lcd.print(" h"); lcd.write(4);lcd.print(": ");


lcd.setCursor(10,1); lcd.print(a_ho); a_ho++;
if (a_ho > 10 ) {a_ho=0; lcd.setCursor(10,1); lcd.print(" ");}


return;
(#) kapu48 válasza willmenn hozzászólására (») Jún 3, 2022 /
 
Bővebben: Link
300. oldaltól vannak a vezérlés át adó utasítások leírása.
De a többi részletek is hasznos olvasni valók.
(#) kapu48 válasza willmenn hozzászólására (») Jún 3, 2022 /
 
Nem figyelsz elégé a zárójelezésre "kezdet>{utasítások tömbje}>vége" zárójelezésekre, párban kel szerepelni ük!
Ebben a formában értelmezhetetlen a programod.
(#) kapu48 válasza willmenn hozzászólására (») Jún 3, 2022 /
 
  1. void loop()
  2. [b]{[/b]
  3.   gomb_aa = digitalRead(gomb_a);
  4.  
  5.  
  6.   if (gomb_aa == LOW)
  7.   {
  8.      lcd.setCursor(10,1);
  9.      lcd.print(a_ho);
  10.      delay(1000);
  11.     lcd.clear();
  12. [b]}[/b]
  13. gomb_aa = digitalRead(gomb_a);
  14.  
  15. while(gomb_aa == HIGH); // return;
  16.  
  17. also();
  18. [b]}[/b]
  19.  
  20. /*********************************************************/
  21.  
  22. void also()
  23. {
  24.   gomb_aa = digitalRead(gomb_a);
  25.  
  26.  
  27.   while (gomb_aa == HIGH);
  28.   {
  29.  
  30.     lcd.setCursor(0,1);
  31.     lcd.print("Als");
  32.     lcd.write(2);
  33.     lcd.print(" h");
  34.     lcd.write(4);
  35.     lcd.print(": ");
  36. [b]}[/b]
  37.  
  38.  
  39.   lcd.setCursor(10,1);
  40.   lcd.print(a_ho);
  41.   a_ho++;
  42.   if (a_ho > 10 )
  43.   {
  44.       a_ho=0;  
  45.       lcd.setCursor(10,1);
  46.       lcd.print(" ");
  47.    }
  48.  
  49.  
  50.    //return;
  51. [b]}[/b]


Láthatod, hogy hól hiányoztak a } jelek!
A hozzászólás módosítva: Jún 3, 2022
(#) kapu48 válasza kapu48 hozzászólására (») Jún 3, 2022 /
 
Közben még találtam hibát a 13. sortól:
  1. //gomb_aa = digitalRead(gomb_a);
  2. // vár a gomb nyomásra:
  3. while(digitalRead(gomb_a) == HIGH); // return;
(#) Balagemann2031 hozzászólása Jún 4, 2022 /
 
Sziasztok! Lenne egy olyan kérdésem, hogy arduino mega boardon az I\O-k közül melyik alkalmas belső felhúzó ellenállásos bemenetként működni? Keresgéltem pintérképeket és pár leírást de nem találtam egyértelmű listázást. Előre is köszi!
(#) Massawa válasza Balagemann2031 hozzászólására (») Jún 4, 2022 / 1
 
Elvben mindegyik.
(#) vargham válasza Balagemann2031 hozzászólására (») Jún 4, 2022 / 1
 
Adatlap hetedik oldaltól.
(#) Balagemann2031 válasza vargham hozzászólására (») Jún 4, 2022 /
 
Köszönöm szépen mindkettőtöknek!
(#) willmenn válasza kapu48 hozzászólására (») Jún 4, 2022 /
 
Köszönöm a segítséget, de az alap próblémám még mindig áll!
kapu48 ha te vagy a Tavir Oldalon is, akkor tudod hogy miről beszélek. Ha jól emlékszem te ismered a
Bascom-ot is. Az ottani gosub utasítás megfelelőjét keresem az arduino programozásában. Hogy addig ne térjen vissza a főprogramba, ameddig nem kapja meg a megfelelő feltételeket.
(#) vargham válasza willmenn hozzászólására (») Jún 4, 2022 /
 
Kérlek, írd le ide BASCOM nyelven, amit szeretnél.
(#) vargham válasza willmenn hozzászólására (») Jún 4, 2022 /
 
C/C++ esetén nincs GOSUB.
A függvényhívás viszont nagyon hasonló ahhoz, ami a BASCOM CALL utasítása.
(#) kapu48 válasza willmenn hozzászólására (») Jún 4, 2022 /
 
Be linkeltem csak olvasni kellet volna.
Van ez a két utasítás:
  1. while(kifejezés) {}
  2. //Mindaddig folyamatosan fut le, amíg a kerek zárójelben lévő kifejezés hamissá nem válik. //Valaminek változnia
  3. //kell a vizsgált változóban, különben a folyamat soha nem ér véget. Ez történhet változó //bevezetésével.
  4. Példa:
  5. var = 0;
  6. while(var < 200){
  7.  // 200-szor lefutnak a ciklusban lévő utasítások
  8.    var++;
  9. }
  10. //forrás (http://arduino.cc/en/Reference/While)
  11. do{}while (feltétel){}
  12. //A do a while-hoz hasonlóan működik, de a ciklus végén lévő feltételt vizsgálja, ezért a do ciklus //mindig lefut
  13. l//egalább egyszer.
  14. //Példa:
  15. do
  16. {
  17.    delay(50); // várakozás a szenzorra
  18.    x = readSensors(); // kiolvassa a szenzorból az értéket
  19.   } while (x < 100); // amit összehasonlít
  20. //forrás: (http://arduino.cc/en/Reference/DoWhile)
  21. //break:
  22. //A do, for, while ciklusokból és a switch állításból való kilépésre használjuk


// pálda
  1. void miRutin()
  2. {
  3.   // ez egyszer hajtodikvégre
  4.    // ....
  5.   while(1)// végtelen hurok
  6.   {  
  7.      // ismételten lefutnak a ciklusban lévő utasítások
  8.      var++;
  9.      if(valami feltétel) break; // ha igazzá válik kilép a whileböl
  10.      //...
  11.   }
  12.   // ez egyszer hajtodikvégre
  13.    // ....
  14. } // visszatér a fő programba
  15.  
  16. void setup() {
  17.   // put your setup code here, to run once:
  18.  
  19. }
  20.  
  21. void loop() {
  22.   // put your main code here, to run repeatedly:
  23.   miRutin();
  24.  
  25. }
A hozzászólás módosítva: Jún 4, 2022
(#) kapu48 válasza kapu48 hozzászólására (») Jún 4, 2022 /
 
Ez csak egy példa volt, de mindenki máskép csinálhatja.
És sok minden függhet az aktuális feladattól is.
(#) willmenn válasza vargham hozzászólására (») Jún 4, 2022 /
 
Köszi akkor leírom bascom-ba:


main:
do

if gomb1 = 1 then gosub also

loop



also:
do
locate 1,1
lcd "felso); a_ho
incr a_ho

if gomb=0 then return

loop
(#) pipi válasza willmenn hozzászólására (») Jún 4, 2022 /
 
void also(void);
void main(void) //main:
do
{

if (gomb1 == 1) // then
{
also(); //gosub also
}
}while(1); //loop
};


void also(void) //also:
{
do
{
??? locate 1,1
???? lcd "felso); a_ho
??? incr a_ho

if (gomb==0)
{
break; //then return
}
}while(1); //loop
};



kb
A hozzászólás módosítva: Jún 4, 2022
(#) rolandgw válasza willmenn hozzászólására (») Jún 4, 2022 /
 
Mit nem értesz? Csinálsz egy infinite loop-ot, a gosub pedig függvényhívás. De ha vizet akarsz gereblyézni implementálhatod.
Bővebben: Link
(#) willmenn hozzászólása Jún 4, 2022 /
 
Köszönöm mindenkinek a segítségét!
(#) vargham válasza willmenn hozzászólására (») Jún 5, 2022 /
 
Szerintem nem kell szubrutin hívás.
  1. void loop() {
  2.   if (digitalRead(gombPin) == LOW) {
  3.     //Itt piszkálod az LCD-t
  4.   }
  5. }

De ha nagyon szeretnéd.
  1. void also() {
  2.   while(digitalRead(gombPin) == LOW) {
  3.     //Itt piszkálod az LCD-t
  4.   }
  5. }
  6.  
  7. void loop() {
  8.   if (digitalRead(gombPin) == LOW) {
  9.     also();
  10.   }
  11. }
(#) kapu48 válasza vargham hozzászólására (») Jún 5, 2022 /
 
Idézet:

  1. while(digitalRead(gombPin) == LOW) {
  2.     //Itt piszkálod az LCD-t
  3.   }

Ezzel csak az a gond, hogy csak addig fut amig nyomja a gombot!
A hozzászólás módosítva: Jún 5, 2022
(#) willmenn hozzászólása Jún 5, 2022 /
 
Köszönöm! Lenne még egy kérdésem! Hogyan tudom a mért értékben a (ds1820) csak egy tizedesig kiíratni az eredményt? Alapból 2 tizedesig mutat.
(#) willmenn hozzászólása Jún 5, 2022 /
 
Köszi közben megtaláltam a válasz!
(#) vargham válasza kapu48 hozzászólására (») Jún 5, 2022 /
 
Bocsánat, valóban fordítva volt az ő kódjában a logika. Írja át. A lényeg a vezérlésátadás GOSUB nélkül. Remélem, arra megfelel a példám.
Következő: »»   736 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem