Prosím o pomoc: Řízení tří serv s náhodným časovým spouštěním.
Úvodní stránka › Fórum › Hardware › Arduino › Prosím o pomoc: Řízení tří serv s náhodným časovým spouštěním.
- Toto téma obsahuje celkem 6 odpovědí. Do diskuze (3 diskutující) se naposledy zapojil uživatel posjirka a poslední změna proběhla před 8 roky a 10 měsíci.
-
AutorPříspěvky
-
14.1.2016 v 14:05 #5751Pavel TruhlarÚčastník
Dobrý den,
prosím o pomoc s řízením tří serv, kdy random by mělo být pouze časové zapínání serv pro daný cyklus. Takže situace, kdy se náhodně spouštějí serva a nevadilo by, kdyby se jednou za čas klidně spustili dvě nebo tři najednou. Zatím mám tento kod a serva se spouští pouze postupně za sebou. Jsem začátečník s arduinem. Děkuji za každou radu.
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;int pos = 0;
void setup() {
servo1.attach(8);
servo2.attach(10);
servo3.attach(12);
}void loop() {
for (pos = 0; pos <= 0; pos += 1) {
servo1.write(pos);
delay(1500);
}
for (pos = 120; pos >= 0; pos -= 1) {
servo1.write(pos);
delay(15);
}for (pos = 0; pos <= 0; pos += 1) {
servo2.write(pos);
delay(1500);
}
for (pos = 120; pos >= 0; pos -= 1) {
servo2.write(pos);
delay(15);
}for (pos = 0; pos <= 0; pos += 1) {
servo3.write(pos);
delay(1500);
}
for (pos = 120; pos >= 0; pos -= 1) {
servo3.write(pos);
delay(15);
}}
18.1.2016 v 14:47 #5780pitickoÚčastníkco vymyslet nějaký takový kód:
vygeneruj náhodné číslo z pinu A1 od 0 do 1023
čekej vygenerovaný čas A1 (pro delší čas si lze pomoct matikou)
vygeneruj náhodné číslo z pinu A0 od 1 do 3
když bude číslo 1->udělej něco se servem1
když bude číslo 2->udělej něco se servem2
když bude číslo 3->udělej něco se servem3
…a znova18.1.2016 v 18:17 #5781posjirkaÚčastníkjá bych použil 3 generované random proměnné.
1. by mi určovala které serva mají reagovat (1.bit bylo servo 1, 2 bit servo 2, 3bit servo 3)
2. proměnná by mi řešila nastavení (úhel) pro tyto serva
3. proměnná by mi generovala délku prodlevy k dalšímu kroku.19.1.2016 v 9:56 #5786pitickoÚčastník…a teď ještě vyřešit to, aby se pohybovaly i dvě serva najednou…jak na to?
19.1.2016 v 17:01 #5796posjirkaÚčastníknechápu dotaz. Jak jsem psal vygeneruj náhodnou proměnnou a urči si např. že 1, bit bude aktivita serva 1. 2. bit aktivace serva 2, 3. bit aktivace serva 3.
V kodu je to ještě jednodušší#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;int random1 = 0; // promenna kam se ulozi nahodne cislo – cislo serva
int random2 = 0; // promenna kam se ulozi nahodne cislo – novz uhel
int random3 = 0; // promenna kam se ulozi nahodne cislo – prodleva…. nastaveni pinu atd.
random1 = random(0, 16); // vzgeneruj noahodne cislo pro pocet serv
random2 = random(0, 180); // vzgeneruj noahodne cislo pro uhel serva
random3 = random(200, 1000); // vzgeneruj noahodne cislo pro delay
if (bitRead(random1, 1) == 1 )
{
servo1.write(random2);// uprav stav serva 1
}
…
delay(random3); // pauya19.1.2016 v 19:05 #5799pitickoÚčastníkJo tak. Jsem nechápal moc ten první bit. Budu muset někde nastudovat… Ta možnost sepnutí náhodného počtu serv je teď mimo mne. Ale pokud bys měl energii spáchat jednoduchý prográmek např. s LEDkama, budu rád (možná nejen já).
24.1.2016 v 23:04 #5845posjirkaÚčastníktrochu se zpožděním ale přeci:
// náhodné říze 3 serv // v1 // místo serv bude řešením výpis stavu 3 proměnných na seriový port. // by JP 2016 // int servo1 = 0; // uhel natočeníserva 1 int servo2 = 0; // uhel natočeníserva 2 int servo3 = 0; // uhel natočeníserva 3 int uhel = 0; // novz uhel natočení int pauza = 0; // doba pauzy před další změnou int vyber = 0; // pomocná promměná pro výběr , které servo se bude měnit void setup() { Serial.begin(9600); // inicializace seriove komunikace randomSeed(analogRead(A0)); // generátor náhodných čísel začne od čísla == aktuální hodnota na portu A0 } void loop() { // generovaní náhodných hodnot //---------------------------- // novy uhel natočení serv uhel = random(0, 180); // výběr serv pro změnu vyber = random(0, 127); // délka pauzy v ms pauza = random(200, 1000); // uprava hodnot natočení serv //---------------------------- // když 0. bit proměnné "výber" bude rovný 1 aktualizuj hodnotu "servo1" if (bitRead(vyber,0) == 1) { servo1 = uhel; } // když 1. bit proměnné "výber" bude rovný 1 aktualizuj hodnotu "servo2" if (bitRead(vyber,1) == 1) { servo2 = uhel; } // když 2. bit proměnné "výber" bude rovný 1 aktualizuj hodnotu "servo3" if (bitRead(vyber,2) == 1) { servo3 = uhel; } // výpis proměnných a stavu serv //------------------------------ Serial.print("Servo 1 : "); Serial.print(servo1); Serial.println(" st."); Serial.print("Servo 2 : "); Serial.print(servo2); Serial.println(" st."); Serial.print("Servo 3 : "); Serial.print(servo3); Serial.println(" st."); Serial.print("Vyber : "); Serial.print(vyber); Serial.print(" = "); Serial.println(vyber, BIN); Serial.print("Pauza : "); Serial.print(pauza); Serial.println(" ms"); // oddělovač //---------- Serial.println("****************************"); delay(pauza); // čekání na další změnu }
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.