Macroschlitten mit Arduino und Nextion Display
Wozu braucht man einen Macroschlitten?
Der Aufbau
Funktion
Programmcode
Für die Ansteuerung des Nextion Display verwende ich die Serielle Schnittstelle. Über den CHAR BUTTON lese ich den Code aus den das Display sendet, wenn eine Taste gedrückt wird. Dieser Code wird dann nur über die IF Anweisung abgefragt. In meinem Fall wird auch nur eine Stelle des Code abgefragt.
Um das Programm auf das Display zu laden, die Datei auf eine SD Karte legen und diese dann in das Display stecken und anschalten. Der Upload der Datei läuft automatisch, danach muss das Display wieder ausgeschalten werden, SD Karten entfernen und mit dem nächsten einschalten ist das Programm für das Display da.
#include
#include
int MS1 = 5;
int MS2 = 6;
int MS3 = 7;
int EN = 4;
int Step = 9;
int Dir =10;
int Index;
char button [7] = {};
void setup() {
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(MS3, OUTPUT);
pinMode(EN, OUTPUT); //Enable
pinMode(Step, OUTPUT); //Step
pinMode(Dir, OUTPUT); //Direction
digitalWrite(EN, LOW);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0)
{
for (int i = 0; i < 6; i++) {
button[i] = button[i + 1];
}
button[6] = Serial.read();
}
//10er Step UP
if (button[2] == 1)
{
digitalWrite(Dir, LOW);
for (Index = 0; Index < 10; Index++)
{
digitalWrite(Step, HIGH);
delayMicroseconds(500);
digitalWrite(Step, LOW);
delayMicroseconds(500);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
//10er Step DOWN
if (button[2] == 4)
{
digitalWrite(Dir, HIGH);
for (Index = 0; Index < 10; Index++)
{
digitalWrite(Step, HIGH);
delayMicroseconds(500);
digitalWrite(Step, LOW);
delayMicroseconds(500);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
//100er Step UP
if (button[2] == 6)
{
digitalWrite(Dir, LOW);
for (Index = 0; Index < 100; Index++)
{
digitalWrite(Step, HIGH);
delayMicroseconds(500);
digitalWrite(Step, LOW);
delayMicroseconds(500);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
//100er Step DOWN
if (button[2] == 7)
{
digitalWrite(Dir, HIGH);
for (Index = 0; Index < 100; Index++)
{
digitalWrite(Step, HIGH);
delayMicroseconds(500);
digitalWrite(Step, LOW);
delayMicroseconds(500);
for (int (i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
//1000er Step UP
if (button[2] == 9)
{
digitalWrite(Dir, LOW);
for (Index = 0; Index < 1000; Index++)
{
digitalWrite(Step, HIGH);
delayMicroseconds(500);
digitalWrite(Step, LOW);
delayMicroseconds(500);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
//1000er Step DOWN
if (button[2] == 10)
{
digitalWrite(Dir, HIGH);
for (Index = 0; Index < 1000; Index++)
{
digitalWrite(Step, HIGH);
delayMicroseconds(500);
digitalWrite(Step, LOW);
delayMicroseconds(500);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
// Modus 1
if (button[2] == 12)
{
String cmd;
cmd += "\"";
Serial.print("tModus.txt=" + cmd + "Modus 1" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.print("tModus.txt=" + cmd + "Modus 1" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
digitalWrite (MS1,LOW);
digitalWrite (MS2,LOW);
digitalWrite (MS3,LOW);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
// Modus 1/2
if (button[2] == 13)
{
String cmd;
cmd += "\"";
Serial.print("tModus.txt=" + cmd + "Modus 1/2" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.print("tModus.txt=" + cmd + "Modus 1/2" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
digitalWrite (MS1,HIGH);
digitalWrite (MS2,LOW);
digitalWrite (MS3,LOW);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
// Modus 1/4
if (button[2] == 14)
{
String cmd;
cmd += "\"";
Serial.print("tModus.txt=" + cmd + "Modus 1/4" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.print("tModus.txt=" + cmd + "Modus 1/4" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
digitalWrite (MS1,LOW);
digitalWrite (MS2,HIGH);
digitalWrite (MS3,LOW);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
// Modus 1/8
if (button[2] == 15)
{
String cmd;
cmd += "\"";
Serial.print("tModus.txt=" + cmd + "Modus 1/8" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.print("tModus.txt=" + cmd + "Modus 1/8" + cmd);
Serial.write(0xFF);
Serial.write(0xFF);
Serial.write(0xFF);
digitalWrite (MS1,HIGH);
digitalWrite (MS2,HIGH);
digitalWrite (MS3,LOW);
for (int i = 0; i < 7; i++) {
button[i] = 0;
}
}
}
1x Platine, jetzt im Shop verfügbar https://arduino-projekte.info/produkt-kategorie/platinen/
1x Arduino Uno R3
1x Nextion Display 3,5 Zoll
1x Schrittmotor http://amzn.to/2DlOOKz
1x Treiberboard A4988
1x Linearführung -> http://s.click.aliexpress.com/e/bKnSpXba
UNO R3 ATmega328P Board mit USB Kabel Arduino Uno R3 kompatibel
Platine für Stepper Motor Arduino Uno Shield
-
Platine für Stepper Motor Arduino Uno Shield+Stromanschluss
6,99 €Ursprünglicher Preis war: 6,99 €5,99 €Aktueller Preis ist: 5,99 €.