[Help] tijd klopt niet bij loop met stappenmotor (1 min) [ mag op slot]

Hoi mixtarx (of was het nou mixvideo ?), welkom.

Graag code in [code][/code] tags.

Zoals sterretje al aangaf, is het slimmer om een externe klok te gebruiken. Maar dan moet je extra hardware aanschaffen.

Het is ook slimmer om helemaal geen delay() te gebruiken. Het is veel beter om eens te kijken naar de blink without delay sketch, en goed in je op te nemen wat er daar gebeurt (er zijn een aantal dingen die je uit die sketch kunt leren), en voortaan op die manier te werken. Als je het goed toepast, is die methode ook iets nauwkeuriger als de methode die je nu hebt toegepast, maar zeker niet zo nauwkeurig als een echte klok.

Okay, thx.

Ik heb zeker een nog meerderen rtc modules liggen. Twee verschillende zelfs. DS1307 AT24C32 en de DS3231 AT24C32. Ik had een keertje gelezen dat de DS3231 AT24C32 de nauwkeurigste is van die twee.

Dan moet ik even nog uitzoeken hoe ik die moet gebruiken want dat wordt dan mijn eerste keer dat ik een rtc module ga gebruiken.

Als je op zoek bent naar dit soort dingen, kun je vaak wel in de reference hier op de site terecht. Zo kun je hier (klik !) iets vinden over RTC. De zoek functie (het bijna onzichtbare venstertje rechts boven hier in het forum), helpt je ook om meer informatie te vinden. Dat word door Google afgehandeld, dus als je met goede trefwoorden komt, vind je al snel meer informatie over wat je wil weten.

je hebt een heel mooie start gemaakt, en de opmerkingen hierboven zijn ook allemaal waar, nu kun je dus een rtc gebruiken dan wordt het precieser. je kunt natuurlijk eerst de delays gewoon aanpassen tot het wel allemaal op tijd loopt. dus bijvoorbeeld delay 59631. kijk eens naar de library stepper, die neemt je een hoop werk uit handen. dat werkt ook simpeler als je een rtc gebruikt, bedenk wel dat een rtc maar elke seconde een puls geeft, als je sneller wilt stappen kun je beter de af en toe gelijk zetten met de rtc (zoals ook een stationsklok doet.

Kan iemand aub mij code veranderen dat het gewoon werkt met de rtc module( DS3231 AT24C32).

Ik weet dat op de arduino uno A4=sda en A5=scl is maar verder lukt mij het niet, dat is de ic2 lijn. Ik ben een beginner met arduino progammeren en ik kom er gewoon niet uit verder!!!

Please help me!!

De korte tijd gaat prima met delay, maar gaat juist om de grotere tijd van 1 min of meer, daarom moet ie echt nauwkeurig zijn.

Ik heb het linkje in mijn vorige antwoord hersteld.

Ik wil je graag helpen om je code in orde te krijgen. Maar je moet het wel zelf doen.

vergeet even je stappenmotor en probeer de RTC uit, bijv met serial.print. dan krijg je dus telkens als jouw tijd (1 minuut voorbij is dat je even naar een functie springt om je stappenmotor te bewegen. kijk naar de lib van stepper, en een example bij de RTC.

JA dat is me wel gelukt hoor, ik heb zelfs een beetje de code verander dat de dagen in het Nederlands zijn.

Maar ja wat nu,pfffff. Kunnen jullie mij gewoon niet goed helpen aub met de juiste code.....

vast bedankt voor de moeite.

// Date and time functions using a RX8025 RTC connected via I2C and Wire lib // DAGEN IN HET NEDERLANDS

include

include "Sodaq_DS3231.h"

char weekDay[][10] = {"Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag" };

//year, month, date, hour, min, sec and week-day(starts from 0 and goes to 6) //writing any non-existent time-data may interfere with normal operation of the RTC. //Take care of week-day also. DateTime dt(2017, 17, 1, 12, 37, 36, 2);

void setup () { Serial.begin(57600); Wire.begin(); rtc.begin(); // rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above }

void loop () { DateTime now = rtc.now(); //get the current date-time Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.date(), DEC); Serial.print(' '); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.print(weekDay[now.dayOfWeek()]); Serial.println(); delay(1000); }

mixtarx: Maar ja wat nu,pfffff. Kunnen jullie mij gewoon niet goed helpen aub met de juiste code.....

vast bedankt voor de moeite.

Zo werkt dat niet hier op de Forums denk ik, er zijn heel veel aardige mensen hier die je maar al te graag helpen, maar het echte werk willen ze vaak dat je het juist zelf doet, en zelf gaat zoeken hoe dat moet! Maar wie weet is er iemand zo lief om dat voor jou te doen :).

Als ik het zelf niet snap, dan kom ik toch ook niet verder.... Ik heb juist al heel veel voor elkaar gekregen, dat kan je zelf zien, alleen kom ik dus niet verder, het zo juist fijn zijn als iemand mij verder helpt, daarom vraag ik het ook. Dat lijkt mij toch logisch of niet dan???

Volgens mij moet de rtc module uitgelezen worden en dan en naar bv 1 min moet de stappen motor 1 stap doen. iets van step +x tijd, sla je weer op en dan weer opnieuw. Maar ja wat ik al zei, ik ben een nerby!!

Bijna gelukt, alleen zit nog iets raars in!! de stappen motor geeft vier stappen in dit geval om de 1 secondes maar daarna stop ie en gaat ie pas weer naar 1 min opnieuw vier stappen. Ik snap dit niet want het staat gewoon in de loop en heb geen delay. Wie o wie kan mij dit uitleggen. De rtc module heb ik ook op echte tijd gezet.

Hier onder de code.

// written by MIXVIDEO

include

include "RTClib.h"

RTC_DS1307 rtc;

int in1 = 4; // IN1-IN4= input is of your motorstepper driver (L298N MODULE) int in2 = 5; int in3 = 6; int in4 = 7;

void setup() { Serial.begin(9600); Wire.begin();

rtc.begin();

if (! rtc.isrunning()) { Serial.println("RTC is NOT running!"); }

pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); } void loop() {

DateTime now = rtc.now();

digitalWrite(in4, LOW); /* Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println();

Serial.println();

Serial.println(); delay(1000); */

if (now.second() == 1) {

digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }

if (now.second() == 2) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } if (now.second() == 3) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); } if (now.second() == 4) { digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); }

}

