Hallo zusammen,
Ich möchte gerne mit hilfe eines joy sticks eine variable hoch/ runter zählen.
Ich versuche eine lösung seit ca 3std. zu finden und bekomme es nicht hin.
Kann mir einer von euch helfen?
Die Werte berreiche:
zum runter zählen: 0 - 500
zum hoch zählen 600 - 1030
Danke im Vorraus.
Konfus ist's etwas, was Du schreibst.
Was für ein Stickist das?
Was hast Du bisher zusammengeschustert?
Das Habe ich bereits zusammen geschustert. Der Joystick ist ein Dual Achse Modul PS2 Joystick.
Hier der link zum modul: JoyStick Dual Achse Modul PS2 Spielsteuerung Game Controller für Arduino Pi, 1,49 €
#define X_pin A0 // analog pin connected to X output from Joystick
#define Y_pin A1 // analog pin connected to Y output from Joystick
int xPosi, yPosi;
void loop() {
xPosi = analogRead(X_pin);
yPosi = analogRead(Y_pin);
if (xPosi > 0 && xPosi < 500) {
x = x - 1;
}
if (xPosi > 600 && xPosi < 1030) {
x = x + 1;
}
Serial.print("\n");
Serial.print("X-Counter: ");
Serial.print(x);
Serial.print("\n");
}
Hi
Und?
Der Sketch sieht soweit brauchbar aus.
Mit 'funktioniert nicht' gibt's als Antwort 'mach es besser und schon funktioniert es'.
Also etwas ausführlicher darfst Du Dein Problem schon erklären.
MfG
PS: Mir fehlt setup() - und Dir code-Tags
[code]
Ich bin ein Code
[/code]
--> (jeweils ohne das * Zeichen)
Ich bin ein Code
Bitte vollständigen Sketch
PPS: Der ADC kann Werte von 0...1023 zurück geben (10 Bit=1024 Werte), daraus folgt, daß 512 die Mitte ist und Deine Abstand von der Mitte bis Er zählt hier stark 'Außermittig' sein dürfte.
Sorry. Hier einmal der ganze code.
#include <LiquidCrystal.h>
#include <FastLED.h>
#define NUM_LEDS 256 //defined the numbers of LED'S
#define DATA_PIN 6 // digital pin connected to LED Strip
#define X_pin A0 // analog pin connected to X output from Joystick
#define Y_pin A1 // analog pin connected to Y output from Joystick
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
CRGB leds[NUM_LEDS];
byte location[3][3], x = 0, y = 0;
int xPosi, yPosi;
bool xr = false, xl = false, yo = false, yu = false;
void setup() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
location[i][j] = 0;
}
}
for (int i = 0; i < 256; i++) {
leds[i] = CRGB(0, 0, 0);
FastLED.show();
}
lcd.begin(16, 2);
Serial.begin(115200);
pinMode(DATA_PIN, OUTPUT);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
/*
Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y_pin));
Serial.print("\n\n");
*/
xPosi = analogRead(X_pin);
yPosi = analogRead(Y_pin);
if (xPosi > 0 && xPosi < 500) {
x = x - 1;
}
if (xPosi > 600 && xPosi < 1023) {
x = x + 1;
}
Serial.print("\n");
Serial.print("X-Counter: ");
Serial.print(x);
Serial.print("\n");
}
Hi
Da der ADC keine Werte kleiner Null zurück geben kann (und Du eigentlich AB 0 bis ~500 prüfen willst), kannst Du Dir das >0 (müsste eh >=0 sein) und das <1023 (dito, <=1023) sparen.
Sonst wird es Dir passieren, daß bei Vollausschlag des Joystick Dieser nicht mehr gewertet wird - da Du 0 oder 1023 erreicht hast.
Hoffe, Das umschreibt ungefähr Deinen Fehler - Den Du immer noch geheim hältst.
Auch, wenn's Das jetzt wirklich war, darfst Du uns gerne an Deinem Erfolg teilhaben lassen und den dann funktionierenden Sketch (samt Spiel) hier vorstellen.
MfG
Hallo,
Frage : Warum willlst Du das mit einem Joystick machen? was hast du überhaupt vor mit der Variablen x. Vermute mal letztlich hat das was mit der Position der LED auf dem Strip zu tun. Willst Du mit dem Joystick die Position einer LED in einem x,y System bestimmen ?
Du kannst ebenso zwei Taster nehmen, da Du ja eigendlich nur drei Zustände hast ab-0-auf. Wenn du jetzt eine der If Bedingunge erfüllst "rast" der die Variable x mit maximaler Geschwindigkeit rauf oder runter. Mach mal versuchsweise ein delay(500) mit in den loop damit Du überhaupt was sehen kannst. Letztlich musst Du das rauf und runter zählen irgendwie mit millis() verzögerrn.
Wenn Du die Position einer brennenden Led bestimmen willst kannst Du ebenso den Analogwert nehmen nachdem Du Ihn skaliert hast.
Heinz
Danke an Euch alle. Ich habe mein Problem Behoben. Hier Mein code:
#include <LiquidCrystal.h>
#include <FastLED.h>
#define NUM_LEDS 256 //defined the numbers of LED'S
#define DATA_PIN 6 // digital pin connected to LED Strip
#define X_pin 0 // analog pin connected to X output from Joystick
#define Y_pin 1 // analog pin connected to Y output from Joystick
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
CRGB leds[NUM_LEDS];
byte location[3][3], x = 0, y = 0;
int xPosi, yPosi;
bool xr = false, xl = false, yo = false, yu = false;
void setup() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
location[i][j] = 0;
}
}
for (int i = 0; i < 256; i++) {
leds[i] = CRGB(0, 0, 0);
FastLED.show();
}
lcd.begin(16, 2);
Serial.begin(115200);
pinMode(DATA_PIN, OUTPUT);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
}
void loop() {
Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y_pin));
Serial.print("\n\n");
xPosi = analogRead(X_pin);
yPosi = analogRead(Y_pin);
if (xPosi >= 0 && xPosi <= 500) {
if (x == 0) {
x = 3;
delay(10);
} else {
x = x - 1;
delay(10);
}
}
if (xPosi >= 600 && xPosi <= 1023) {
if (x == 3) {
x = 0;
delay(10);
} else {
x = x + 1;
delay(10);
}
}
Serial.print("\n");
Serial.print("X-Counter: ");
Serial.print(x);
Serial.print("\n");
delay(200);
}