Arduino-n miért nem akar rendesen működni a program?
Van egy viszonylag egyszerű programom,mely 2 db szervót irányít. Mikor megcsinálja az első feladatot, a következőt, mint pl.: servo2.write(100);;; Már nem akarja. Miért van ez?
#include <Servo.h>
Servo servo1, servo2;
double start1, end1, increment1, pos1;
double start2, end2, increment2, pos2;
int i=1000;
int o=45;
void servo_init() {
start1 = 45;
end1 = 90;
start2 = 90;
end2 = 0;
increment1 = 0.5;
increment2 = -1;
servo1.attach(7);
servo2.attach(6);
servo1.write(start1);
servo2.write(start2);
pos1 = start1;
pos2 = start2;
}
void servo_update () {
if (increment1 > 0 && pos1 < end1)
{
pos1 = pos1 + increment1;
}
if (increment1 < 0 && pos1 > end1)
{
pos1 = pos1 + increment1;
}
if (increment2 > 0 && pos2 < end2)
{
pos2 = pos2 + increment2;
}
if (increment2 < 0 && pos2 > end2)
{
pos2 = pos2 + increment2;
}
servo1.write(int(pos1));
servo2.write(int(pos2));
i;
delay(10);
}
void vissza() {
i;
if(end2=end2)
{
servo2.write(o);
i;
}
}
void setup() {
servo_init();
}
void loop() {
{servo_update();
i;}
}
Van Arduino-m, és veled ellentétben C-ül is tudok kicsit.
Emiatt nekem átnézve egyértelmű a probléma. A loop másodpercenként ~100 körül fut le, és mindig kicsivel mozdítja el a motort. (Tehát gyorsan adja neki a következő pozíció-kódot egymás után.) (0, 0.5, 1, 1.5, 2...)
Ha te az update után írsz egy 60-at, akkor a következőt küldi: (0, 60, 0.5, 60, 1, 60, 1.5...). Erre a szervó nemigazán tud mit reagálni...
Ha ilyen egymásutáni dolgokat akarsz, akkor egy állapotváltozót állíts be 0-ra, majd ha végigért az első feladat akkor 1-re. A loopban pedig az állapottól függően legyen (0:)servo_update(); vagy (1:) servo1.write(60); delay(1000;
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!