Pagina1 van 1
Forum

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.



Hulp gevraagd bij s...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Hulp gevraagd bij stappenmotor met rtc module!

40 Berichten
2 Gebruikers
0 Reactions
6,349 Bekeken
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

Natuurlijk en als mijn projectje af is, zal ik zeker een video maken met link


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

Cool! 


   
BeantwoordenCiteren
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

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
}  


   
BeantwoordenCiteren
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

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!!


   
BeantwoordenCiteren
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

voorgaandeMillis = (8000) gezet, groter. Maar dat maakt helaas ook niets uit.


   
BeantwoordenCiteren
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

Het lijkt net of ie nog een stap extra zet, maar ik kan het (nog) niet vinden.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

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.


   
BeantwoordenCiteren
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

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?


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
 

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! 


   
BeantwoordenCiteren
(@remko)
Eminent Member
Deelgenomen: 8 jaar geleden
Berichten: 23
Topic starter  

Gelukt, alleen niet met -1, maar met -2 !!!!

thx!!!!


   
BeantwoordenCiteren
Pagina 3 / 3
Deel: