timsieberg:
Bekomme ich Getriebemotoren mit so kleiner Übersetzung?
Ja, dafür ist das Getriebe.
timsieberg:
Bekomme ich Getriebemotoren mit so kleiner Übersetzung?
Ja, dafür ist das Getriebe.
wenn du nun einen Getriebemotor für oben einsetztet, dann brauchst doch nur den Motor (und die LED) über ein Relais oder ähnliches einschalten. Sehe da jetzt nicht wirklich ein Problem. nur prüfen auf isDark --> einschalten sonst ausschalten. Oder?
noiasca:
wenn du nun einen Getriebemotor für oben einsetztet, dann brauchst doch nur den Motor (und die LED) über ein Relais oder ähnliches einschalten. Sehe da jetzt nicht wirklich ein Problem. nur prüfen auf isDark --> einschalten sonst ausschalten. Oder?
Ich habe einen schrittmotor, schreibe ich den befehl in void loop() dreht sich natürlich der motor und dadurch das dies nie beendet wir fangen die LEd´s nicht an zu leuchten. Schreibe den befehl in z.B Void doMotor() und rufe ihn in void loop() dreht er sich nicht
Da es hier immer nur Fragmente zur Helligkeitssteuerung gab und keinen Sketch mit dem Stepper, kann ich nur raten. Ich vermute ich mal, dass Du die Stepper.h verwendest. Diese blockiert. Nimm lieber auch dafür die MoBaTools.
Gruß Tommy
aha also doch Stepper. Ist zu spät jetzt.
// Lighthouse with 8 LEDs and one top PWM
// https://forum.arduino.cc/index.php?topic=711838
// by noiasca
// 2020-11-04 V3: Motor switch on/off
// 2020-11-03 V2: LDR
#define DEBUG_UART 1
const uint8_t pwmPin = 3; // UNO PWM pins 3, 5, 6, 9, 10, 11
const uint8_t ledPin[] = {2, 4, 5, 6, 7, 8, 9, 10}; // Pins simulating a "running light"
const size_t totalNoLeds = sizeof(ledPin);
const uint8_t sensorPin = A1; // LDR for day/night/
const uint8_t adcDark = 30; // threashold LDR for dark/night
const uint8_t adcBright = 100; // threashold LDR for bright/day
uint32_t currentMillis = 0; // stores actual timestamp
const uint8_t motorPin = 11;
bool isDark()
{
static bool result = false;
int sensorValue = analogRead(sensorPin);
if (sensorValue < adcDark) result = true;
else if (sensorValue > adcBright) result = false;
return result;
}
void doRunning() // switch on / off one LED after the other
{
static uint8_t actual = totalNoLeds - 1; // start with the last LED
static uint32_t previousMillis = 0; // stores timestamp/millis of last change
const uint8_t myInterval = 5; // interval in seconds
if (isDark())
{
#if DEBUG_UART
Serial.println("dark/night");
#endif
if (currentMillis - previousMillis >= myInterval * 1000UL)
{
previousMillis = currentMillis;
digitalWrite(ledPin[actual], LOW); // switch off old (=current) LED
actual++; // goto next LED
if (actual >= totalNoLeds) actual = 0; // handle rollover to zero
digitalWrite(ledPin[actual], HIGH); // switch on new LED
#if DEBUG_UART
Serial.print("actual Pin=");
Serial.println(ledPin[actual]);
#endif
}
}
else
{
#if DEBUG_UART
Serial.println("bright/day"); // if day and pin is on switch pin off
#endif
if (digitalRead(ledPin[actual]) == HIGH)
digitalWrite(ledPin[actual], LOW);
}
}
void doPWM() // Pulse/fade the LED up and down
{
static uint32_t previousMillis = 0; // stores timestamp/millis of last change
const uint16_t myInterval = 10; // speed of PWM
static int8_t dir = 1; // direction upwards(1) or downwards (-1)
static uint8_t newPwm;
if (millis() - previousMillis >= myInterval)
{
previousMillis = millis();
if (dir == 1 && newPwm >= 254) // end of scale
dir = -1; // go downwards
if (dir == -1 && newPwm <= 54) // lower end of pwm scale
dir = 1; // go upwards
newPwm += dir; // this will increase (+1) or decrease (-1) the PWM
analogWrite(pwmPin, newPwm);
#if DEBUG_UART
Serial.print("newPwm=");
Serial.println(newPwm);
#endif
}
}
void doMotor() // switch on / off one Motor
{
static bool previousState = false;
if (isDark())
{
if (previousState == LOW)
{
previousState = HIGH;
digitalWrite(motorPin, HIGH);
// oder eben Stepper hier einschalten dann aber auch aufpassen,
#if DEBUG_UART
Serial.println("motor on");
#endif
}
}
else
{
if (previousState == HIGH) {
previousState = LOW;
digitalWrite(motorPin, LOW);
// oder eben Stepper hier ausschalten
#if DEBUG_UART
Serial.println("motor off");
#endif
}
}
}
void setup() {
#if DEBUG_UART
Serial.begin(115200);
#endif
for (uint8_t i = 0; i < totalNoLeds; i++) {
pinMode(ledPin[i], OUTPUT);
}
pinMode(pwmPin, OUTPUT);
pinMode(motorPin, OUTPUT);
}
void loop() {
currentMillis = millis();
doPWM(); // check, if PWM needs to be changed
doRunning(); // check, if one of the running LEDs need to be changed
doMotor(); // check, if the motor/LED should be switched on/off
// do what ever you want unblocked here
}
Tommy wird schon recht haben. Das wird blockieren wenn du nicht die Mobatools verwendest
noiasca:
aha also doch Stepper. Ist zu spät jetzt.
Wohl eher zu früh
Mach doch nicht sowas! Ich frag mich gerade ob ich zu blöd bin auf ein Post zu reagieren:
"The post you are trying quote [...] not longer exist."
Du sollst den + doch bekommen. Wegen das Ding Geduld und so...
Ich zieh mich hier wieder raus....
noiasca:
sorry, ich hab noch schnell die Zwischenvariable eingebaut, falls er das digitalWrite rausschmeisst...
Code löschen (abspeichern) und wieder einsetzen geht auch - mach ich gelegentlich wenn's hilfreich ist.
Dann wird der Thread auch als unread gekennzeichnet - passt.
Schönen Abend!
noiasca:
Tommy wird schon recht haben. Das wird blockieren wenn du nicht die Mobatools verwendest
ja, das beobachte ich gerade. 1LED an und Stepperläuft, LED´s schalten aber nicht weiter.
Dann weißt Du ja, was Du ändern musst. Stepper.h raus, MoBaTools rein.
Gruß Tommy
Tommy56:
Dann weißt Du ja, was Du ändern musst. Stepper.h raus, MoBaTools rein.Gruß Tommy
da bin ich gerade dabei, jetzt muss ich denn MoBaTool Stepper erstmal verstehen
Die MoBaTools gehören zu den leuchtenden Beispielen einer sehr guten Dokumentation.
Gruß Tommy
Tommy56:
Die MoBaTools gehören zu den leuchtenden Beispielen einer sehr guten Dokumentation.
Danke für die Blumen . Aufgrund der vielen Möglichkeiten ist sie allerdings auch ziemlich umfangreich.
timsieberg:
jetzt muss ich denn MoBaTool Stepper erstmal verstehen
Was ist das denn eigentlich für ein Schrittmotor?
Neben der Initiierung dürften für dich nur die Methoden setSpeed() und rotate() relevant sein.
Mit setSpeed(10); setzt Du die Umdr/min auf 1 ( Wenn richtig initiiert wurde, also die MobaTools wissen wieviel Steps/Umdr der Stepper macht ).
Soll der Motor starten einmal rotate(1) aufrufen. Dann werden die Stepimpulse im Hintergrund ausgegeben. Mit rotate(0); stoppst Du wieder.
MicroBahner:
Danke für die Blumen . Aufgrund der vielen Möglichkeiten ist sie allerdings auch ziemlich umfangreich.
Was ist das denn eigentlich für ein Schrittmotor?
Neben der Initiierung dürften für dich nur die Methoden setSpeed() und rotate() relevant sein.
Mit setSpeed(10); setzt Du die Umdr/min auf 1 ( Wenn richtig initiiert wurde, also die MobaTools wissen wieviel Steps/Umdr der Stepper macht ).
Soll der Motor starten einmal rotate(1) aufrufen. Dann werden die Stepimpulse im Hintergrund ausgegeben. Mit rotate(0); stoppst Du wieder.
Super danke, dieser Ansatz hat mir gefehlt, trotz der guten Beschreibung, sind die Beispiele in der Bib. doch sehr umfangreich, das brauchte ich ja alles nicht