millis mind idözitök...

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

Hozzászólás Szerző: dpsslaser »

más!

egy #define meg lehet több értéket is egyszere ugyan ahoz az egy #define hoz?

pl

egy valtozo:

#define Pir3_en 9469960

több valtozoval de ugyanaz a definició?

#define Pir3_en 9469960 ,9469963, 12345678, 9876333
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10191
Csatlakozott: 2005. december 9. péntek, 7:00

Re: millis mind idözitök...

Hozzászólás Szerző: Robert »

Nem.
Ugyanis 1 behelyettesítést tud alapesetben.
http://www.tavir.hu - a gazda :)
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

Hozzászólás Szerző: dpsslaser »

kösznöm!
akkor másal keresek hasonlo megoldast...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: millis mind idözitök...

Hozzászólás Szerző: kapu48 »

Kód: Egész kijelölése

//??? #define Pir3_en 9469960 ,9469963, 12345678, 9876333
//Ez már tömbe kel elhelyezni:

//Magyarázat:
//const = álandó értékek
//uint32_t = 32bites egész értékek
//[] = ismeretlen hosszú tömböt hozunk létre
//{} = jelek közötti értékekkel feltöltjük a tömböt. jelen esetben 4 érték került a tömbe.
//A tömb:
const uint32_t  Pir3_en[] {9469960 ,9469963, 12345678, 9876333};
//ezután az egyes értékekre igy hivatkozhatunk
printf(Pir3_en[0];	// az első érték
printf(Pir3_en[3];	// az 4. érték
Avatar
dpsslaser
Bitmanipulátor
Hozzászólások: 145
Csatlakozott: 2012. július 21. szombat, 6:00

Re: millis mind idözitök...

Hozzászólás Szerző: dpsslaser »

kapu48 írta:

Kód: Egész kijelölése

//??? #define Pir3_en 9469960 ,9469963, 12345678, 9876333
//Ez már tömbe kel elhelyezni:

//Magyarázat:
//const = álandó értékek
//uint32_t = 32bites egész értékek
//[] = ismeretlen hosszú tömböt hozunk létre
//{} = jelek közötti értékekkel feltöltjük a tömböt. jelen esetben 4 érték került a tömbe.
//A tömb:
const uint32_t  Pir3_en[] {9469960 ,9469963, 12345678, 9876333};
//ezután az egyes értékekre igy hivatkozhatunk
printf(Pir3_en[0];	// az első érték
printf(Pir3_en[3];	// az 4. érték
köszönöm!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: millis mind idözitök...

Hozzászólás Szerző: kapu48 »

Legyen itt multitaskos LED villogtató példa.
Ami nem használ delay-t és ráadásul, a millis() 5.nap túlcsordulás biztos.

ledBlinkNoDelay.ino

Kód: Egész kijelölése

// ledBlinkNoDelay.ino
 
 unsigned long currentMillis = 0;
 unsigned long lastReadTime = 0; // utolsó olvasási idő
 unsigned long intervallum = 1000; // intervallum
 bool overflowing = 0; //  Tulcsordulas jelzo 
 
 unsigned long currentMillis1 = 0;
 unsigned long lastReadTime1 = 0; // utolsó olvasási idő
 unsigned long intervallum1 = 1500; // intervallum
 bool overflowing1 = 0; //  Tulcsordulas jelzo 
 
 unsigned long counter = 0; 
 #define BUTTONPIN    3 
 #define LEDPIN      13
    
 void setup() {
    Serial.begin(9600);
    pinMode(LEDPIN, OUTPUT);
    // Start LED Blik
    
      currentMillis = millis(); // Beolvassuk a jelenlegi idot
      lastReadTime = currentMillis + intervallum; // Ha összeadás tulcsordul? az eredmény kissebb lesz!
      if(lastReadTime < currentMillis) // Ha törtent tulcsordulas
      {
        overflowing = 1; //  Tulcsordulas jelzot beállitjuk 
      }     
 
 }
     
 void loop()
 {
    

    // A programuk fut a LED-ek a hatterben Villognak...
    Serial.print(counter); // A monitoron: A számok futása szemlélteti a program futasat a haterben!
    Serial.print(", ");
    //...
    // LED Bekapcsolo idözites figyeles
    if(lastReadTime > 0)  // ha idözites elvan inditva
    {
      // Ha Tulcsordulas jelzo bevan állitva és millis() > lastReadTime?
      if(overflowing == 1 && millis() > lastReadTime) // Varunk a tulcsordulasra
      {
        //  nem csinálunk semmit
      }else //  Ha millis() tulcsordulasa megtörtént
      {
        overflowing = 0; //  Tulcsordulas jelzot töröljuk
        if(millis() > lastReadTime) // megvarjuk ,hogy leteljen az idö
        {
          // Itt csinálunk valamit az idözitesben...
          // ...
          counter++;
          Serial.println(". ");
          Serial.print("LED BE: ");
          digitalWrite(LEDPIN, 0);
          lastReadTime = 0; // és töröljük az idözites kerestt
          // elinditjuk a kikapcolás idözitest
          currentMillis1 = millis(); // Beolvassuk a jelenlegi idot
          lastReadTime1 = currentMillis1 + intervallum1; // Ha összeadás tulcsordul? az eredmény kissebb lesz!
          if(lastReadTime1 < currentMillis1) // Ha törtent tulcsordulas
          {
            overflowing1 = 1; //  Tulcsordulas jelzot beállitjuk 
            Serial.println("millis() Tulcsordulas jelzes!");
          }
        }
      }
    } // Itt az idözites figyeles vege

    // LED Kikapcsolo idözites figyeles
    if(lastReadTime1 > 0)  // ha idözites elvan inditva
    {
      // Ha Tulcsordulas jelzo bevan állitva és millis() > lastReadTime?
      if(overflowing1 == 1 && millis() > lastReadTime1) // Varunk a tulcsordulasra
      {
        //  nem csinálunk semmit
      }else //  Ha millis() tulcsordulasa megtörtént
      {
        overflowing1 = 0; //  Tulcsordulas jelzot töröljuk
        if(millis() > lastReadTime1) // megvarjuk ,hogy leteljen az idö
        {
          // Itt csinálunk valamit az idözitesben...
          // ...
          counter++;
          Serial.println(". ");
          Serial.print("LED KI: ");
          digitalWrite(LEDPIN, 1);
          lastReadTime1 = 0; // és töröljük az idözites kerestt
          // elinditjuk a Bekapcolás idözitest
          currentMillis = millis(); // Beolvassuk a jelenlegi idot
          lastReadTime = currentMillis + intervallum; // Ha összeadás tulcsordul? az eredmény kissebb lesz!
          if(lastReadTime < currentMillis) // Ha törtent tulcsordulas
          {
            overflowing = 1; //  Tulcsordulas jelzot beállitjuk 
            Serial.println("millis() Tulcsordulas jelzes!");
          }
        }
      }
    } // Itt az idözites figyeles vege
    
    
    // ...   
     
    // delay(1000); // nem használunk delay-t!!! mert az mindent elront!
    
}

Különböző időzítések bombabiztos futás közbeni kezelésére!
8)
Válasz küldése