Saintsmart LCD Keypad und ULN2003

Hallo, ich bin etwas verwirrt.
Ich habe ein LCD Keypad Shield V3 von Saintsmart auf einem UNO R3 dazu noch einen Motortreiber ULN2003.
Ich würde gern beides zusammen betreiben und über die Tasten des LCD Keypad Shield dem Motor sagen was er machen soll.
Das LCD Keypad Shield alleine funktioniert und auch der ULN2003 mit Steppermotor tut allein das was er soll.
Wenn jetzt beides am UNO hängt macht der Motor ausser einem kurzen brummen nichts mehr.
Laut Angaben des LCD Keypad Shields werden die Pins an denen ich mit dem ULN2003 hänge nicht genutzt.
Hat jemand eine Idee warum es trotzdem nicht geht ?

Zum Testen hatte ich das folgenden Sketch genommen.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 
#include <Stepper.h>
int SPU = 2400;
Stepper Motor(SPU, 2,11,12,3);

int Taster = 0;
int Analogwert = 0;
#define Tasterrechts 0
#define Tasteroben 1
#define Tasterunten 2
#define Tasterlinks 3
#define Tasterselect 4
#define KeinTaster 5



int Tasterstatus()
{
Analogwert = analogRead(A0); // Auslesen der Taster am Analogen Pin A0.
if (Analogwert > 1000) return KeinTaster;
if (Analogwert < 50) return Tasterrechts;
if (Analogwert < 195) return Tasteroben;
if (Analogwert < 380) return Tasterunten;
if (Analogwert < 555) return Tasterlinks;
if (Analogwert < 790) return Tasterselect;

return KeinTaster; // Ausgabe wenn kein Taster gedrückt wurde.
}
// Hier wird der Programmblock "Tasterstatus" abeschlossen.


void setup()
{
lcd.begin(16, 2); // Starten der Programmbibliothek.
lcd.setCursor(0,0); // Angabe des Cursorstartpunktes oben links.
lcd.print("Funduino GmbH"); // Ausgabe des Textes "Nachricht".
Motor.setSpeed(5);
}

void loop()
{
lcd.setCursor(12,1); // Bewegt den Cursor in Zeile 2 (Line0=Zeile1 und Line1=Zeile2) and die Stelle "12".
lcd.print(millis()/1000); // Zeigt die Sekunden seit Start des Programms in Sekunden an.
lcd.setCursor(0,1); // Bewegt den Cursor and die Stelle "0" in Zeile 2.

Taster = Tasterstatus(); //Hier springt der Loop in den oben angegebenen Programmabschnitt "Tasterstatus" und liest dort den gedrückten Taster aus.

switch (Taster) // Abhängig von der gedrückten Taste wird in dem folgenden switch-case Befehl entschieden, was auf dem LCD angezeigt wird.
{
case Tasterrechts: // Wenn die rechte Taste gedrückt wurde...
{
lcd.print("Rechts      "); //Erscheint diese Zeile. Die Leerzeichen hinter dem Text sorgen dafür, dass der vorherige Text in der Zeile gelöscht wird.
break;
}
case Tasterlinks:  // Wenn die linke Taste gedrückt wurde...
{
lcd.print("Links       ");  //Erscheint diese Zeile... usw...
break;
}
case Tasteroben:
{
lcd.print("Oben        ");
break;
}
case Tasterunten:
{
lcd.print("Unten     ");
Motor.step(200);
break;
}
case Tasterselect:
{
lcd.print("SELECT      ");
break;
}
case KeinTaster:
{
lcd.print("Keine Taste ");
break;
}
} //switch-case Befehl beenden
} //Loop beenden

DANKE

Hi

Setze Deinen Sketch bitte in Code-Tags - Das geht auch nachträglich per Edit. ([code*] davor und [/code*] dahinter - ohne die *)

