Also reicht es vorm setup
int potPin = 0;
Und dann
delay(analogRead(potPin));
?!
Also reicht es vorm setup
int potPin = 0;
Und dann
delay(analogRead(potPin));
?!
Ja, besser gefiele mir
const byte potPin = 0;
oder
const byte potPin = A0;
also hab es so versucht auch mit 0 anstatt A0 oder mit int potPin
aber leider ändert sich die Geschwindigkeit nicht.
#include <Adafruit_NeoPixel.h>
#define N_LEDS 15
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
const byte potPin = A0;
void setup() {
strip.begin();
}
int pos = 0, dir = 1; // Position, direction of "eye"
void loop() {
int j;
// Draw 5 pixels centered on pos. setPixelColor() will clip any
// pixels off the ends of the strip, we don't need to watch for that.
strip.setPixelColor(pos - 1, 0x696969); // Medium red
strip.setPixelColor(pos , 0xFFFFFF); // Center pixel is brightest
strip.setPixelColor(pos + 1, 0x696969); // Medium red
strip.show();
delay(analogRead(potPin));
// Rather than being sneaky and erasing just the tail pixel,
// it's easier to erase it all and draw a new one next time.
for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);
// Bounce off ends of strip
pos += dir;
if(pos < 0) {
pos = 1;
dir = -dir;
} else if(pos >= strip.numPixels()) {
pos = strip.numPixels() - 2;
dir = -dir;
}
}
Hi
Jaaahaaa - war wieder zu langsam - bleibt jetzt (Mal wieder) trotzdem stehen - vll. findet ja Jemand nützliche Informationen hier drin.
Zum Sketch:
In setup() ein
serialBegin(9600); //startet die serielle Schnittstelle
Und in loop() für den analogRead():
uint16_t analogWert=analogRead(potPin);
serialPrint("Analog-Wert:"); //gibt Text/Variablen auf der Seriellen aus
serial.println(analogWert); //siehst Du im 'Terminal' - die Lupe in der IDE rechts oben
delay(analogWert);
Warum int?
Erwartest Du negative Pin-Nummern?
Bis in den Bereich -32768...32767 ??
Wäre Das nicht eher ein MAKRO-Kontroller?
Also: nicht negativ: unsigned
Bereich bis 255: Byte (ist eh unsigned, alternativ unsigned char (wenn Das geht) oder uint8_t - Alles das Gleiche).
Werden sich die Pin-Nummern während der Laufzeit ändern?
Nein? -> const
const byte potPin=0;
Kommt auf einen Versuch (oder Blick in die Referenz) an, ob diese 0 D0 oder A0 (=D14) beim analogRead interpretiert wird.
D0 und D1 werden vom USB-Anschluss / Serial benutzt - sind also pfui.
MfG
ja über Serial Print habe ich mir das auch schon anzeigen lassen, immer 1023....
wenn ich den Poti abziehe , geht der wert runter und die LEDS schneller.... pendelt sich +- bei 400 ein....
Habs... es schien wohl am GND der Direkt neben den 5V lag gelegen zu haben.
super. vielen dank....
erste Hürde gemeistert... Dank an euch.
nun soll bei Tastendruck ein zweiter Effekt beginnen ... vielleicht erstmal ... alle LED an
Vorher solltest Du delay durch millis ersetzen, das verträgt sich nicht mit Tastendrücken.
Ich hasse millis xD
Ich versteh es einfach nicht
Würden Drehschalter die Sache ändern ?
Ja schon tausend mal .
Naja gut . Evtl nur 15 mal ....
Hi
Aceli:
Ja schon tausend mal .Naja gut . Evtl nur 15 mal ....
Und was ist daran so schwer, sich die Start-Zeit von Etwas zu merken und JEDES MAL zu prüfen, ob JETZT-Startzeit>=Wartezeit ist? Dann ist nämlich die Zeit um.
Klar musst Du Dir von JEDEM 'Etwas' die Startzeit separat merken - zumindest, wenn diese 'Etwas's' gleichzeitig funktionieren sollen.
Du machst eine LED an, merkst Dir die Uhrzeit (=millis() ).
Bei jedem Durchlauf prüfst Du, ob millis()-Startzeit größer/gleich der gewünschten Laufzeit ist.
Beim ersten Durchlauf sind Beide gleich und somit nicht größer als die Laufzeit - also machen wir ... Nichts.
Das passiert die nächsten zwanzigtausend Durchläufe dann genau so weiter.
Dann irgend wann ist die Zeit aber um - millis() (die aktuelle Uhrzeit) minus die Startzeit (millis() von damals * hüstel * ) ergibt einen Wert, Der der gewünschten Laufzeit entspricht oder übersteigt - nun können wir z.B. die LED wieder ausschalten - die Leuchtzeit ist ja jetzt um - wir merken uns erneut die aktuelle Zeit und schalten einen Status weiter, jetzt warten wir auf das Ende der AUS-Zeit, wird in den ersten zwanzigtausend Runden auch wieder zu Klein sein ... die Geschichte wiederholt sich.
Das Beispiel 'Blink_without_delay' zeigt Das anhand von LED-Blinken - quasi gleichzeitig kannst Du dein Poti auslesen und prüfen, ob millis()-Startwert>=Potiwert ist - wenn JA, dann 'eine LED weiter' - sonst machst Du hier halt Nichts - die Zeit ist noch nicht vorbei, also bleiben die LEDs, wie Sie sind.
Sonst: Bei Fragen -> Fragen!
Hier bekommt Keiner so schnell den Kopf abgerissen.
MfG
Ich werde es mir erneut durchlesen evtl fällt ja mal der Groschen...
dennoch habe ich etwas versucht... und war erfolgreich..
nun läuft das Licht und bei Tastendruck wechselt es zu dauerlicht. Erneuter Tastendruck und Es läuft wieder..
nun folgen evtl noch 1-2 weitere Effekte. und dann sollte das ganze mit 3-4-5 Effekten Reichen.
#include <Adafruit_NeoPixel.h>
#define N_LEDS 15
#define PIN 6
const int tasterPin = 7;
int lichtmodus = 0;
int tasterStatus = LOW;
const byte potPin = A0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
int n=0;
void setup() {
strip.begin();
pinMode (tasterPin, INPUT_PULLUP);
Serial.begin(9600);
}
int pos = 0, dir = 1; // Position, direction of "eye"
void loop() {
tasterStatus = digitalRead(tasterPin);
if (tasterStatus == LOW)
{
lichtmodus++;
delay(30);
}
if (lichtmodus == 0)
{
uint16_t analogWert=analogRead(potPin);
Serial.print("Analog-Wert:"); //gibt Text/Variablen auf der Seriellen aus
Serial.println(analogWert);
int j;
// Draw 5 pixels centered on pos. setPixelColor() will clip any
// pixels off the ends of the strip, we don't need to watch for that.
strip.setPixelColor(pos - 1, 0x696969); // Medium red
strip.setPixelColor(pos , 0xFFFFFF); // Center pixel is brightest
strip.setPixelColor(pos + 1, 0x696969); // Medium red
strip.show();
delay(analogWert);
// Rather than being sneaky and erasing just the tail pixel,
// it's easier to erase it all and draw a new one next time.
for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);
// Bounce off ends of strip
pos += dir;
if(pos < 0) {
pos = 1;
dir = -dir;
} else if(pos >= strip.numPixels()) {
pos = strip.numPixels() - 2;
dir = -dir;
}
}
else if (lichtmodus == 1)
{
for(n=0;n<=15;n++)
{
strip.setPixelColor(n, 255,0,0);
}
strip.show();
}
else
{
lichtmodus = 0;
}
}
was sagt ihr dazu?
kann man in diesen Sketch evtl "einfach" das flüssige laufen einbauen ?
aktuell werden bei dem Lauflicht die LEDS ja nur eingeschaltet. würde da ein Aufhellen/Aufdimmen gehen? oder wären das große Veränderungen. Es ist halt momentan abgehackt. auch ein Komplettes auslaufen der LED wäre super. aktuell sind am Ende immer 2 an.
Vielen Dank
Video folgt demnächst auch mal.
delay() hilft immer, nicht flüssige Abläufe zu unterstützen.
Gruss Stefan
Hallo,
wegen millis und blockierfrei. Denke an deine Armbanduhr. Du musst in 15min zur Bushaltestelle loslaufen. Bis dahin kannst du noch Wäsche waschen, bügeln, Zimmer aufräumen, Mutti beim Abwasch helfen.
Während dessen schaust du regelmäßig auf deine Uhr ob die 15min vorbei sind.
Wenn ja, lässt du alles stehen und liegen und gehst zur Bushaltestelle.
Das heißt, du hast während den 15min nicht sinnfrei rumgestanden sondern noch andere sinnvolle Dinge erledigen können.
das original - Theseus erklärt millis()
http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141
Ein Bsp. was lesbar sein sollte.
void setup(void)
{
pinMode(LED_BUILTIN, OUTPUT);
}
void loop(void)
{
heartbeat(500);
}
// ****** Funktionen ******
void heartbeat (unsigned int interval) // Kontrolle ob Sketch blockiert
{
static unsigned long last_ms = 0; // Merker für letzten Zeitpunkt an/aus
static bool state = LOW; // Merker für an/aus Status
if (millis() - last_ms >= interval) { // Differenzzeit vorbei?
last_ms = millis(); // aktuellen Zeitpunkt merken
state = !state; // negieren (zwischen an / aus umschalten)
digitalWrite(LED_BUILTIN, state);
}
}
Wenn du das verstanden hast, kannste alles davon ableiten.
Basierend auf #52 lege ich Dir mal ein Millis-Ei ins Nest, nicht perfekt, aber bunt:
#include <Adafruit_NeoPixel.h>
#define N_LEDS 15
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);
const byte MAX_ANZAHL_LICHTMODI = 2;
const byte tasterPin = 7;
int lichtmodus = 0;
bool aktTasterStatus, altTasterStatus;
const byte potPin = A0;
uint32_t jetzt, vorhin, intervall, entprellMillis;
int pos = 0, dir = 1; // Position, direction of "eye"
void setup() {
strip.begin();
pinMode (tasterPin, INPUT_PULLUP);
Serial.begin(9600);
Serial.println(F("Anfang"));
intervall = analogRead(potPin);
Serial.print(F("Intervall: ")); //gibt Text/Variablen auf der Seriellen aus
Serial.println(intervall);
}
void loop() {
jetzt = millis();
altTasterStatus = aktTasterStatus;
aktTasterStatus = digitalRead(tasterPin);
if ((aktTasterStatus != altTasterStatus) && (jetzt - entprellMillis >= 30))
{
entprellMillis = jetzt;
if (!aktTasterStatus)
{
lichtmodus = (lichtmodus + 1) % MAX_ANZAHL_LICHTMODI;
Serial.print(F("Neuer Lichtmodus: "));
Serial.println(lichtmodus);
}
}
switch (lichtmodus) {
case 0:
if (jetzt - vorhin >= intervall)
{
vorhin = jetzt;
intervall = analogRead(potPin);
Serial.print(F("Intervall: ")); //gibt Text/Variablen auf der Seriellen aus
Serial.println(intervall);
// Rather than being sneaky and erasing just the tail pixel,
// it's easier to erase it all and draw a new one next time.
for (uint16_t j = 0; j < N_LEDS; j++) strip.setPixelColor(j, 0);
// Draw 5 pixels centered on pos. setPixelColor() will clip any
// pixels off the ends of the strip, we don't need to watch for that.
strip.setPixelColor(pos - 1, 0x696969);
strip.setPixelColor(pos , 0xFFFFFF); // Center pixel is brightest
strip.setPixelColor(pos + 1, 0x696969);
strip.show();
// Bounce off ends of strip
pos += dir;
if (pos < 0) {
pos = 1;
dir = -dir;
} else if (pos >= N_LEDS) {
pos = N_LEDS - 2;
dir = -dir;
}
}
break;
case 1:
for (uint16_t n = 0; n < N_LEDS; n++)
{
strip.setPixelColor(n, 255, 0, 0);
}
strip.show();
break;
default:
lichtmodus = 0;
}
}
Getestet mit UNO und 9 LEDs.
Vielen Dank.
Ich werde das nachher mal testen. Danke .
Aktuell stelle ich mir wieder die Frage:
Wie verkabeln.
Geht Variante 2 mit diesem Sketch oder muss etwas geändert werden und Variante 1 kommt zum tragen.
Aceli:
Geht Variante 2 mit diesem Sketch ...
Sollte gehen, aber Widerstände nicht vergessen!
also so und dazwischen widerstände....
welchen Wert sollte man nehmen?Bin unterwegs und hab glaube nur 10k mitgenommen
und dann wird auf allen streifen das gleiche ablaufen ja?!
Aceli:
also so und dazwischen widerstände....
Ja.
Aceli:
welchen Wert sollte man nehmen?
Adafruit: "Adding a ~470 ohm resistor between your microcontroller's data pin and the data input on the NeoPixels can help prevent spikes on the data line that can damage your first pixel. Please add one between your micro and NeoPixels!" Quelle
Aceli:
und dann wird auf allen streifen das gleiche ablaufen ja?!
Würde ich so vermuten.