servo ovládané senzorem s použitím millis

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Mata
Příspěvky: 1
Registrován: 02 led 2025, 17:37

servo ovládané senzorem s použitím millis

Příspěvek od Mata » 02 led 2025, 17:59

Ahoj všem.Už několik dní se snažím ovládat servo po spuštění tlačítkem,při zapnutí doleva,při vypnutí doprava,ale bez použití delay,takže millis,protože chci do budoucna ovládat i jiné věcí.
Jde mi hlavně o to aby se pohybovalo mnou určenou rychlostí,což nemůžu docílit.Funguje mi to pouze když podržím tlačítko a resetartuji Arduino.Prosím tedy o radu,snad jsem to vysvětlil srozumitelně ;)
Zde je kod:

Kód: Vybrat vše

# include <Servo.h>
Servo myservo;
unsigned long MOVING_TIME = 1500;
unsigned long moveStartTime;
const int cidlo1 = 13;
int startAngle = 0;
int stopAngle  = 40;
void setup() {
  myservo.attach(9); 
}
void loop() {  
if (digitalRead(cidlo1) == LOW) { 
unsigned long progress = millis()-  moveStartTime;
  if (progress <= MOVING_TIME) {
    long angle = map(progress, 0, MOVING_TIME, stopAngle, startAngle);
    myservo.write(angle);   
  }
 }
 else {
unsigned long progress = millis()-  moveStartTime; 
  if (progress <= MOVING_TIME) {
    long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle);
    myservo.write(angle);   
  }
 }  
}

Uživatelský avatar
kiRRow
Příspěvky: 1278
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: servo ovládané senzorem s použitím millis

Příspěvek od kiRRow » 02 led 2025, 18:18

a teď to vysvětlit arduinu ... třeba nikde na začátku toho pohybu serva nezaznamenáváš moveStartTime ... to se děje jen po startu programu, což i vysvětluje proč to funguje jen po resetu, kdy millis() je natolik nízké, že když od něj odečteš nulu, tak progres bude stále menší nebo roven MOVING_TIME

a jak se to má chovat v nedefinovaných situacích ? ... třeba stisknu, ono se to začne hýbat, ale co to má udělat, když stisk uvolním dříve než to doběhne ? ... má se vrátit okamžitě ?, nebo dojít na cílovou pozici a pak se vrátit na počátek ?

Jinak rychlost servomotoru pak řídíš tím jak často a po jak velkých krocích mu měníš jeho polohu ... hodně často a v malých krocích, pojede to servo pomalu, ale hladce ..... málo a velké kroky budou vést k rychlým, ale trhaným pohybům ... k něčemu je lepší to a k něčemu jinému tamto.

A právě jsi dospěl k bodu, kdy budeš muset trošku ten program přeškatulkovat ... krok č1) ... načíst stav tlačítka, porovnat ho s předchozím stavem tlačítka a tím vyhodnotit jesli je stisknuto, drženo, uvolněno, nestisknuto ... to využít v kroku č2) kdy za určitého stavu tlačítka a pomocí toho že si pamatuji kde motor je, tak vypočtu co chci v dalším kroku udělat .... krok č3) spustit akci kterou chci vykonat .... krok č4) upgradovat stav millis a skočit na začátek programu ........ (krok č4, lze i nahradit krokem č0, stím že na začátek programu bude skákat až krok č3)

Uživatelský avatar
kiRRow
Příspěvky: 1278
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: servo ovládané senzorem s použitím millis

Příspěvek od kiRRow » 02 led 2025, 19:01

zkráceně ... načíst (senzory + předchozí výsledek), spočítat, vykonat, uložit výsledek

Uživatelský avatar
Caster
Příspěvky: 441
Registrován: 11 zář 2019, 09:02

Re: servo ovládané senzorem s použitím millis

Příspěvek od Caster » 02 led 2025, 21:00

Použij knihovnu servo.h
Další inspirace v článku How to Control Servo Motors with Arduino – Complete Guide ;)

jankop
Příspěvky: 1048
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: servo ovládané senzorem s použitím millis

Příspěvek od jankop » 04 led 2025, 16:13

kiRRow píše:
02 led 2025, 18:18
a teď to vysvětlit arduinu ...
:lol: :lol: :lol:

luger
Příspěvky: 235
Registrován: 30 dub 2023, 11:06

Re: servo ovládané senzorem s použitím millis

Příspěvek od luger » 07 led 2025, 15:38

Já používám knihovnu VarSpeedServo, jede na pozadí a má docela slušné funkce.

Odpovědět

Kdo je online

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