Guten Abend ,
Ich habe ein Problem mit meinem Programm , ich steuere 4 Stepper über
Driver mit einem Arduino an . Bewegen sollen sich die wenn man die
Joysticks bewegt . In 0 Stellung (512) sollten sie verweilen . Alles
soweit so gut , wenn ich nur einen Joystick programmiere funktioniert
alles so wie es soll . Definiere ich 4 Stepper bewegen sich bei allen
Joysticks alle Stepper gleichzeitig und nicht der Stepper der den
Joystick zugewiesen ist
Ich verwende die <AccelStepper.h> für die Ansteuerung .
Wo liegt das Problem ? Ich habe das Gefühl das die Zuweisungen der Potis
zu den Stepper nicht passt ? Zumindestens hat es den Anschein . ....
Gruß
Dominik Loher schrieb:> Definiere ich 4 Stepper bewegen sich bei allen> Joysticks alle Stepper gleichzeitig und nicht der Stepper der den> Joystick zugewiesen ist
ja wie nun ?
Du definierst 4 Stepper und wunderst Dich das alle 4 laufen?
Läuft doch alles prima !
Kopfkratz..
spess53 schrieb:> Hi>>>stepper0.setSpeed(512-analog_in0) ;>> Glaubst du, das bei dem Joystick in Nullstellung immer 512 gelesen wird?>> MfG Spess
Nein ist mir auch klar , er zuckt ab und zu leicht ! Darum geht es nicht
das weiß ich und ist mir bewusst ....Schritt für Schritt darum kümmere
ich mich anschließend :) .
Hab ich einen Fehler in der Definition beim anmelden der Eingänge ect
gemacht ? Die Werte der einzelnen Eingänge greifen in einem anderen
Eingang ein .Ich weiß nicht wie ich das sinnvoll erklären soll -.-
Stephan Henning schrieb:> Dominik Loher schrieb:>> Definiere ich 4 Stepper bewegen sich bei allen>> Joysticks alle Stepper gleichzeitig und nicht der Stepper der den>> Joystick zugewiesen ist>> ja wie nun ?> Du definierst 4 Stepper und wunderst Dich das alle 4 laufen?> Läuft doch alles prima !>> Kopfkratz..
Ich definiere 4 Stepper und 4 Joysticks , wird Joystick 1 bewegt soll
sich Stepper1 Bewegen . Es bewegen sich leider aber alle !!!
Ich habe gerade Serial.println(A0) mir anzeigen lassen . Er gibt einen
Wert von 54 aus !!! Das muss doch ein Programm Fehler sein . Der Wert
bleibt konstant , er ändert sich auch nicht beim bewegen eines Joysticks
.
Hi
Gurgel sagt zu setSpeed:
Parameters
rpms: the speed at which the motor should turn in rotations per minute -
a positive number (long)
^^^^^^^^^^^^^^^^^^^^^^
Der ADC gibt Werte zwischen 0 und 1023 aus. Das passt nicht zu deinem
512-analog_in0.
MfG Spess
spess53 schrieb:> Hi>> Gurgel sagt zu setSpeed:>> Parameters>> rpms: the speed at which the motor should turn in rotations per minute -> a positive number (long)> ^^^^^^^^^^^^^^^^^^^^^^>> Der ADC gibt Werte zwischen 0 und 1023 aus. Das passt nicht zu deinem> 512-analog_in0.>> MfG Spess
Servus Spess,
ich versteh das gerade nicht , also die Funktion funktioniert mit einem
Stepper einwandfrei .Bei mehreren Steppern funktioniert es nicht mehr
Ja der ADC gibt einen Wert von 0-1023 aus , wird der Joystick nicht
bewegt gibt der ADC 511 (+-2) aus . Nach der Rechnung liegt also an der
Funktion Setspeed in diesem Moment ein Wert von ca 0 an das heißt der
Motor bewegt sich nicht . Er wird bewegt bei größer 0 im Uhrzeigersinn
und kleiner 0 gegen den Uhrzeigersinn .
Gruß
Hi
>Nach der Rechnung liegt also an der>Funktion Setspeed in diesem Moment ein Wert von ca 0 an das heißt der>Motor bewegt sich nicht . Er wird bewegt bei größer 0 im Uhrzeigersinn>und kleiner 0 gegen den Uhrzeigersinn .
Wenn ich Gurgel trauen darf wird die Richtung mit 'steps' eingestellt:
Parameters
steps: the number of steps to turn the motor - positive to turn one
direction, negative to turn the other (int)
MfG Spess
Ja genau das entspricht ja meinem obigen Kommentar .Steht eine 0 darin ,
bewegt er sich nicht . steht eine +500 darin bewegt er sich mit 500
Steps jede Sekunde im Uhrzeigersinn . Würde -500 darin stehen bewegt er
sich mit 500 Steps gegen den Uhrzeigersinn
Das Programm funktioniert mit einem Stepper -> #include <AccelStepper.h>
//Stepper Definieren
AccelStepper stepper1(1, 4, 3); // 1= Driver , 4= Step , 3=
F/R
void setup()
{
stepper1.setMaxSpeed(10000);
stepper1.setAcceleration(10000);
Serial.begin(9600);
analogReadResolution(10);
}
void loop()
{
// Read new position Stepper 1
int analog_in = analogRead(A1);
stepper1.setSpeed(2*(511 - analog_in)) ;
stepper1.run()
;}
Wenn ich noch einen Stepper mit einbinde , übersprechen sich die
Eingänge .
Dann probier halt erst mal rauszufinden, ob das Problem bei den Joystick
Werten liegt oder bei den Steppern.
Den Ansatz hast du ja schon gemacht. println ist dein Freund. Jetzt
musst du halt einen Schritt weiter gehen. Wenn du nicht weißt, was im
Programm vor sich geht, dann muss man das rausfinden
1
voidloop()
2
{
3
intanalog_in0=512-analogRead(ANALOG_IN0);
4
intanalog_in1=512-analogRead(ANALOG_IN1);
5
intanalog_in2=512-analogRead(ANALOG_IN2);
6
intanalog_in3=512-analogRead(ANALOG_IN3);
7
8
Serial.print(A0);Serial.print(' ');
9
Serial.print(A1);Serial.print(' ');
10
Serial.print(A2);Serial.print(' ');
11
Serial.print(A3);Serial.println("");
12
13
stepper0.setSpeed(analog_in0);
14
stepper0.run();
15
16
stepper1.setSpeed(analog_in1);
17
stepper1.run();
18
19
stepper2.setSpeed(analog_in2);
20
stepper2.run();
21
22
stepper3.setSpeed(analog_in3);
23
stepper3.run();
24
}
Das probierst du mal aus und siehst dir mal die Zahlenwerte an, die du
von den Joysticks bekommst. Wenn die in Ordnung sind, dann muss man sich
die Stepper man näher ansehen. Wenn die Werte nicht in Ordnung sind,
dann muss man mal die Verdrahtung der Joysticks kontrollieren bzw. auch
mal kontrollieren, ob nicht die Schrittmotoren dir die
Versorgungsspannung versauen.
Du hast eine Serielle Schnittstelle, über die du Ausgaben machen kannst.
Nutze sie, damit dir dein Programm helfen kann, zu verstehen was vor
sich geht!
Karl Heinz schrieb:> Dann probier halt erst mal rauszufinden, ob das Problem bei den Joystick> Werten liegt oder bei den Steppern.>> Den Ansatz hast du ja schon gemacht. println ist dein Freund. Jetzt> musst du halt einen Schritt weiter gehen. Wenn du nicht weißt, was im> Programm vor sich geht, dann muss man das rausfinden>>> Serial.print( A0 ); Serial.print( ' ' );> Serial.print( A1 ); Serial.print( ' ' );> Serial.print( A2 ); Serial.print( ' ' );> Serial.print( A3 ); Serial.println( "" );
Schon mal einen Dank an dich , C** ist bei mir leider schon wieder über
ein Semester vorbei . Ich bin mir gerade nicht mehr sicher worin der
unterschied zwischen .print() und .println() liegt .
.print() für ASCII und .println für jeden Zahlenwert ?
Wieso hast du einmal so und dann mal so ?
Karl Heinz schrieb:> Dann probier halt erst mal rauszufinden, ob das Problem bei den Joystick> Werten liegt oder bei den Steppern.>> Den Ansatz hast du ja schon gemacht. println ist dein Freund. Jetzt> musst du halt einen Schritt weiter gehen. Wenn du nicht weißt, was im> Programm vor sich geht, dann muss man das rausfinden>>> Serial.print( A0 ); Serial.print( ' ' );> Serial.print( A1 ); Serial.print( ' ' );> Serial.print( A2 ); Serial.print( ' ' );> Serial.print( A3 ); Serial.println( "" );
Schon mal einen Dank an dich , C** ist bei mir leider schon wieder über
ein Semester vorbei . Ich bin mir gerade nicht mehr sicher worin der
Unterschied zwischen .print() und .println() liegt .
.print() für ASCII und .println für jeden Zahlenwert ?
Wieso hast du einmal so und dann mal so ?
Okay wie schon vermutet , die Analogen-Werte passen mal gar nicht . ->"
54 55 56 57". Beim bewegen des Joysticks ändern Sie sich auch nicht ,der
Roboter bewegt sich aber irgendwie ganz langsam bzw die Achsen .
>>Schon mal einen Dank an dich , C** ist bei mir leider schon wieder über>>ein Semester vorbei . Ich bin mir gerade nicht mehr sicher worin der>>Unterschied zwischen .print() und .println() liegt .
Student, und so wenig Ahnung?
Du hast doch einen Browser vor dir, mit dem du in diesem Forum
Schreibst.
Rechts oben ist eine Sucheingabe. Stell die auf Google und gib "Arduino
println" ein. Schon landest du auf der Referenz, welche die Unterschiede
beschreibt.
Da wäre schneller gewesen, als deinen Text hier einzutippern.
Achja, println ist wie print, nur das ein Zeilenumbruch noch hinten dran
kommt.
PittyJ schrieb:>>>Schon mal einen Dank an dich , C** ist bei mir leider schon wieder über>>>ein Semester vorbei . Ich bin mir gerade nicht mehr sicher worin der>>>Unterschied zwischen .print() und .println() liegt .>> Student, und so wenig Ahnung?> Du hast doch einen Browser vor dir, mit dem du in diesem Forum> Schreibst.> Rechts oben ist eine Sucheingabe. Stell die auf Google und gib "Arduino> println" ein. Schon landest du auf der Referenz, welche die Unterschiede> beschreibt.>> Da wäre schneller gewesen, als deinen Text hier einzutippern.>> Achja, println ist wie print, nur das ein Zeilenumbruch noch hinten dran> kommt.
Zum ersten , man muss doch nicht gleich beleidigend werden, ich mach
immer noch Fachrichtung Industrietechnik , hier kommt C** und MC
ziemlich kurz bzw MC gar nicht vor ! Zum zweiten fragen darf man doch
noch , man kann auch schnell mal was falsch verstehen sicherlich hab ich
in Google gesucht .
Und danke für die Antwort
Langsam habe ich das Gefühl das dieser Ominöse neue ATMEL ARM Cortex-M3
das Problem ist .
Neu am Markt , und die Software funktioniert auch nicht einwandfrei .
Die Joysticks sind an +3.3Volt und Ground angeschlossen und die
anzapfungen am Eingang AO,A1....
Dominik Loher schrieb:>> Achja, println ist wie print, nur das ein Zeilenumbruch noch hinten dran>> kommt.>> Zum ersten , man muss doch nicht gleich beleidigend werden, ich mach> immer noch Fachrichtung Industrietechnik
erstens ist das völlig wurscht was du studierst und zweitens gilt auch
dann genau dasselbe.
Für die Arduino Funktionen und Klassen gibt es Doku. Gerade wenn du
Indistrietechnik studierst, solltest du lernen als erstes immer nach
Doku zu suchen.
> , hier kommt C**
du könntest wenigstens den Namen deiner Programmiersprache richtig
schreiben. Die Sprache heißt C++ und nicht C**
> und MC> ziemlich kurz bzw MC gar nicht vor !
Und?
Was ändert das daran, dass es Doku dafür gibt und du dort reinschauen
könntest?
Was denkst du was ich gemacht habe? Und dabei programmier ich noch nicht
einmal für einen Arduino.
> Zum zweiten fragen darf man doch> noch
Das kommt auf die Frage an.
Ja es gibt sie: die dummen Fragen, auf die man eine dumme Antwort
kriegt.
> Die Joysticks sind an +3.3Volt und Ground angeschlossen und die> anzapfungen am Eingang AO,A1....
Ok.
Und, was sagen die Werte?
> Langsam habe ich das Gefühl das dieser Ominöse neue> ATMEL ARM Cortex-M3 das Problem ist
Ehe du diese Möglichkeit in Betracht ziehst, solltest du erst mal davon
ausgehen, dass das Problem bei dir liegt. So wie in 99.5% aller anderen
Fälle.
Falls die Werte verrückt spielen:
Hast du schon mal die Werte beobachtet, wenn du die Motoren NICHT
angeschlossen hast? Nur für den Fall, dass es sich noch nicht
rumgesprochen hat: Motoren können Schweine sein, wenn es um die
Versorgungsspannung geht.
Dominik Loher schrieb:> Ich habe gerade Serial.println(A0) mir anzeigen lassen . Er gibt einen> Wert von 54 aus !!!
Warum sollte sich die Pinnummer auch ändern?
Mike schrieb:> Dominik Loher schrieb:>> Ich habe gerade Serial.println(A0) mir anzeigen lassen . Er gibt einen>> Wert von 54 aus !!!>> Warum sollte sich die Pinnummer auch ändern?
Ach Mist.
Und ich Dolm kopier den Dreck auch noch weiter und merks nicht.
Ich suche mit heute schon 3 Tage nach dem Fehler , irgendwann ist man
einfach am verzweifeln ....
Erfahrung ist durch nichts zu ersetzen und man überfliegt als Anfänger
einfach mal wichtige Details
Werden mehrere Eingänge abgefragt stimmen die Werte nicht mehr ...
Hab ich schon geschrieben es werden diese Werte ausgegeben A0= 54 A1= 55
A2=56 A3=57
Dominik Loher schrieb:> Hab ich schon geschrieben es werden diese Werte ausgegeben A0= 54 A1= 55> A2=56 A3=57
Ja, weil das die internen Pinnummern sind und nicht die Werte, die
eingelesen werden.
Wenn du mittels
1
intanalog_in0=512-analogRead(ANALOG_IN0);
dir den Wert vom Analogeingang A0 in die Variable analog_in0 holst, dann
wäre es ganz gut, dann auch den Wert von analog_in0 auszugeben um zu
sehen, welcher Wert jetzt kommt.
> und man überfliegt als Anfänger einfach mal wichtige Details
Ich tu mir da jetzt schwer etwas dazu zusagen, immerhin hab ich selbst
nicht aufgepasst.
Aber wenn sich Werte plötzlich ändern bzw. nicht das sind was sie
eigentlich sein sollten, dann sollte man mal etwas kritisch in sein
eigenes Programm sehen und auch die Möglichkeit in Betracht ziehen, dass
man sich bei der Ausgabe der Werte vertan hat.
Karl Heinz schrieb:> Dominik Loher schrieb:>>> Hab ich schon geschrieben es werden diese Werte ausgegeben A0= 54 A1= 55>> A2=56 A3=57>> Ja, weil das die internen Pinnummern sind und nicht die Werte, die> eingelesen werden.>> Wenn du mittels>
1
>intanalog_in0=512-analogRead(ANALOG_IN0);
2
>
> dir den Wert vom Analogeingang A0 in die Variable analog_in0 holst, dann> wäre es ganz gut, dann auch den Wert von analog_in0 auszugeben um zu> sehen, welcher Wert jetzt kommt.
Hab ich auch schon versucht , es bleibt alles beim alten . Hab auch mal
pausen dazwischen gesetzt ....
Karl Heinz schrieb:>> und man überfliegt als Anfänger einfach mal wichtige Details>> Ich tu mir da jetzt schwer etwas dazu zusagen, immerhin hab ich selbst> nicht aufgepasst.> Aber wenn sich Werte plötzlich ändern bzw. nicht das sind was sie> eigentlich sein sollten, dann sollte man mal etwas kritisch in sein> eigenes Programm sehen und auch die Möglichkeit in Betracht ziehen, dass> man sich bei der Ausgabe der Werte vertan hat.
Damit hab ich mich den letzten tagen befasst .... ein zweiter hat auch
schon darüber geschaut !
Das Programm ist ja ansich echt ein Witz , es ist weder kompliziert ....
Wenn ich nur die Analogen Eingänge abfrage und diese Ausgebe , passiert
das selbe . Gruß
D. Chung schrieb:> Karl Heinz schrieb:>> Dominik Loher schrieb:>>>>> Hab ich schon geschrieben es werden diese Werte ausgegeben A0= 54 A1= 55>>> A2=56 A3=57>>>> Ja, weil das die internen Pinnummern sind und nicht die Werte, die>> eingelesen werden.>>>> Wenn du mittels>>
1
>>intanalog_in0=512-analogRead(ANALOG_IN0);
2
>>
>> dir den Wert vom Analogeingang A0 in die Variable analog_in0 holst, dann>> wäre es ganz gut, dann auch den Wert von analog_in0 auszugeben um zu>> sehen, welcher Wert jetzt kommt.>> Hab ich auch schon versucht , es bleibt alles beim alten .
Das kann nicht sein.
Deine Ausgaben können nicht 54, 55, 56, und 57 sein und sich nicht
verändern.
Überleg doch mal ein bischen wenn es dich 3 Tage lang schon nicht
stutzig macht, dass die Werte aufsteigend sind.
>>> dir den Wert vom Analogeingang A0 in die Variable analog_in0 holst, dann>>> wäre es ganz gut, dann auch den Wert von analog_in0 auszugeben um zu>>> sehen, welcher Wert jetzt kommt.>>>> Hab ich auch schon versucht , es bleibt alles beim alten .>> Das kann nicht sein.> Deine Ausgaben können nicht 54, 55, 56, und 57 sein und sich nicht> verändern.> Überleg doch mal ein bischen wenn es dich 3 Tage lang schon nicht> stutzig macht, dass die Werte aufsteigend sind.
Ja sicher macht es mich stuzig. Hast du denn eine Lösung ? Ich habe
doch das Programm online gestellt .
Mich macht mehr stuzig , wieso stürzt das Programm ständig ab ( 1.5.5
-r2 Beta ) die früheren Versionen funktionierten einwandfrei nur leider
bin ich mit dem DUE an diese Version gebunden .
Wieso funktioniert die Übertragung nur jedes 3te mal ?
Wieso muss ich die Reset taste genau zu diesem Zeitpunkt am Arduino
drücken damit das Programm überhaupt überspielt werden kann , wobei das
nirgends beschrieben ist ...
Die Variante für 4 Eingänge -.-
So ich hab gerade versucht nur einen Eingang abzufragen , das
funktioniert jetzt auch nicht mehr .
Die Console gibt jetzt auch 54 aus ...
D. Chung schrieb:> mit dem DUE
Und ich wollte Dir schon Code für den ATmega328 nahelegen, weil Du immer
mit 10 Bit Werten vom ADC gerechnet hast.
Der ADC vom Due hat 12 Bit Auflösung, wenn ich das Datenblatt richtig
lese.
m.n. schrieb:> D. Chung schrieb:>> mit dem DUE>> Und ich wollte Dir schon Code für den ATmega328 nahelegen, weil Du immer> mit 10 Bit Werten vom ADC gerechnet hast.> Der ADC vom Due hat 12 Bit Auflösung, wenn ich das Datenblatt richtig> lese.
Ja stimmt , aber mit dem Befehl
analogReadResolution(10);
wird auf 10 festgesetzt .
Im Auslieferungszustand ist er aber auch auf 10 fixiert . Ich wollte nur
nochmal sicher gehen
Hm, habe gerade meinen Due angeschlossen. Minimalprogramm:
void setup()
{
Serial.begin(9600);
}
void loop()
{
int analog_in0 = analogRead(A0);
int analog_in1 = analogRead(A1);
int analog_in2 = analogRead(A2);
int analog_in3 = analogRead(A3);
Serial.print(analog_in0);
Serial.print(" / ");
Serial.print(analog_in1);
Serial.print(" / ");
Serial.print(analog_in2);
Serial.print(" / ");
Serial.print(analog_in3);
Serial.println();
delay(200);
}
Die Eingänge sind unbeschaltet, und floaten da so rum
350 448 518 / 223
350 449 518 / 223
351 450 520 / 224
352 451 521 / 225
353 452 522 / 225
Alles Ok, an einem ATSAM kann es nicht liegen, wenn es bei dir nicht
geht.
PittyJ schrieb:> Nein, nachdem der tty-Port eingestellt war, ging alles problemlos.>> Version 1.5.2 unter Macos.
Danke dann werd ich diese Version mal testen .