Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   865 / 865
(#) asch válasza Frankye hozzászólására (») 0:12 /
 
Csinálhatsz két párhuzamos állapotgépet, és az egyik vezérelheti a másikat. A "külső" gombnyomásra 20 másodpercig van aktív állapotban. A belsőt a külső aktiválása indítja és állítja le és közben ismételgeti amit kell neki. A sokat emlegetett állapotgépes megoldással így néz ki kb:
  1. static uint32_t process1time;
  2. static uint32_t process1state = 0;
  3. static uint32_t process2time;
  4. static uint32_t process2state = 0;
  5. static bool process2enabled = false;
  6. void process1(uint32_t time)
  7. {
  8.         uint32_t dt=time-process1time; // Az átfordulást jól kezeli, az eltelt időnek kell 2^31 alatt maradni amikor hasznaljuk
  9.         switch(process1state)
  10.         {
  11.         case 0:
  12.                 if(isButtonPressed())
  13.                 {
  14.                         process1time=time;
  15.                         process1state=1;
  16.                         process2enabled = true;
  17.                 }
  18.                 break;
  19.         case 1:
  20.                 if(dt>=20000)
  21.                 {
  22.                         process2enabled = false;
  23.                         process1state=0;
  24.                 }
  25.                 break;
  26.         }      
  27. }
  28. void process2(uint32_t time)
  29. {
  30.         uint32_t dt=time-process2time;
  31.         if(!process2enabled)
  32.         {
  33.                 process2state = 0;
  34.                 outputLed(false);
  35.         }
  36.         switch(process2state)
  37.         {
  38.         case 0:
  39.                 if(process2enabled)
  40.                 {
  41.                         process2time=time;
  42.                         process2state=1;
  43.                         outputLed(true);
  44.                 }
  45.                 break;
  46.         case 1:
  47.                 if(dt>=200)
  48.                 {
  49.                         process2time=time;
  50.                         outputLed(false);
  51.                         process2state=2;
  52.                 }
  53.                 break;
  54.         case 2:
  55.                 if(dt>=200)
  56.                 {
  57.                         process2time=time;
  58.                         outputLed(true);
  59.                         process2state=1;
  60.                 }
  61.                 break;
  62.         }
  63. }
  64. void loop()
  65. {
  66.         uint32_t t=millis();
  67.         process1(t);
  68.         process2(t);   
  69. }


Ha hosszútávon pontos időzítést akarsz, akkor
  1. process2time=time;
helyett
  1. process2time+=200;
-at írhatsz. Ilyenkor észnél kell lenni, hogy el ne rontsuk, de ha nem rontjuk el, akkor hosszú távú átlagban is tűpontos lesz minden. Akár használhatsz mikroszekundomos órát is ezzel a technikával.
(#) asch válasza Régi motoros hozzászólására (») 0:21 /
 
A hátránya, hogy szerintem sokkal érzékenyebb lesz mint egy Arduino UNO.
Nem hülyeség egyébként teljes Linuxot tenni Wifihez, mert amint drót nélkül kapcsolódunk azonnal kritikussá válik, hogy titkosítva legyen a kapcsolat, és ezt Linux alatt gyerekjáték megcsinálni - például SSH-val -, mikrovezérlő alapon meg egyáltalán nem egyszerű.
Szerintem a díszdobozos UNO árába beleférhet ez is, olyasmi árúnak képzelem, mint egy router. A háttértár és a RAM az általam elképzelt célokra jócskán túlméretezett, de az nem baj. Az STM-eket szeretem, jó doksijuk van és jók hozzá a toolok is.
Következő: »»   865 / 865
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem