Kezdőoldal » Számítástechnika » Programozás » Hogyan lehet arduino-n egyszer...

Hogyan lehet arduino-n egyszerre lejátszani programot?

Figyelt kérdés

Egy pl.:"if(pos>pos1){

t();

o();

}

void t()

{ servo.write(90);

}


void o(){

servo2.write(45);


}

hogyan lehet a "t és o" hogy egyszerre mozogjanak, álljanak a pozíciójukba?



2014. aug. 13. 15:55
 1/9 anonim ***** válasza:

Nem multitask, tehát programozással. Nem ismerem. Nem ismerem a pontos szintaxist, de a lényeg valami ilyesmi (feltéve ha a servo2.write paramétere az h mennyinél álljon meg és em az h mennyivel forduljon. Ha az h mennyivel forduljon akkor csak 2,1):


for (i=0;i<45;i++)

{

servo.write(i*2);

servo.write(i);

}



A lényeg az, hogy nem egyszerre forgatod el őket, hanem egy ciklusba behajítod és felváltva forgatsz rajtuk kicsiket, így egyszerre fognak mozogni.

2014. aug. 13. 16:40
Hasznos számodra ez a válasz?
 2/9 anonim ***** válasza:
Első vagyok amit ki akartam hozni a dologból: a kódot mindenképpen sorosan hajtja végre, nem képes multitask módban működni, illetve csak néhány modulja a chipnek (pl timer, ezekből több is futhat egymástól függetlenül, viszont a kivant eseménynél ugye megszakítást generál, ami az addigi kodot fogja stoppolni)
2014. aug. 13. 16:44
Hasznos számodra ez a válasz?
 3/9 A kérdező kommentje:
Köszi!
2014. aug. 13. 16:52
 4/9 A kérdező kommentje:

És ha igy néz ki:


servo1.write(90);

servo.write(45);

if(pos=pos){

t()

}


void t(){

for(pos = 45; pos < 135; pos += 1)

{

servo.write(pos);

servo1.write(pos*1,5) // de nem akarom hogy a servo1 visszamenjen 90-ről 45-re és onnan csinálja

}

2014. aug. 13. 17:30
 5/9 anonim ***** válasza:

Én úgy csinálnám meg, hogy írnék egy loopból hívható függvényt, ami adott növekménnyel mozgatná a két szervót, addig, de csak akkorha még érte el a kívánt végpozíciót.

Az aktuális és a célpozíció, valamint a növekmény is globális változó lenne. Minden loop lefutás során csak minimális elmozdulás lenne, de a szervók arányosan, látszólag egyszerre futnának.

2014. aug. 14. 13:04
Hasznos számodra ez a válasz?
 6/9 anonim ***** válasza:

Egy lehetséges megoldás (nem teszteltem):

#include <Servo.h>

Servo servo1, servo2;

double start1, end1, increment1, pos1;

double start2, end2, increment2, pos2;

void servo_init() {

.... start1 = 45;

.... end1 = 90;

.... start2 = 90;

.... end2 = 0;

.... increment1 = 0.5;

.... increment2 = -1;

.... servo1.attach(9)

.... servo2.attach(10)

.... 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};

}


void setup() {

.... servo_init(

}


void loop() {

.... servo_update();

}


A .... a behúzást jelzi.

2014. aug. 14. 14:51
Hasznos számodra ez a válasz?
 7/9 anonim ***** válasza:

Bocs, a servo_update() végéről kimaradt ez a két sor:

.... servo1.write(int(pos1));

.... servo2.write(int(pos2));

2014. aug. 14. 14:52
Hasznos számodra ez a válasz?
 8/9 A kérdező kommentje:

Köszi szépen. Egy-két helyesírási probléma révén tökéletes volt. :) Nagyon köszi!

#include <Servo.h>

Servo servo1, servo2;

double start1, end1, increment1, pos1;

double start2, end2, increment2, pos2;

void servo_init() {

start1 = 45;

end1 = 90;

start2 = 90;

end2 = 0;

increment1 = 0.5;

increment2 = -1;

servo1.attach(9);

servo2.attach(10);

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));

}


void setup() {

servo_init();

}


void loop() {

servo_update();

}

2014. aug. 14. 17:35
 9/9 anonim ***** válasza:

Ennek különösen örülök, mert még sose programoztam Arduinot :)

De PLC programot régebben írtam már, és annak is hasonló az elve.

2014. aug. 14. 20:25
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!