Lézer mozgató szervó program nem működik

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Válasz küldése
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Lézer mozgató szervó program nem működik

Hozzászólás Szerző: K_JANOS »

Kedves Arduino kedvelők!

Egy lézert szeretnék mozgatni szervonal és villogtatni . de sajnos a programom nem működik . Szeretném a segítségeteket kérni .
Ha a 7-es bemenetet L-szint akkor sem áll le a villogás és a szervo mozgás . ATMEGA 328P-PU chip és CP 2102 a programozó. A hardwer jó mert
más progi müködik .

#include <Servo.h>

Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0; // variable to store the servo position

void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(8, OUTPUT);
pinMode(7, INPUT); // MOZGÁSÉRZÉKELŐ BEMENET (13-as láb)
}

void loop() {
if (digitalRead(7)==HIGH){ // a bemenet

for (pos = 0; pos <= 40; pos +=3) { // szervo mozgatás egyik irány
myservo.write(pos);
villog();
}
for (pos = 40; pos >= 0; pos -=3) { // szervo mozgatás másik irány
myservo.write(pos);
villog();
}
}
}
void villog()
{
digitalWrite(8, HIGH);
delay(40);
digitalWrite(8, LOW);
delay(40);
digitalWrite(8,HIGH);
delay(40);
digitalWrite(8, LOW);
delay(40);
digitalWrite(8, HIGH);
delay(40);
digitalWrite(8, LOW);
delay(800);
}
Avatar
pipi
SzínkódFestő
Hozzászólások: 80
Csatlakozott: 2008. július 6. vasárnap, 6:00

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: pipi »

Akkor a 7-es lábbal lesz a gond...
próbaképp tedd át másik lábra, akkor működik-e...
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: K_JANOS »

Köszi meg Pipi próbálon , de ha van rajta felhúzó vagy lehúzó ellenállás nem számít .
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: K_JANOS »

Meg próbáltam másik bemenetet használni és arduino uno panelra töltöttem a szoftvert de semmi eredmény .
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: kapu48 »

Hiányzik az else ág:

Kód: Egész kijelölése

void loop() {
if (digitalRead(7)==HIGH){ // a bemenet

for (pos = 0; pos <= 40; pos +=3) { // szervo mozgatás egyik irány
myservo.write(pos);
villog();
}else{  // ha digitalRead(7)==LOW
for (pos = 40; pos >= 0; pos -=3) { // szervo mozgatás másik irány
myservo.write(pos);
villog();
}
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: K_JANOS »

Köszönöm Kapu48 , ki próbálom .
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: K_JANOS »

Sajnos Kapu48 nem működik , ha a 7-es bemenet L-szintre kerül megy minden tovább . A kapcsos zárójeleket helyre raktam mert nem lehetett lefordítani . Az arduino cc szerint else ág nélkül is kell müködni https://www.arduino.cc/reference/en/lan ... ucture/if/
A bemenetnek mindent meg kell állítani , nem csak a másik irányú mozgást . Arduino unoval probálom .

void loop() {
if (digitalRead(7)==HIGH){ // a bemenet

for (pos = 0; pos <= 40; pos +=3) { // szervo mozgatás egyik irány
myservo.write(pos);
villog();
}
}
else{ // ha digitalRead(7)==LOW
for (pos = 40; pos >= 0; pos -=3) { // szervo mozgatás másik irány
myservo.write(pos);
villog();
}
}
}

void villog()
{
digitalWrite(8, HIGH);
delay(40);
digitalWrite(8, LOW);
delay(40);
digitalWrite(8,HIGH);
delay(40);
digitalWrite(8, LOW);
delay(40);
digitalWrite(8, HIGH);
delay(40);
digitalWrite(8, LOW);
delay(800);
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: Lézer mozgató szervó program nem működik

Hozzászólás Szerző: kapu48 »

Akkor félre értettem a feladatott.
Ez a mozgás érzékelő biztosan tud L szintet biztosítani? Nem túl kicsi értékű a felhúzó ellenállás, és nem tudja lehúzni?
Próbáld csak a belső felhúzóval használni.

Kód: Egész kijelölése

pinMode(7, INPUT_PULLUP); // MOZGÁSÉRZÉKELŐ BEMENET (7-es lábon) ez így lenne igaz
A 13-as pinre van egy led kötve az alaplapon.

A 13-as digitális érintkezőt nehezebb digitális bemenetként használni, mint a többi digitális érintkezőt, mivel egy LED-et és egy ellenállást csatlakoztattak hozzá, amely a legtöbb kártyán a kártyára van forrasztva. Ha engedélyezi a belső 20k-os felhúzó ellenállását, akkor a várt 5V helyett 1,7 V körül fog lefagyni, mert a beépített LED és a soros ellenállás lehúzza a feszültségszintet, vagyis mindig ALACSONY visszatérést jelent. Ha a 13-as érintkezőt kell használnia digitális bemenetként, állítsa a pinMode() értékét INPUT értékre, és használjon külső lehúzó ellenállást.
https://docs.arduino.cc/learn/microcont ... gital-pins
Válasz küldése