Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!
Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.
Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.
[Opgelost] Hulp gevraagd bij stappenmotor met rtc module!
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
20 februari 2017 22:49
Natuurlijk en als mijn projectje af is, zal ik zeker een video maken met link
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
20 februari 2017 22:58
Cool!
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
21 februari 2017 11:39
yes, code gefixed!!! Het duurde wel even voor dat het gelukt was want ik ben natuurlijk nog een beginner, maar de fout heb ik ontdekt.
Het probleem was dat in de eerste ronde de leds 1 voor 1 aangingen (interval) maar gingen niet meer uit. Daarna (2e ronde) ging de leds 1 voor 1 even uit(delay).
Oplossing: de stappen van de huidige pins onder de digitalWrite ( LOW) gezet. Nu werkt het juist.
Nieuwe Code!!!!
// Efficiënter om deze als define's op te geven ipv een variabele
// De compiler vervangt elk voorkomen van deze constanten meteen met de
// gedefinieerde waarde, en verbruikt dus geen geheugen voor variabelen
#define TijdsduurLEDAan 500
#define interval 1000
// Bijhouden welke stap we doen, en wat het maximum aantal stappen is
// Hiervoor definiëren we Max aantal pinnen (4) en een array
// Dit maakt aanpassen makkelijk als je in de toekomst meer LEDs wilt toevoegen
#define MaxPins 4
int pins[MaxPins] = { 4, 5, 6, 7 }; // Definieer de 4 pinnen in een array
byte HuidigePin = 0; // Voor arrays start tellen bij nul en niet bij 1
unsigned long voorgaandeMillis = 0; // laatste keer dat iets werd uitgevoerd
void setup()
{
for(int Teller; Teller<MaxPins; Teller++) // tel van 0 t/m 3 om pinnen op
{ // output te zetten
pinMode(pins[Teller], OUTPUT);
}
}
void loop()
{
unsigned long huidigeMillis = millis();
if (huidigeMillis - voorgaandeMillis >= interval) {
// 1 minuut verstreken - dus bewaar dit meteen voor detectie van de volgende ronde
voorgaandeMillis = huidigeMillis;
// Omdat alle pinnen al op LOW staan, hoeven we alleen maar deze pin op HIGH te zetten
digitalWrite(pins[HuidigePin], HIGH);
delay(TijdsduurLEDAan); // 1 seconde wachttijd voor we de LED weer uitzetten
// Huidige LED weer uitzetten, de anderen stonden al uit
digitalWrite(pins[HuidigePin], LOW);
if(HuidigePin<MaxPins) {
HuidigePin++; // volgende stap
} else {
HuidigePin = 0; // terug naar 1, maar arrays starten bij nul met tellen
}
} // if
}
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
21 februari 2017 12:31
nee, toch nog niet helemaal goed. Wel bijna, de 1e ronde gaat goed, maar bij de 2e ronde duurt het eerst nog dubbeltijd voor led 1 aangaat. Dus bv interval 2 sec dan duurt het eerst 4 sec voordat led 1 aan gaat en daarna de andere leds wel een interval van 2 sec.\
Nog ff door zoeken!!
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
21 februari 2017 12:41
voorgaandeMillis = (8000) gezet, groter. Maar dat maakt helaas ook niets uit.
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
21 februari 2017 12:55
Het lijkt net of ie nog een stap extra zet, maar ik kan het (nog) niet vinden.
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
22 februari 2017 0:57
Ik zat toevallig te rommelen met FastLED for een ongerelateerd onderwerp.
Deze library heeft een aantal timing functies ... EVERY_N_MILLIS (en vergelijkbaar voor seconden etc).
Nu gebruikt men daar geen interrupts voor dus ik weet niet hoe betrouwbaar het is - en de FastLED library is verder niet van toepassing, dus extra data in de code die we niet echt gebruiken.
Ik vermoed dat het gebruik van een interrupt nodig gaat zijn ... maar dat is niet altijd even eenvoudig.
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
22 februari 2017 13:21
Grappig dat fast led, ik heb een paar video bekeken. Het ziet er wel gaaf uit dat snelle heen en weer gaan.
Heb jij nog gekeken naar de het probleemtje in de laatste code?
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
24 februari 2017 23:02
Ik kan het zelf even niet testen, maar probeer dit eens:
Vervang
if(HuidigePin<MaxPins) {
door
if(HuidigePin<MaxPins-1) {
Hopelijk fixt dat het probleem
Spelen met FastLED is inderdaad leuk!
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter
25 februari 2017 10:14
Gelukt, alleen niet met -1, maar met -2 !!!!
thx!!!!