User Tools

Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
useful_programs [2019/07/31 13:22]
emozolyak [Debug printing]
useful_programs [2020/01/13 10:17] (current)
emozolyak [Debug printing]
Line 47: Line 47:
 end  end 
    
-function outbit(condition,​ x, b) -- output bool conditoin ​as 0 /1 into a bit +function outbit(condition,​ x, b) -- output bool condition ​as 0 /1 into a bit 
      if condition then           if condition then     
          ​return hasbit(x, b) and x or x + bw(b)           ​return hasbit(x, b) and x or x + bw(b) 
Line 53: Line 53:
          ​return hasbit(x, b) and x - bw(b) or x           ​return hasbit(x, b) and x - bw(b) or x 
      ​end ​      ​end ​
 +end 
 +
 +function outBit(condition,​ alias, b) -- output bool condition as 0 /1 into a bit of a internal register ​
 +     local new_value = outbit(condition,​ R(alias), b)
 +     ​W(alias,​ new_value)
 end  end 
    
Line 135: Line 140:
  
 <code lua> <code lua>
-function DBG( ...) -- ... accepts multiple arguments in a table arg +function DBG(...) 
 +local tc = tabToStr
  
-local table_sign = '​|' ​-- if there is divider sign, the values will be grouped in 2 rows +local function align2s(s1, s2) -- appends space to smaller string ​ 
-local table_sign_found ​false        ​ +    local d, s (#s1 - #s2), ' ' ​ 
-local tab_s_index ​= 0 +    if (d ~= 0) then return (((d > 0) and {s1, s2 .. s:rep(d)}) or ({s1 .. s:​rep(math.abs(d)),​ s2})) 
 +    else  
 +        return {s1, s2} 
 +    end  
 +end 
  
-if ENABLE_DEBUG then -- should be global in the calling script ​ +    ​if ENABLE_DEBUG then  
- +        local arg_str ​tc(arg) 
-    -- find divider +        ​local t_s_pos ​string.find(arg_str,​ "​|"​) ​
-    for i 1, #arg do  +
-        ​if arg[i] ​== table_sign then  +
-            table_sign_found = true  +
-            tab_s_index = i  +
-            break  +
-        end  +
-    end +
     ​     ​
-    ​if not table_sign_found ​then   +        ​if not t_s_pos ​then  
-        INFO(tabToStr(arg)) -- outputs table values in a single ​row  +            INFO(arg_str -- Just printing ​single ​line 
-    else  +
-        local header_t, value_t = {}, {} -- prepare header and value rows +
-          +
-        for k = 1, tab_s_index - 1 do  +
-            header_t[k] = arg[k] +
-        end  +
-        for j = tab_s_index + 1, #arg do  +
-            value_t[j - tab_s_index] = tostring(arg[j]) +
-        end  +
-         +
-        if (#header_t ~= #value_t) then  +
-             ​ERROR("​column count differs!"​)+
         else          else 
-            ​for g = 1, #​header_t ​do  +            ​local h_row, v_row {}, {}  
-                ​local delta = #header_t[g] - #value_t[g] -- makes aligment by adding spaces to shorter strings... +            -- header  
-                if delta ~= then  +            for w in string.gmatch(arg[1]"​%S+"​) ​do 
-                    ​if ​(delta > 0then  +                ​h_row[#h_row + 1= w       
-                        ​value_t[gvalue_t[g] .. string.rep('​ 'delta)  +            end  
-                    else  +            ​-- values  
-                        header_t[g] = header_t[g] .. string.rep('​ 'math.abs(delta))  +            for i = 3, #arg do  
-                    end +                ​v_row[#​v_row + 1] = tostring(arg[i]) 
 +            end  
 +             
 +            ​if (#​h_row ​~= #​v_row) ​then  
 +                ERROR("​Inconsistent header and value rows in DBGnew!"​
 +                ​return  
 +            else  
 +                for g = 1, #h_row do  
 +                    h_row[g], v_row[g] = unpack(align2s(h_row[g], v_row[g]))
                 end                  end 
-            end -- for  +            end  
-            INFO(tabToStr(header_t)) ; INFO(tabToStr(value_t)) +            INFO(tc(h_row)) ; INFO(tc(v_row)) 
-        end +        end    
     end      end 
-end -- if ENABLE_DEBUG +end  
- +
-return true  +
-end -- DBG+
  
 function tabToStr(t) ​ -- glue all and add spaces, use tostring to protect from nil and bool argument ​ function tabToStr(t) ​ -- glue all and add spaces, use tostring to protect from nil and bool argument ​
     local s = "" ​           ​     local s = "" ​           ​
     for i = 1, #t do      for i = 1, #t do 
-        s = s .. tostring(t[i]) .. ' ' ​+        ​local e = t[i] ; if (e == nil) then e = '​nil'​ end  
 +        ​s = s .. tostring(e) .. ' ' ​
     end -- for      end -- for 
     return s      return s 
-end +end
  
 </​code>​ </​code>​
Line 269: Line 266:
  
 <code lua> <code lua>
- function Timer (bool_input,​ onDelay, offDelay, tmrAlias)+function Timer (bool_input,​ onDelay, offDelay, tmrAlias)
 --                bool      sec to ON  sec to OFF  string alias --                bool      sec to ON  sec to OFF  string alias
 + 
 +local now , nowString, curTimeStamp,​ curTmrState =  ​
 +os.time(), os.date("​%c",​ now), R(tmrAlias),​ TRUE(tmrAlias .."​_out"​) ​    
  
-local now , nowString, curTimeStamp,​ curTmrState =  os.time() +    DBG("Timer State Stamp", "|", tmrAlias, ​curTmrState, os.date("​%c",​ curTimeStamp)) ​
-                                                    os.date("%c", ​now),  +
-                                                    R(tmrAlias), +
-                                                    TRUE(tmrAlias .."​_out"​) ​     +
-                                           +
-DEBUG("​curTimeStamp - ", os.date("​%c",​ curTimeStamp) ) +
-DEBUG ("cur "​..tmrAlias.."​ State =  "​..tostring(curTmrState)) ​                 +
 -- protects from malfunctions on very first run  -- protects from malfunctions on very first run 
 if curTimeStamp == 0 then  if curTimeStamp == 0 then 
-    ​DEBUG("​curTimeStamp was zero in this timer!"​)+    ​DBG("​curTimeStamp was zero in this timer!"​)
     WriteReg(tmrAlias,​ now)     WriteReg(tmrAlias,​ now)
     return nil, 0 -- countdown ​     return nil, 0 -- countdown ​
 end  end 
 + 
     -- in and output are equal                                                          -- in and output are equal                                                     
-    ​if (bool_input == curTmrState) then  + 
-        WriteReg(tmrAlias,​ now)                           DEBUG("​timer ​input match state "​) ​+if (bool_input == curTmrState) then  
 +        WriteReg(tmrAlias,​ now) ; DBG("​timer ​inputs ​match"​) ​
         return curTmrState,​ 0   -- as bool          return curTmrState,​ 0   -- as bool 
-    ​ +        ​ 
-    -- TON      +                            -- TON      
-    elseif bool_input then  +elseif bool_input then  
-         if ((now - GetReg(tmrAlias)) > onDelay) then  +         if ((now - curTimeStamp) > onDelay) then  
-             WriteReg(tmrAlias .."​_out", ​1 +             SET(tmrAlias .."​_out"​) ; WriteReg(tmrAliasnow; DBG("​detected ON state after delay"​)
-                                                        DEBUG("​detected ON state after delay (input, now, tmr, onDelay ):", bool_input, nowString, onDelay)+
              ​return true, 0  ​              ​return true, 0  ​
         else          else 
-            local countDown = onDelay - (now - curTimeStamp) +            local countDown = onDelay - (now - curTimeStamp) ​; DBG("​countdown to On in "countDown)
-            DEBUG("​countdown to On in " ​.. tmrAlias .. " "​.. ​countDown)+
             return curTmrState,​ countDown             return curTmrState,​ countDown
         end          end 
 + 
 +                            -- TOFF     
 +elseif not bool_input then 
     ​     ​
-    -- TOFF      +        ​if ((now - curTimeStamp) > offDelay) then    
-    elseif not bool_input then  +            ​RESET(tmrAlias .."​_out"​) ; WriteReg (tmrAliasnow; DBG("​detected OFF state after delay"​) 
-        ​if (now - GetReg ( tmrAlias ​) > offDelay) then    +            return false, 0   
-            ​WriteReg ​(tmrAlias .."​_out", ​0) +
-            DEBUG("​detected OFF state after delay (input, now, tmr, offDelay ):", bool_input, nowString, offDelay+
-            return false  +
         else          else 
-            local countDown = offDelay - (now - curTimeStamp) +            local countDown = offDelay - (now - curTimeStamp) ​; DBG("​countdown to OFF in "countDown)
-            DEBUG ("​countdown to OFF in " ​.. tmrAlias .." "​.. ​countDown)+
             return curTmrState,​ countDown             return curTmrState,​ countDown
         end          end 

Page Tools