Guten Tag!
Ich bin dabei einen Kameraschlitten zu bauen. Einerseits sollen damit Kamerafahrten möglich sein, das ist der einfache Teil.
Andererseits soll es auch die Möglichkeit geben Zeitrafferaufnahmen zu machen.
Das Setup ist folgendes:
- 1500mm Schiene, davon ca 1300mm Verfahrweg
- Endschalter rechts/links
- ein Schlitten auf der Schiene
- ein Schrittmotor als Antrieb
Das Ansteuern des Schrittmotors habe ich bereits einigermaßen hinbekommen, auch das bauen der Hardware ist kein Problem.
Hacken tut es bei der Programmierung der Mensch-Maschine-Schnittstelle.
Ich nutze ein solches LCD Keypad Shield:
LCD Keypad Shield bei DFRobot
Damit möchte ich abfragen, wieviele Fotos (Schritte) auf welcher Distanz gemacht werden sollen. Ich gehe erstmal davon aus, dass der Schlitten auf einer Seite am Endschalter steht.
Zur Eingabe nutze ich die UP/DOWN/RIGHT/LEFT-Knöpfe und möchte damit eine Zahl nach der anderen eingeben. Wenn ich also 2134 eingeben möchte, drücke ich 2 mal UP, gehe mit RIGHT zu den Hundertern, drücke 1 mal UP (oder 3 mal UP und 2 mal DOWN), gehe wieder mit RIGHT zu den Zehnern.. etc.
Im Endeffekt frage ich also 4 Zahlen a,d,c,d ab und addiere danach zu einer gesamten e = (a1000)+(b100)+(c*10)+d und habe damit die Anzahl der Schritte als Integer.
Bisher habe ich folgenden Code um a zu bekommen (a kann maximal 2 sein, deswegen mit modulo 3):
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>
// select the pins used on the LCD panel
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// define some values used by the panel and buttons
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
int a = 0;
int b = 0;
// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0);
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
return btnNONE;
}
void setup()
{
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print("How many Steps?"); // print a simple message
}
void loop()
{
lcd.setCursor(0,1); // move to the begining of the second line
lcd_key = read_LCD_buttons(); // read the buttons
if (lcd_key == btnUP) //if UP is pressed, increase a by 1
{
a = a+1;
a = a%3; //modulo 3 because a can't be bigger than 2
delay(500);
}
if (lcd_key == btnDOWN) //if DOWN is pressed, decrease a by 1
{ //if a < 0, make a 2
a = a-1;
if ( a < 0)
{
a = 2;
}
delay(500);
}
lcd.print(a);
lcd.setCursor(1,1);
lcd.print(b);
}
Das funktioniert soweit schonmal super.
Nur wie gehe ich jetzt weiter zu b, c und d?
Da stehe ich komplett auf dem Schlauch und wäre für jeden Vorschlag dankbar!
Viele Grüße aus München
Roman