Lézer mozgató szervó program nem működik
Lézer mozgató szervó program nem működik
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);
}
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);
}
Re: Lézer mozgató szervó program nem működik
Akkor a 7-es lábbal lesz a gond...
próbaképp tedd át másik lábra, akkor működik-e...
próbaképp tedd át másik lábra, akkor működik-e...
Re: Lézer mozgató szervó program nem működik
Köszi meg Pipi próbálon , de ha van rajta felhúzó vagy lehúzó ellenállás nem számít .
Re: Lézer mozgató szervó program nem működik
Meg próbáltam másik bemenetet használni és arduino uno panelra töltöttem a szoftvert de semmi eredmény .
Re: Lézer mozgató szervó program nem működik
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();
}
Re: Lézer mozgató szervó program nem működik
Köszönöm Kapu48 , ki próbálom .
Re: Lézer mozgató szervó program nem működik
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);
}
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);
}
Re: Lézer mozgató szervó program nem működik
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.
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
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 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