Arduınoda iki kod arasında geçen süreyi ölçme
  • Merhaba arkadaşlar,
    Problem şu; Bir şarj sistemi kuracağım, sistemde iki batarya ve birde elektrik motoru olacak. Motorun ürettiği enerji iki aküyü de şarj edecek. Biri şarj olurken öteki elektrik motorunu çalıştıracak. Program düşük voltaj ölçtüğünde röleler ile akış yönü değişecek. Ancak sorun şu eğer iki batarya da tam dolu ise program sürekli bir ona bir buna enerji verecek. Ben de tam voltaj koşulunun içine tur ve simdi değişkeni atadım. Her koşul sağlandığında tur 1 artacak, eğer tur 2 olursa;
    program simdi'den onceki'yi çıkaracak eğer fark 1 saniyeden küçük ise stoprelay çalışıp şarj akışını kesecek. İşte sorun simdi ile onceki arasını ölçemiyorum. yardımcı olabilir misiniz?
    KOD:
    #include < LCD5110_Graph.h>
    LCD5110 sar(8,9,10,11,12);
    extern uint8_t SmallFont[];
    extern uint8_t MediumNumbers[];
    extern uint8_t bos[];
    extern uint8_t yirmibes[];
    extern uint8_t elli[];
    extern uint8_t yetmisbes[];
    extern uint8_t yuz[];
    unsigned long simdi=0;
    unsigned long onceki=0;
    float vPow = 4.7;
    float r1 = 100000;
    float r2 = 10000;
    int tur = 0;
    boolean GostergeDurum;
    boolean MotorDurum;
    boolean SarjDurum;
    boolean StopDurum;

    unsigned long now = 0 ;
    unsigned long before = 0 ;

    #define GostergeRelay 3
    #define MotorRelay 4
    #define SarjRelay 5
    #define StopRelay 2
    void setup() {
    Serial.begin(9600);
    pinMode(GostergeRelay,OUTPUT);
    pinMode(MotorRelay,OUTPUT);
    pinMode(SarjRelay,OUTPUT);
    pinMode(StopRelay,OUTPUT);
    sar.InitLCD();
    pinMode(7,OUTPUT);
    digitalWrite(7,LOW);
    sar.clrScr();
    sar.setFont(SmallFont);
    sar.print("AKUSARJ",CENTER,0);

    GostergeDurum=HIGH;
    MotorDurum=HIGH;
    SarjDurum=HIGH;
    StopDurum=HIGH;
    delay(4000);
    }

    void loop() {
    ilk= millis()
    float v = (analogRead(0) * vPow) / 1024.0;
    float v2 = v / (3*r2 / (3*r1 + 3*r2));
    Serial.println(v2);
    if (v2 >6.0){
    simdi = millis();
    sar.clrScr();
    sar.drawBitmap(0,0,yuz,84,48);
    sar.setFont(MediumNumbers);
    sar.printNumF(v2,2,35,15);
    tur = tur+1;

    if(GostergeDurum == LOW){
    GostergeDurum = HIGH;}
    else if(GostergeDurum==HIGH){
    GostergeDurum=LOW;}

    digitalWrite(GostergeRelay,GostergeDurum);

    if(MotorDurum == LOW){
    MotorDurum = HIGH;}
    else if(MotorDurum==HIGH){
    MotorDurum=LOW;}

    digitalWrite(MotorRelay,MotorDurum);

    if(SarjDurum == LOW){
    SarjDurum = HIGH;}
    else if(SarjDurum==HIGH){
    SarjDurum=LOW;}

    digitalWrite(SarjRelay,SarjDurum);

    if(tur ==2){
    if(simdi-onceki<=1000){<br /> onceki = simdi;
    tur=0;
    if(StopDurum == LOW){
    StopDurum = HIGH;
    }
    else if(StopDurum==HIGH){
    StopDurum=LOW;
    }
    digitalWrite(StopRelay,StopDurum);
    }
    delay(100);
    sar.update();

    }
    }
    if (v2 <3.0){ <br />sar.clrScr();
    sar.drawBitmap(0,0,bos,84,48);
    sar.setFont(MediumNumbers);
    sar.printNumF(v2,2,35,15);
    delay(100);
    sar.update();
    }
    if (v2 >3.0 && v2 <4.0){ <br />sar.clrScr();
    sar.drawBitmap(0,0,yirmibes,84,48);
    sar.setFont(MediumNumbers);
    sar.printNumF(v2,2,35,15);
    delay(100);
    sar.update();
    }
    if (v2 >4.0 && v2 <5.0){ <br />sar.clrScr();
    sar.drawBitmap(0,0,elli,84,48);
    sar.setFont(MediumNumbers);
    sar.printNumF(v2,2,35,15);
    delay(100);
    sar.update();
    }
    if (v2 >5.0 && v2 <6.0){ <br />sar.clrScr();
    sar.drawBitmap(0,0,yetmisbes,84,48);
    sar.setFont(MediumNumbers);
    sar.printNumF(v2,2,35,15);
    delay(100);
    sar.update();
    }




    delay(100);
    sar.update();
    }
  • her iki akuyu de okuyun voltajı düşük olanı şarja çekin

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.