Kezdőoldal » Számítástechnika » Programozás » Arduino-n miért nem akar...

Arduino-n miért nem akar rendesen működni a program?

Figyelt kérdés

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

}



2014. nov. 20. 20:27
1 2
 11/13 anonim ***** válasza:

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;

2014. nov. 21. 12:09
Hasznos számodra ez a válasz?
 12/13 A kérdező kommentje:
Nem neked írtam azt amit írtam. De te legalább érted hogy mit mondok. Köszi a segítséget.
2014. nov. 21. 12:13
 13/13 anonim ***** válasza:
Oké, de ha a szervód most folyamatosan mozog, (nem másodperces szünetekkel,) akkor hidd el hogy az i; nem csinál semmit:)
2014. nov. 21. 12:27
Hasznos számodra ez a válasz?
1 2

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!