Ich habe folgendes Problem: Bei einem Servo, den ich zusammen mit einem LCD und einem Abstandssensor am Arduino Motorshield(mit UNO) hängen habe, treten sehr seltsame Zuckungen auf. Eigentlich soll der Servo immer von 45°-135° drehen. Wie im Beitrag hier(Beitrag "Servo Arduino") beschrieben, hört der Spuk auf, wenn ich aus dem Quellcode die Zeilen für das Display und den PulseIn befehl auskommentiere. Hat einer evtl. das gleiche Problem und kann mir sagen woran es liegt? PS: Mein Servo: http://www.segor.de/#Q%3DArduinoMicroServo%26M%3D1 Mein LCD: http://arduino.cc/en/Main/GTFT Mein Abstandssensor: http://www.segor.de/#Q%3DHC-SR04%26M%3D1
Poste den Quellcode nächstes mal bitte in einem sinnvollen Dateiformat, dann kann man sich das hier auch inkl. Syntaxhighlighting online anschauen. Ohne sich den Quellcode jetzt also angeschaut zu haben: Vor allem die LCD-Ansteuerung benötigt Zeit (und das nicht zu knapp) und versaut dir vermutlich das Servo-Timing..
Auch wenn längere Quewllcodes in Dateiform hocchgeladen sollen...
1 | #include <TFT.h> |
2 | #include <SPI.h> |
3 | #include <Servo.h> |
4 | #define echo 4
|
5 | #define trig 10
|
6 | #define CS A3
|
7 | #define DC A2
|
8 | #define RES 7
|
9 | #define MOSI 6
|
10 | #define SCLK 2
|
11 | |
12 | Adafruit_ST7735 screen = Adafruit_ST7735(CS, DC, MOSI, SCLK, RES); |
13 | Servo myservo; // create servo object to control a servo |
14 | // a maximum of eight servo objects can be created
|
15 | int dis; |
16 | char disC[5]; |
17 | String disS; |
18 | int pos = 0; // variable to store the servo position |
19 | int freeRam () { |
20 | extern int __heap_start, *__brkval; |
21 | int v; |
22 | return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); |
23 | }
|
24 | void abstand(){ |
25 | digitalWrite(trig, LOW); |
26 | delayMicroseconds(2); |
27 | digitalWrite(trig, HIGH); |
28 | delayMicroseconds(10); |
29 | digitalWrite(trig, LOW); |
30 | //dis = pulseIn(echo, HIGH);
|
31 | disS = String(dis/58); |
32 | disS.toCharArray(disC, 5); |
33 | }
|
34 | void lcdtext(char *distance, char *text){ |
35 | screen.stroke(255, 255, 255); |
36 | screen.setTextSize(2); |
37 | screen.text(text, 0, 0); |
38 | screen.setTextSize(5); |
39 | screen.text(distance, 0, 25); |
40 | screen.stroke(0, 0, 0); |
41 | screen.text(distance, 0, 25); |
42 | }
|
43 | void setup() { |
44 | screen.initR(INITR_REDTAB); |
45 | screen.setRotation(1); |
46 | screen.background(0, 0, 0); |
47 | screen.setTextSize(5); |
48 | pinMode(echo, INPUT); |
49 | pinMode(trig, OUTPUT); |
50 | myservo.attach(5); // attaches the servo on pin 9 to the servo object |
51 | }
|
52 | |
53 | |
54 | void loop() { |
55 | |
56 | for(pos = 90; pos <180; pos += 1) // goes from 0 degrees to 180 degrees |
57 | { // in steps of 1 degree |
58 | myservo.write(pos); // tell servo to go to position in variable 'pos' |
59 | abstand(); |
60 | //lcdtext(disC, "Abstand(cm):");
|
61 | delay(75); // waits 15ms for the servo to reach the position |
62 | }
|
63 | for(pos = 180; pos>=90; pos-=1) // goes from 180 degrees to 0 degrees |
64 | {
|
65 | myservo.write(pos); // tell servo to go to position in variable 'pos' |
66 | abstand(); |
67 | //lcdtext(disC, "Abstand(cm)");
|
68 | delay(75); // waits 15ms for the servo to reach the position |
69 | }
|
70 | |
71 | }
|
12V DC schrieb: > Auch wenn längere Quewllcodes in Dateiform hocchgeladen sollen... Richtig. Von direkt posten hab ich nie was gesagt. Darum schrieb ich ja: sinnvolles Dateiformat. Eine ".c"-Datei kann das Forum online ordentlich anzeigen, hängt in dem Fall wohl echt nur an der Dateiendung.
:
Bearbeitet durch User
Gibt es irgendeine Möglichkeit, dies Problem des Zeitaufwandes bei der Ansteuerung eines LCD's zu vermeiden? z.B.: Das LCD nur alle Sekunde zu aktualisieren?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.