Je bent schijnbaar niet in staat om aanwijzingen te volgen. Want je hebt reply nummer 2 helemaal niet gelezen, en blijft gewoon de code als text neerzetten. Prima, maar dat betekent voor mij dat het zinloos is om mijn tijd er verder in te steken. Sorry.


[/// written by MIXVIDEO 
#include 
#include "RTClib.h"
RTC_DS1307 rtc;

int in1 = 4;  // IN1-IN4= input is of your motorstepper driver (L298N MODULE)
int in2 = 5;
int in3 = 6;
int in4 = 7;

void setup()
{
  Serial.begin(9600);
  Wire.begin();

  rtc.begin();

  if (! rtc.isrunning())
  {
    Serial.println("RTC is NOT running!");
  }

  
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);
 pinMode(in3, OUTPUT);
 pinMode(in4, OUTPUT);
}
void loop()
{

    DateTime now = rtc.now();

digitalWrite(in4, LOW);
 /* Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

     Serial.println(); 
     
        Serial.println();
    delay(1000); */

     if (now.second() == 1)
    {
     
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, LOW);
    }

if (now.second() == 2)
{
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(in3, LOW);
 digitalWrite(in4, LOW);
}
 if (now.second() == 3)
{
 digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
}
if (now.second() == 4)
 {
 digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 }
   
}

jij zegt als de secondes 1 is dan zet de motor in stand 1 etc. als je elke seconde een stap wilt doen dan kijk je dus of de seconde verandert is ten opzichte van de vorige keer dat je keek, en dan ga je naar een functie die de motor 1 stap laat doen.

of kijk eens wat modulo 4 betekent en dan met +0,+1,+2,+3 telkens een stap zetten. en nee ik ga je de oplossing niet geven.

met +1 zat ik ook al aan te denken! Daar zal ik vandaag ff mee gaan stoeien.

Maar kan jij of iemand anders dan verklaren waarom ik met de laatste code dan weer 1 min vertraging heb na die 4 stappen terwijl het gewoon in de loop staat, misschien ligt het aan de rct.lib maar daar heb ik verder ook geen verstand van. Als je dat dan wel uitleggen, dan kan ik iig daar weer van leren.

een andere oplossing is if now.second==5 dan hetzelfde schrijven als bij second==1 bij second==6 hetzelfde als bij 2 enzovoorts. dat is gekkenwerk en dus

Nu gebeurt er niks als second=5, dus motor blijft staan tot de minuut voorbij is. en second weer 1 is. oplossing is met modulo werken, kijk in de referentie, en print een cheatsheet daar staat het ook op.

pfff, ik vind het nu nog moeilijke worden hoor, het moet natuurlijk geen wiskunde gaan worden.

Ik heb zitten stoeien met modulo, maar dat werkt bij mij heel raar, maar ik zal het natuurlijk wel fout toepassen.

if (now.second() % 4==0) {

digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW);

en de 3 stappen verder natuurlijk if (now.second() % 4==1) en 2 en 3. Toen ging de stappen ongeveer om de 14 secondes het blijf wel lopen. En als ik if (now.second() % 4==2) en daarna 4,6 en 8 invulde dan ging de stappen motor opeens tegen de klok in en ipv met de klokmee. Maar om de 1 seconden was een maar een voorbeeld. Het doel is l dat het om de 1 min en langer instellen, welke tijd ook maar. bv 90 sec. Volgens mij is gewoon de rtc.lib niet goed, zeker weten doe ik niet wat ik al eerder zei. Ik moet gewoon een andere lib gebruiken en een andere code gaan schrijven, maarja wat ik ook al zei, ik ben een beginneling en is dit gewoon moeilijk voor mij. Ja een led knipper dat kan ik wel, hahaha.

De standaard voorbeelden van de stepper werkt ook niet in mijn situatie omdat daar met stappen wordt gewerkt, ik wil het continue laten lopen!!! dus 1 stap per 1 min als voorbeeld.

Maar laat ik nu eerst een andere vraag stellen, misschien kom ik dan verder.

Hoe kan ik rtc module ds2321 uitlezen, ik bedoel ik heb genoeg video gezien op youtube dat je eerst deze tijd moet setten en daarna kan je door Serial.println(); de tijd uitlezzen op je monitor, dat is mij ook gelukt.

Maar hoe kan nu de arduino uno gebruiken/uitlezen/toewijzen zonder de RTClib.h te gebruiken maar met de ds2321.h ??? snap je wat ik bedoel? welke commando's moet je dan gebruiken.