Go Down

Topic: [Help] tijd klopt niet bij loop met stappenmotor (1 min) [ mag op slot] (Read 3184 times) previous topic - next topic


mixtarx

Code: [Select]
[/// written by MIXVIDEO
#include <Wire.h>
#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);
 }
  
}

shooter

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.
 
paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

mixtarx

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.

shooter

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.


paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

mixtarx

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.


mixtarx

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.
 



Go Up