Was heißt, daß der Motor 'nur kurz brummt'? Laut Deinem Sketch wird Dieser für 200 Schritte angesteuert, wenn 'Tasterunten' betätigt wird. Wenn der Stepper mit dem gleichen Aufbau, aber anderem Sketch, funktioniert, hast Du irgendwo Etwas anders.

ULN2003 klingt nach 28BYJ-48 - sicher, daß die Stepper-Lib Diesen nicht wie einen 'normalen' Stepper ansprechen will? Beim 28BYJ-48 ist jeweils nur einer der Ausgänge des ULN aktiv - beim normalem Stepper sind in Vollschritt immer 2 Ausgänge HIGH.

MfG

Danke für das editieren des Sketches.

Das mit den 200 Schritten soll er eigentlich auch machen, tut er aber nicht.
Der Motor ist aus einem Zeitrafferturntable (Item # PK245M-03AA, Stepper Motor On Oriental Motor USA) und der ULN2003 ist der einzige Motortreiber den ich da hatte.
Wenn ich das ganze ohne das LCD Keypadshield betreibe macht der Motor ja auch ganz brav das was er soll. Daher gehe ich mal davon aus das die Kombi grundsätzlich spielt.
Mit dem Sketch geht der Motor. Wenn ich jetzt das LCD KeypadShield dazwischen packe geht das auch nicht mehr.

#include <Stepper.h> 
int SPU = 2400; 
Stepper Motor(SPU, 2,11,12,3); 

void setup() 
{
Motor.setSpeed(5); 

void loop() {
Motor.step(200); 
delay(1000); 
Motor.step(-200); 
delay(1000); 
}

Hi

Drücke in der IDE Mal STRG+T - Das rückt den Code auf Klammer-Ebene ein.
Stichwort: in dem switch-case-Block werden Klammern nur selten gebraucht - hier blähen Sie nur den Sketch auf.
(wenn man z.B. in einem der cases eine lokale Variable benötigt, braucht’s die Klammern)

Wenn Du in dem funktionierendem Test-Sketch das Motor.step(-200); rausnimmst, fährt der Motor dann noch hin und her?
JA → die Zahl gibt die Anzahl an Schritte an
NEIN → Die Zahl gibt die Zielposition an - in Deinem LCD-Sketch sendest Du nur 200 an die Stepper-Lib.

MfG

Mit welcher Spannung/Netzteil betreibst du deine Anordnung ?

Ich vermute der Strom reicht nicht, um alles zu betreiben.

Wenn ich die -200 aus dem Sketch raus nehme dann geht der Motor nur noch in eine Richtung, also Ja, Anzahl der Schritte.

Stromtechnisch hab ich es sowohl per USB probiert als auch mit dem 9V Netzteil. Gleiches Problem.

Hi

Schade - war eine tolle Theorie :) Am Sketch sehe ich nicht, wo es klemmt - Du kommst aber in die Verzweigung auch rein?

mfG

hollescm:
Wenn ich die -200 aus dem Sketch raus nehme dann geht der Motor nur noch in eine Richtung, also Ja, Anzahl der Schritte.

Stromtechnisch hab ich es sowohl per USB probiert als auch mit dem 9V Netzteil.
Gleiches Problem.

Dann solltest du die Spannung mal im Betrieb nachmessen.
Am Arduino und am Motortreiber.

Ich bin nur total verwirrt.
Ich hab den Aufbau zum testen einfach mal mit einer LED gemacht.
Ziel → Taster rechts LED an, Taster links LED aus
folgender Sketch.

#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Angabe der erforderlichen Pins'



int Taster = 0;
int Analogwert = 0;
#define Tasterrechts 0
#define Tasteroben 1
#define Tasterunten 2
#define Tasterlinks 3
#define Tasterselect 4
#define KeinTaster 5

 
// Ab hier wird ein neuer Programmblock mit dem Namen "Tasterstatus" erstellt. Hier wird ausschließlich geprüft, welcher Taster gedrückt ist.
int Tasterstatus()
{
Analogwert = analogRead(A0); // Auslesen der Taster am Analogen Pin A0.
if (Analogwert > 1000) return KeinTaster;
if (Analogwert < 50) return Tasterrechts;
if (Analogwert < 195) return Tasteroben;
if (Analogwert < 380) return Tasterunten;
if (Analogwert < 555) return Tasterlinks;
if (Analogwert < 790) return Tasterselect;
 
return KeinTaster; // Ausgabe wenn kein Taster gedrückt wurde.
}
// Hier wird der Programmblock "Tasterstatus" abeschlossen.


void setup()
{
lcd.begin(16, 2); // Starten der Programmbibliothek.
lcd.setCursor(0,0); // Angabe des Cursorstartpunktes oben links.
lcd.print("Funduino GmbH"); // Ausgabe des Textes "Nachricht".

pinMode(2, OUTPUT);
}
 
void loop()
{
lcd.setCursor(12,1); // Bewegt den Cursor in Zeile 2 (Line0=Zeile1 und Line1=Zeile2) and die Stelle "12".
lcd.print(millis()/1000); // Zeigt die Sekunden seit Start des Programms in Sekunden an.
lcd.setCursor(0,1); // Bewegt den Cursor and die Stelle "0" in Zeile 2.

Taster = Tasterstatus(); //Hier springt der Loop in den oben angegebenen Programmabschnitt "Tasterstatus" und liest dort den gedrückten Taster aus.

switch (Taster) // Abhängig von der gedrückten Taste wird in dem folgenden switch-case Befehl entschieden, was auf dem LCD angezeigt wird.
{
case Tasterrechts: // Wenn die rechte Taste gedrückt wurde...
{
lcd.print("Rechts      "); //Erscheint diese Zeile. Die Leerzeichen hinter dem Text sorgen dafür, dass der vorherige Text in der Zeile gelöscht wird.
digitalWrite(2, HIGH);

break;
}
case Tasterlinks:  // Wenn die linke Taste gedrückt wurde...
{
lcd.print("Links       ");  //Erscheint diese Zeile... usw...
digitalWrite(2, LOW);

break;
}
case Tasteroben:
{
lcd.print("Oben        ");
break;
}
case Tasterunten:
{
lcd.print("Unten     ");

break;
}
case Tasterselect:
{
lcd.print("SELECT      ");
break;
}
case KeinTaster:
{
lcd.print("Keine Taste ");
break;
}
} //switch-case Befehl beenden
} //Loop beenden

geht auch nicht.
Jetzt hatte ich die Vermutung das es auf dem KEypadshield vielleicht eine kalte Lötstelle gibt.
Hab also das Kabel was zur LED geht einfach mal unten an den UNO gehalten, am PIN 2, und siehe da es geht.
War für mich die Erklärung war für ne kalte Lötstelle.
Ich also neues LCD Keypadshield bestellt.
Das kam grad und macht die gleichen Fehler.
Hat jemand ne Idee ??

Stimmen die vorgegebenen analogen Werte ? Hast du die mal am seriellen Monitor angezeigt ?

Ich hab grad mal das LCD KeypadShield verkabelt und nicht direkt auf den Uno gesteckt. Was soll ich sagen, so gehts. Also ist wohl doch die werksseitig aufgelötete Pinliste Schrott.

Oder ?

hollescm: Ich hab grad mal das LCD KeypadShield verkabelt und nicht direkt auf den Uno gesteckt. Was soll ich sagen, so gehts. Also ist wohl doch die werksseitig aufgelötete Pinliste Schrott.

Oder ?

Das kann man doch sicher leicht ausmessen, oder ?

Klar kann man das, aber das ist doch viel zu einfach :confused:

hollescm: Klar kann man das, aber das ist doch viel zu einfach :confused:

Für dich dann wohl nicht.

Doch, aber warum auch immer bin ich nicht auf die Idee gekommen. 8)