Arduino Uno & Stepper-Shield

OP #3086121
Lesenswert?
• ▲
▼
Hallo. Habe ein klitzekleines Problem mit meiner Programmierung.

Die Digitaleingänge werden nicht abgefragt. zumindest wird nix 
angenommen von denen.

wenn mir jemand einen "wink mit dem Zaunpfahl" geben könnte währ ich 
sehr dankbar.
1
/*Schrittmotorsteuerung für eine Barndormontierung
2

3
   Frequenz einstellbar und über SerialPort veränderbar
4
   
5
   by Michael H
6
   
7
   version 0.8b  
8
*/
9
boolean dirPinx     = 3;
10
boolean stepperPinx = 2;
11
boolean dirPiny     = 7;
12
boolean stepperPiny = 6;
13
boolean x_ein_dir   = 10; //Motor X Richtung
14
boolean en          = 12; //Motorfreigabe
15
boolean x_4         = 11; //Motor X 4Hz
16
int x_sensor        = A0; //X-Speed Poti
17
int x_sensor_val    = 0;  //X-Speed Speicher
18
boolean x           = 0;
19
int d_x             = true;
20
boolean enable      = false;
21
boolean dir_old     = false;
22
int serInp          = 0;
23

24
void setup() 
25
{
26
  Serial.begin(9600);
27
  pinMode(dirPinx, OUTPUT);
28
  pinMode(stepperPinx, OUTPUT);
29
  pinMode(dirPiny, OUTPUT);
30
  pinMode(stepperPiny, OUTPUT);
31
  pinMode(x_ein_dir, INPUT);
32
  pinMode(en, INPUT);
33
  pinMode(x_4, INPUT);
34

35
//interne Pullups:
36
    digitalWrite(x_ein_dir, HIGH);
37
    digitalWrite(en, HIGH);        
38
    digitalWrite(x_4, HIGH);
39
    
40
// Y-Achse auf 0
41
    digitalWrite(dirPiny, LOW);
42
    digitalWrite(stepperPiny, LOW);
43
}
44

45

46
void step(boolean dir)
47
{
48
  
49
  if(dir != dir_old)
50
  {
51
   digitalWrite(dirPinx,dir);
52
   delay(50);
53
  }
54

55
    digitalWrite(stepperPinx, HIGH);
56
    delayMicroseconds(x_sensor_val);
57
    digitalWrite(stepperPinx, LOW);
58
    delayMicroseconds(x_sensor_val);
59
    dir_old= dir;
60
    return;
61
}
62

63
void loop(){
64
  
65
  x = digitalRead(x_4);
66
  
67
    if (Serial.available()>0)
68
     { serInp = Serial.read();
69
       Serial.flush();
70
     }
71
 
72
    if( x = LOW )
73
     {
74
      x_sensor_val = 125;
75
     }
76
    else x_sensor_val = serInp;
77

78
  enable = digitalRead(en);
79

80
    if (enable = true)
81
     {
82
      d_x = digitalRead(x_ein_dir);
83
       if(d_x = true)
84
       {
85
         step(true);  
86
       }
87
       else
88
       {
89
         step(false);
90
       }
91
   }
92

93

94
}

mfg
Michael
#3087422
Lesenswert?
• ▲
▼
Michael Hakenkötter schrieb:
> Wow danke! ich hab mir einen Wolf gesucht!!!
>
> manchmal übersieht man die einfachsten dinge ;)

Es ist eigentlich ganz einfach.
Spar dir solche Sachen
1
    if (enable == true)

und dann kannst du da auch keinen Fehler machen.
Wenn enable sowieso schon ein boolscher Wert ist, dann brauchst du den 
nicht mit true zu vergleichen. Denn da kann nur dann als Ergebnis des 
ganzen Ausdrucks true rauskommen, wenn enable auch schon true war
1
    if (enable)

macht also ganz genau das gleiche. Nur ohne Potential für Tippfehler.

Leider weiß ich nicht, wie HIGH und LOW beim Arduino definiert ist. Aber 
wenn die Italiener nicht ganz bescheuert waren, dann haben sie LOW als 0 
und HIGH als 1 definiert. Wodurch man anstatt
1
    if( x == HIGH )
genausogut
1
    if( x )
schreiben kann, und anstelle von
1
    if( x = LOW )
kann man
1
    if( !x )
schreiben und hat wieder die Tippfehler-Gefahr gebannt.
Nennt man die Variable dann nicht einfach nur x, sondern gibt ihr einen 
sprechenden Namen, dann wird das ganze meistens sogar noch 
übersichtlicher als mit den ganzen Vergleichen.

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.