Ovladani serva tlacitkem

Odpovědět
strmajz
Příspěvky: 2
Registrován: 09 črc 2020, 23:07
Reputation: 0

Ovladani serva tlacitkem

Příspěvek od strmajz » 09 črc 2020, 23:17

Dobry den,
resim mensi problem s ovladanim modelarskeho serva pres tlacitko.
Potrebuji aby se servo, pri zmacknuti tlacitka, pohlo z polohy X do polohy Y a zustalo tam po dobu drzeni tlacitka a po uvolneni tlacitka se servo vrati zase zpet.
Problem je ze potrebuju aby servo nejelo plnou rychlosti.
Nejako jsem poskladal tento kod nicmene se servo porad dokola hybe z jedne pozice na druhou i bez reakce tlacitka.
Nevedeli byste prosim kde by mohl byt problem?
Predem moc dekuji za kazdou radu :)

Kód: Vybrat vše

#include <Servo.h> 
Servo Celist;

int uhel = 0;

void setup() {
  Celist.attach(10);             
  
  //Celist.write(10); 
              
  pinMode(3,INPUT_PULLUP);
                      
}

void loop(){      //Křídla otevřít
  
   if(digitalRead(3)==HIGH){              
    //for(uhel=10; uhel<=100; uhel +=1){    //celist otevrit
    Celist.write(uhel);
     //Celist.write(10);
     delay(10);
    //}
    }
    else {
     for(uhel=100; uhel>=10; uhel -=1){    //celist zavrit
     Celist.write(uhel);
    //Celist.write(100);
     delay(10);
     
     }
    }
   }

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovladani serva tlacitkem

Příspěvek od AstroMiK » 10 črc 2020, 10:11

Pozor na nutnost pořádného zdroje k servu.
V mé ukázce napájím servo i Arduino z PowerBanky a ještě mám přes napájecí piny Arduina velký elektrolyt (bez něj se Arduino resetovalo).

Ukázka činosti na YouTube:
https://youtu.be/PsdHJZf3s2w


Kód: Vybrat vše

#include <Servo.h> 
Servo Celist;

int uhel = 10;

void setup()
  {
    Celist.attach(10);                           
    pinMode(3,INPUT_PULLUP);
  }

void loop()
  {
  
    while (digitalRead(3)==HIGH and uhel < 100)
      {
        Celist.write(uhel);
        uhel ++;
        delay(10);
      }

    while (digitalRead(3)==LOW and uhel > 10)
      {
        Celist.write(uhel);
        uhel --;
        delay(10);
      }
  }

strmajz
Příspěvky: 2
Registrován: 09 črc 2020, 23:07
Reputation: 0

Re: Ovladani serva tlacitkem

Příspěvek od strmajz » 10 črc 2020, 13:41

Tyjo moc dekuju za pomoc funguje to paradne :)
Napajeni mam vyssim napetim pres UBEC na 6V a asi 5A takze extra kond neni nutny :)
Nicmene v programovani jsem vpodstate laik a takovy lepic kodu. Ta moje verze s if/else vlastne nefunguje proc? (jsem jen zvedavy) :) Pokud nepouziju parametr "for" a jen se tam napise konkretni uhel jede to bez problemu.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovladani serva tlacitkem

Příspěvek od AstroMiK » 10 črc 2020, 15:10

Hlavní problém byl v tom, že dokud bude stisknuté tlačítko, tak se vykonávají ve smyčce "for" následující operace:
- servo rychle nastavit na 100°
- pomalu přejet až na 10°
- a znova rychle nastavit na 100°
- a znova pomalu přejet až na 10°
.... a tak furt dokola, dokud bude stisknuté tlačítko.

Dál v tom původním kódu není možnost přerušit pohyb.
Servo prostě musí dojet až na konec a během pohybu v té smyčce už nemáš tlačítko pod kontrolou.

A poslední problém byl v tom, že ta část, která se měla vykonat při uvolněném tlačítku nastavila servo na poslední známou hodnotu proměnné 'uhel'(což je z předchozího stisku 10°), takže se vlastně po uvolnění nestalo nic.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů