Pohyb servomotorů v náhodném pořadí
Napsal: 13 led 2019, 01:37
Zdravim,
rád bych se na Vás obrátil s pomocí jednoduchého prográmku, s arduinem umím fakt hodně málo/prd . Dělám na školním projektu takový bot ze servomotorů, které se aktivují PIR čidlem. Nejsem ale schopen ty servomotory volat v náhodném pořadí, za sebou.
O co mi jde, potřeboval bych při detekování pohybu toho čidla spustit čtyři servomotory pokaždé v jiném pořadí, za sebou. Tedka mi to moc nešlape
Díky moc za jakoukoli radu.
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int motion = 0;
int p1 = 100; //promenna pro rychlost pohybu serva
int p2 = 250;
int a = 60; //proměnné, (uhly, mezi kterými by se to servo mělo tocit)
int b = 100;
void setup () {
pinMode(3, OUTPUT); // výstupy pro serva
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(12, INPUT); //vstup pro PIR senzor
//////////////////////////
servo1.attach (3); //přiřazení výstupu k servomotoru
servo2.attach (5);
servo3.attach (6);
servo4.attach (9);
//////////////////////////
Serial.begin(9800);
}
void loop(){
motion = digitalRead(12); // vstup pro PIR čidlo
if (motion == HIGH) { // pokud je detekován pohyb před čidlem, spouští se tato operace:
servo1.write (a); // servo1. se pohne do uhlu (a)
delay (random (p1,p2)); // pak počká v náhodném rozmezí těchto dvou hodnot
servo1.write (b); // servo1. se pohne do uhlu (b)
delay (random (p1,p2)); // opět počká v náhodném rozmezí těchto dvou hodnot (mikrosekundy)
} else {
servo1.write (80); // servo1. se vrací do pozice (uhlu) 80
}
motion = digitalRead(12); // to samé platí pro servo2. až je ukončeno servo1.
if (motion == HIGH) {
servo2.write (a);
delay (random (p1,p2));
servo2.write (b);
delay (random (p1,p2));
} else {
servo2.write (80);
}
motion = digitalRead(12); // to samé platí pro servo3. až je ukončeno servo2.
if (motion == HIGH) {
servo3.write (a);
delay (random (p1,p2));
servo3.write (b);
delay (random (p1,p2));
} else {
servo3.write (80);
}
motion = digitalRead(12); // to samé platí pro servo4. až je ukončeno servo3.
if (motion == HIGH) {
servo4.write (a);
delay (random (p1,p2));
servo4.write (b);
delay (random (p1,p2));
} else {
servo4.write (80);
}
}
rád bych se na Vás obrátil s pomocí jednoduchého prográmku, s arduinem umím fakt hodně málo/prd . Dělám na školním projektu takový bot ze servomotorů, které se aktivují PIR čidlem. Nejsem ale schopen ty servomotory volat v náhodném pořadí, za sebou.
O co mi jde, potřeboval bych při detekování pohybu toho čidla spustit čtyři servomotory pokaždé v jiném pořadí, za sebou. Tedka mi to moc nešlape
Díky moc za jakoukoli radu.
#include <Servo.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
int motion = 0;
int p1 = 100; //promenna pro rychlost pohybu serva
int p2 = 250;
int a = 60; //proměnné, (uhly, mezi kterými by se to servo mělo tocit)
int b = 100;
void setup () {
pinMode(3, OUTPUT); // výstupy pro serva
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(12, INPUT); //vstup pro PIR senzor
//////////////////////////
servo1.attach (3); //přiřazení výstupu k servomotoru
servo2.attach (5);
servo3.attach (6);
servo4.attach (9);
//////////////////////////
Serial.begin(9800);
}
void loop(){
motion = digitalRead(12); // vstup pro PIR čidlo
if (motion == HIGH) { // pokud je detekován pohyb před čidlem, spouští se tato operace:
servo1.write (a); // servo1. se pohne do uhlu (a)
delay (random (p1,p2)); // pak počká v náhodném rozmezí těchto dvou hodnot
servo1.write (b); // servo1. se pohne do uhlu (b)
delay (random (p1,p2)); // opět počká v náhodném rozmezí těchto dvou hodnot (mikrosekundy)
} else {
servo1.write (80); // servo1. se vrací do pozice (uhlu) 80
}
motion = digitalRead(12); // to samé platí pro servo2. až je ukončeno servo1.
if (motion == HIGH) {
servo2.write (a);
delay (random (p1,p2));
servo2.write (b);
delay (random (p1,p2));
} else {
servo2.write (80);
}
motion = digitalRead(12); // to samé platí pro servo3. až je ukončeno servo2.
if (motion == HIGH) {
servo3.write (a);
delay (random (p1,p2));
servo3.write (b);
delay (random (p1,p2));
} else {
servo3.write (80);
}
motion = digitalRead(12); // to samé platí pro servo4. až je ukončeno servo3.
if (motion == HIGH) {
servo4.write (a);
delay (random (p1,p2));
servo4.write (b);
delay (random (p1,p2));
} else {
servo4.write (80);
}
}