startposition servo

Gast #4342563
Lesenswert?
• ▲
▼
Hi leute ich habe ein problem:
ich steuere eine servo zwischen 0 und 180 grad an.
wenn ich den arduino einschalte will ich das er in die startposition von 
0grad fährt und dann auf knopfdruck losfährt. aber iwie wird der befehl 
ignoriert.
ich hab als ersten befehl in der loop myservo.write(0) stehen..damit er 
bevor er den taster abfragt dahin fährt...aber er tuts nicht?
iwer eine ahnung warum?
#4342572
Lesenswert?
• ▲
▼
simone schrieb:
> Hi leute ich habe ein problem:
> ich steuere eine servo zwischen 0 und 180 grad an.
> wenn ich den arduino einschalte will ich das er in die startposition von
> 0grad fährt und dann auf knopfdruck losfährt. aber iwie wird der befehl
> ignoriert.
> ich hab als ersten befehl in der loop myservo.write(0) stehen..damit er
> bevor er den taster abfragt dahin fährt...aber er tuts nicht?
> iwer eine ahnung warum?

loop ist sowieso schon die falsche Funktion.

In der Arduino Umgebung hast du 2 dir vorgegebene Funktionen.
Die eine ist setup(). In die kommt die ganze Initialisierung rein und 
alles was beim Start einmalig zu machen ist.

Die andere ist loop(), in der dann die laufend auszuführende 
Programmlogik kommt. Anders als setup() wird loop() vom Arduino 
Framework ständig und immer wieder aufgerufen. Daher ist dort NICHT der 
Ort um einmalige Hochfahr-Einstellungen zu machen.
#4342575
Lesenswert?
• ▲
▼
> aber iwie wird der befehl ignoriert.

Der Befehl wird ganz sicher nicht ignoriert. Ein Computer ist nicht in 
der Lage einen Befehl einfach so zu ignorieren. Dein Programm ist 
fehlerhaft. Sprich: Du gibst die falschen Befehle.

gewöhn dir eine derartige Ausrede gleich gar nicht an. Das ist die 
falsche Herangehensweise. Ein Computer macht exakt und zu 100% genau das 
was du ihm im Programm befohlen hast. Wenn das nicht das ist, was du 
eigentlich wolltest, dann ist das immer und zu 100% ein Indiz dafür, 
dass deine Befehle nicht mit dem übereinstimmen, was du eigentlich 
erreichen wolltest. Mit anderen Worten: Du ganz alleine bist die 
Schuldige, weil Du in deinen Befehlsfolgen fehlerhaft gearbeitet hast.
Gast #4342584
Lesenswert?
• ▲
▼
hey leute vieln dank für die schnellen antworten.. den befehl in die 
initialisierung reinzupacken hab ich auch schon versucht..hat auch nix 
gebracht drum dachte ich an die loop.

hier ist mein code:
1
 #include <Servo.h>  
2

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

6
int pos = 0;    // variable to store the servo position
7
int button=2;   // PIN2 als eingang für taster
8

9
void setup() {
10
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
11
  pinMode(button,INPUT_PULLUP); 
12
 myservo.write(pos);              
13
  
14
}
15

16
void loop() {
17

18
if(digitalRead(button)==LOW)
19
{
20
  for (pos = 0; pos <= 90; pos += 20) { // goes from 0 degrees to 180 degrees
21
    // in steps of 1 degree
22
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
23
    delay(15);                       // waits 15ms for the servo to reach the position
24
  }
25
  delay(2000);
26
  
27
    for (pos = 90; pos <= 180; pos += 20) { // goes from 0 degrees to 180 degrees
28
    // in steps of 1 degree
29
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
30
    delay(15);                       // waits 15ms for the servo to reach the position
31
  }
32

33
  delay(2000);
34
  
35
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
36
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
37
    delay(15);                       // waits 15ms for the servo to reach the position
38
  }
39
}
40

41
}

wo ist mein fehler?

lg simone
Gast #4342604
Lesenswert?
• ▲
▼
simone schrieb:
> den befehl in die
> initialisierung reinzupacken hab ich auch schon versucht.

Und hast du dem Servo auch Zeit gegeben, auf die Position zu fahren?

p.s. Es ist ausgesprochen mühselig deinen Code mit den ganze wilden 
Zeilenumbrüchen zu lesen. Entweder du hängst ihn als Anhang dran oder du 
packst ihn in Code-Tage, z.B. [ C] ... [ /C] (ohne Leerzeichen)
Gast #4342611
Lesenswert?
• ▲
▼
mein konstrukt steuert den servo so an, dass er von 0 grad bis 
90dreht...kurz wartet und dann auf 180dreht und am schluss wieder ohne 
zwischenstopp nach 0grad zurück. Genau das macht er auch nur das er wenn 
ich ihn dazwischen stopp und "abdrehe" gleich die 90 anfährt von wo aus 
er gerade steht. aber genau das will ich verhindern, er soll von 0 
wegfahren wenn ich den taster drücke

beim initialieren will ich dass er solange bei 0 bleibt bis ich den 
taster drücke

lg
#4342616
Lesenswert?
• ▲
▼
simone schrieb:
> mein konstrukt steuert den servo so an, dass er von 0 grad bis
> 90dreht...kurz wartet und dann auf 180dreht und am schluss wieder ohne
> zwischenstopp nach 0grad zurück.

Das geht aus dem Code hervor.

> Genau das macht er auch nur das er wenn
> ich ihn dazwischen stopp und "abdrehe" gleich die 90 anfährt von wo aus
> er gerade steht. aber genau das will ich verhindern, er soll von 0
> wegfahren wenn ich den taster drücke

Worauf ich eigentlich hinaus will:
Funktioniert denn deine Tasterabfrage?

Was istm wenn du einfach ein leeres
1
void setup() {
2
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
3
  pinMode(button,INPUT_PULLUP); 
4
  myservo.write(0);                
5
}
6

7
void loop()
8
{
9
}

machst, fährt dann das Servo zuverlässig in die 0° Position?
(Man kann bei abgeschalteter Spannungsversorgung auch vorsichtig mit der 
Hand verdrehen. Jedesmal wenn du dann die Spannungsversorgung wieder 
anlegst und damit das Programm neu startet, muss das Servo wieder in die 
0 Position fahren)

>
> beim initialieren will ich dass er solange bei 0 bleibt bis ich den
> taster drücke
>
> lg

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.