Advertisement
Guest User

Untitled

a guest
May 13th, 2014
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 21.59 KB | None | 0 0
  1. open System
  2. open Trik
  3. open Microsoft.FSharp.Core.Operators
  4. open Microsoft.FSharp.Control
  5.  
  6. type RGB = {r: int; g: int; b: int} with
  7.     static member Zero = {r = 0; g = 0; b =0}
  8.  
  9. [<Literal>]
  10. let MagicSize = 4
  11.  
  12. let sleep (msec:int) = System.Threading.Thread.Sleep msec
  13.  
  14. [<EntryPoint>]
  15. let main args =
  16.     Helpers.I2C.init "/dev/i2c-2" 0x48 1
  17.     use gnd = new Trik.PowerMotor(0x16)
  18.     use stripe = new Trik.LedStripe(0x14, 0x15, 0x17, 0x16)
  19.     gnd.SetPower(100)
  20.  
  21.     use gSM = new Servomotor("/sys/class/pwm/ehrpwm.1:1", {stop = 0; zero = 1100000; min = 900000; max = 1400000; period = 20000000})
  22.  
  23.     use file = new IO.StreamReader("/tmp/dsp-detector.out.fifo")
  24.  
  25.     let mutable turnG = 0
  26.     let mutable turnGprev = 0
  27.  
  28.     // Для заполнения flagsMas[] и red[], gre[], blu[]
  29.     let createMagicArray() = Array.create MagicSize RGB.Zero
  30.  
  31.     let currInput = ref (createMagicArray ())
  32.  
  33.     let rec updateCurrentFrameInfo () =
  34.         async {
  35.             let line = file.ReadLine() // hope we are faster to read than to process frames with DSP
  36.             let mas = line.Split [|' '|]
  37.             let tmp = Array.init MagicSize <| fun i ->
  38.                 { r = 0xFF &&& (int mas.[i + 3] >>> 16)
  39.                   g = 0xFF &&& (int mas.[i + 3] >>> 8)
  40.                   b = 0xFF &&& int mas.[i + 3] }
  41.  
  42.             currInput := tmp // no explicit lock
  43.             do! updateCurrentFrameInfo()
  44.         }
  45.  
  46.     updateCurrentFrameInfo() |> Async.Start
  47.  
  48.     let prevLED = ref RGB.Zero
  49.  
  50.     // Для определения следующего цвета ленты
  51.     let mutable nextObtained = createMagicArray()
  52.     let mutable prevObtained = createMagicArray()
  53.  
  54.     // red, gre, blu are value from 0 to 255
  55.     let changeColor prev cur =
  56.         let deltaR = cur.r - prev.r
  57.         let deltaG = cur.g - prev.g
  58.         let deltaB = cur.b - prev.b
  59.         let steps = 10
  60.         let sleep () = sleep <| 2000 / steps
  61.         for i = 1 to steps do        
  62.             let red, green, blue = (prev.r * steps + i * deltaR) / steps, (prev.g * steps + i * deltaG) / steps, (prev.b * steps + i * deltaB) / steps
  63.             stripe.SetPower(red, green, blue)
  64.             sleep()
  65.  
  66.     gSM.SetPower(0)
  67.  
  68.     while true do   // лучше пока не нажата кнопка
  69.  
  70.         let flags = Array.create MagicSize 0
  71.  
  72.         prevObtained <- nextObtained
  73.  
  74.         let steps = 10
  75.  
  76.         let sleep() = sleep <| 2000 / steps
  77.  
  78.         for counter = 1 to steps do
  79.             let prevInput = currInput  
  80.             let threshold = 10
  81.             for i = 1 to 3 do
  82.            
  83.                 if Array.forall2 (fun x y -> Math.Abs(x.r - y.r) <= threshold && Math.Abs(x.g - y.g) <= threshold && Math.Abs(x.b - y.b) <= threshold) !currInput !prevInput
  84.                 then    
  85.                     flags.[i] <- flags.[i] + 1
  86.  
  87.                     nextObtained <- !currInput
  88.  
  89.         let inline change (rgb: RGB) =
  90.             printfn "change (redPrev, grePrev, bluPrev) %A" prevLED
  91.             printfn "change (red, gre, blu) %A" (rgb.r, rgb.g, rgb.b)
  92.             changeColor !prevLED rgb
  93.             prevLED := rgb
  94.  
  95.         let mutable changeOfColor1 = Array.create MagicSize 0
  96.         let mutable changeOfColor2 = Array.create MagicSize 0
  97.  
  98.         if Math.Abs(nextObtained.[1].r - prevObtained.[1].r) >= 10 ||
  99.            Math.Abs(nextObtained.[1].g - prevObtained.[1].g) >= 10 ||
  100.            Math.Abs(nextObtained.[1].b - prevObtained.[1].b) >= 10
  101.            then changeOfColor1.[1] <- 1
  102.  
  103.         if Math.Abs(nextObtained.[2].r - prevObtained.[2].r) >= 10 ||
  104.            Math.Abs(nextObtained.[2].g - prevObtained.[2].g) >= 10 ||
  105.            Math.Abs(nextObtained.[2].b - prevObtained.[2].b) >= 10
  106.            then changeOfColor1.[2] <- 1
  107.  
  108.         if Math.Abs(nextObtained.[3].r - prevObtained.[3].r) >= 10 ||
  109.            Math.Abs(nextObtained.[3].g - prevObtained.[3].g) >= 10 ||
  110.            Math.Abs(nextObtained.[3].b - prevObtained.[3].b) >= 10
  111.            then changeOfColor1.[3] <- 1
  112.    
  113.         if Math.Abs(nextObtained.[1].r - (!prevLED).r) >= 10 ||
  114.            Math.Abs(nextObtained.[1].g - (!prevLED).g) >= 10 ||
  115.            Math.Abs(nextObtained.[1].b - (!prevLED).b) >= 10
  116.            then changeOfColor2.[1] <- 1
  117.  
  118.         if Math.Abs(nextObtained.[2].r - (!prevLED).r) >= 10 ||
  119.            Math.Abs(nextObtained.[2].g - (!prevLED).g) >= 10 ||
  120.            Math.Abs(nextObtained.[2].b - (!prevLED).b) >= 10
  121.            then changeOfColor2.[2] <- 1
  122.  
  123.         if Math.Abs(nextObtained.[3].r - (!prevLED).r) >= 10 ||
  124.            Math.Abs(nextObtained.[3].g - (!prevLED).g) >= 10 ||
  125.            Math.Abs(nextObtained.[3].b - (!prevLED).b) >= 10
  126.            then changeOfColor2.[3] <- 1
  127.  
  128.         // turnG = {-90; 0; 90}
  129.  
  130.     // 9 попаданий в один цвет из 12-ти за 2 секунды, скорее всего, говорят о его стабильности
  131.         if flags.[1] >= 9 && flags.[2] >= 9 && flags.[3] >= 9 then
  132.         // Цвета во всех трех областях стабильны (скорее всего, нет мельканий)
  133.  
  134.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  135.             if changeOfColor1.[1] = 1 && changeOfColor2.[1] = 1 && turnG <> -90 then
  136.                 turnG <- -90
  137.  
  138.                 System.Threading.Thread.Sleep 1000
  139.                
  140.                 gSM.SetPower(turnG)
  141.                 printfn "\ngSM.SetPower(%A)\n" turnG
  142.                 change nextObtained.[1]
  143.             elif changeOfColor1.[2] = 1 && changeOfColor2.[2] = 1 && turnG <> 0 then
  144.                 turnG <- 0
  145.  
  146.                 System.Threading.Thread.Sleep 1000
  147.  
  148.                 gSM.SetPower(turnG)
  149.                 printfn "\ngSM.SetPower(%A)\n" turnG
  150.                 change nextObtained.[2]
  151.             elif changeOfColor1.[3] = 1 && changeOfColor2.[3] = 1 && turnG <> 90 then
  152.                 turnG <- 90
  153.  
  154.                 System.Threading.Thread.Sleep 1000
  155.  
  156.                 gSM.SetPower(turnG)
  157.                 printfn "\ngSM.SetPower(%A)\n" turnG
  158.                 change nextObtained.[3]
  159.  
  160.             // Если цвет изменился в этой области, то все ОК
  161.             elif changeOfColor1.[1] = 1 && turnG <> -90 then
  162.                 turnG <- -90
  163.  
  164.                 System.Threading.Thread.Sleep 1000
  165.  
  166.                 gSM.SetPower(turnG)
  167.                 printfn "\ngSM.SetPower(%A)\n" turnG
  168.                 change nextObtained.[1]
  169.             elif changeOfColor1.[2] = 1 && turnG <> 0 then
  170.                 turnG <- 0
  171.  
  172.                 System.Threading.Thread.Sleep 1000
  173.  
  174.                 gSM.SetPower(turnG)
  175.                 printfn "\ngSM.SetPower(%A)\n" turnG
  176.                 change nextObtained.[2]
  177.             elif changeOfColor1.[3] = 1 && turnG <> 90 then
  178.                 turnG <- 90
  179.  
  180.                 System.Threading.Thread.Sleep 1000
  181.  
  182.                 gSM.SetPower(turnG)
  183.                 printfn "\ngSM.SetPower(%A)\n" turnG
  184.                 change nextObtained.[3]
  185.  
  186.             // Если цвет отличен от текущего, то все ОК
  187.             elif changeOfColor2.[1] = 1 && turnG <> -90 then
  188.                 turnG <- -90
  189.  
  190.                 System.Threading.Thread.Sleep 1000
  191.  
  192.                 gSM.SetPower(turnG)
  193.                 printfn "\ngSM.SetPower(%A)\n" turnG
  194.                 change nextObtained.[1]
  195.             elif changeOfColor2.[2] = 1 && turnG <> 0 then
  196.                 turnG <- 0
  197.  
  198.                 System.Threading.Thread.Sleep 1000
  199.  
  200.                 gSM.SetPower(turnG)
  201.                 printfn "\ngSM.SetPower(%A)\n" turnG
  202.                 change nextObtained.[2]
  203.             elif changeOfColor2.[3] = 1 && turnG <> 90 then
  204.                 turnG <- 90
  205.  
  206.                 System.Threading.Thread.Sleep 1000
  207.  
  208.                 gSM.SetPower(turnG)
  209.                 printfn "\ngSM.SetPower(%A)\n" turnG
  210.                 change nextObtained.[3]
  211.  
  212.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  213.             elif changeOfColor1.[1] = 1 && changeOfColor2.[1] = 1 then
  214.                 change nextObtained.[1]
  215.             elif changeOfColor1.[2] = 1 && changeOfColor2.[2] = 1 then
  216.                 change nextObtained.[2]
  217.             elif changeOfColor1.[3] = 1 && changeOfColor2.[3] = 1 then
  218.                 change nextObtained.[3]
  219.  
  220.             // Если цвет изменился в этой области, то все ОК
  221.             elif changeOfColor1.[1] = 1 then
  222.                 change nextObtained.[1]
  223.             elif changeOfColor1.[2] = 1 then
  224.                 change nextObtained.[2]
  225.             elif changeOfColor1.[3] = 1 then
  226.                 change nextObtained.[3]
  227.  
  228.             // Если цвет отличен от текущего, то все ОК
  229.             elif changeOfColor2.[1] = 1 then
  230.                 change nextObtained.[1]
  231.             elif changeOfColor2.[2] = 1 then
  232.                 change nextObtained.[2]
  233.             elif changeOfColor2.[3] = 1 then
  234.                 change nextObtained.[3]
  235.  
  236.             // Цвет везде одинаковый и нигде не изменился
  237.             elif turnG <> -90 then
  238.                 turnG <- -90
  239.  
  240.                 System.Threading.Thread.Sleep 1000
  241.  
  242.                 gSM.SetPower(turnG)
  243.                 printfn "\ngSM.SetPower(%A)\n" turnG
  244.             elif turnG <> 0 then
  245.                 turnG <- 0
  246.  
  247.                 System.Threading.Thread.Sleep 1000
  248.  
  249.                 gSM.SetPower(turnG)
  250.                 printfn "\ngSM.SetPower(%A)\n" turnG
  251.             elif turnG <> 90 then
  252.                 turnG <- 90
  253.  
  254.                 System.Threading.Thread.Sleep 1000
  255.  
  256.                 gSM.SetPower(turnG)
  257.                 printfn "\ngSM.SetPower(%A)\n" turnG
  258.  
  259.         // Цвет стабилен только в первых двух областях
  260.         elif flags.[1] >= 9 && flags.[2] >= 9 then
  261.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  262.             if changeOfColor1.[1] = 1 && changeOfColor2.[1] = 1 && turnG <> -90 then
  263.                 turnG <- -90
  264.  
  265.                 System.Threading.Thread.Sleep 1000
  266.  
  267.                 gSM.SetPower(turnG)
  268.                 printfn "\ngSM.SetPower(%A)\n" turnG
  269.                 change nextObtained.[1]
  270.             elif changeOfColor1.[2] = 1 && changeOfColor2.[2] = 1 && turnG <> 0 then
  271.                 turnG <- 0
  272.  
  273.                 System.Threading.Thread.Sleep 1000
  274.  
  275.                 gSM.SetPower(turnG)
  276.                 printfn "\ngSM.SetPower(%A)\n" turnG
  277.                 change nextObtained.[2]
  278.  
  279.             // Если цвет изменился в этой области, то все ОК
  280.             elif changeOfColor1.[1] = 1 && turnG <> -90 then
  281.                 turnG <- -90
  282.  
  283.                 System.Threading.Thread.Sleep 1000
  284.  
  285.                 gSM.SetPower(turnG)
  286.                 printfn "\ngSM.SetPower(%A)\n" turnG
  287.                 change nextObtained.[1]
  288.             elif changeOfColor1.[2] = 1 && turnG <> 0 then
  289.                 turnG <- 0
  290.  
  291.                 System.Threading.Thread.Sleep 1000
  292.  
  293.                 gSM.SetPower(turnG)
  294.                 printfn "\ngSM.SetPower(%A)\n" turnG
  295.                 change nextObtained.[2]
  296.  
  297.             // Если цвет отличен от текущего, то все ОК
  298.             elif changeOfColor2.[1] = 1 && turnG <> -90 then
  299.                 turnG <- -90
  300.  
  301.                 System.Threading.Thread.Sleep 1000
  302.  
  303.                 gSM.SetPower(turnG)
  304.                 printfn "\ngSM.SetPower(%A)\n" turnG
  305.                 change nextObtained.[1]
  306.             elif changeOfColor2.[2] = 1 && turnG <> 0 then
  307.                 turnG <- 0
  308.  
  309.                 System.Threading.Thread.Sleep 1000
  310.  
  311.                 gSM.SetPower(turnG)
  312.                 printfn "\ngSM.SetPower(%A)\n" turnG
  313.                 change nextObtained.[2]
  314.  
  315.  
  316.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  317.             elif changeOfColor1.[1] = 1 && changeOfColor2.[1] = 1 then
  318.                 change nextObtained.[1]
  319.             elif changeOfColor1.[2] = 1 && changeOfColor2.[2] = 1 then
  320.                 change nextObtained.[2]
  321.  
  322.             // Если цвет изменился в этой области, то все ОК
  323.             elif changeOfColor1.[1] = 1 then
  324.                 change nextObtained.[1]
  325.             elif changeOfColor1.[2] = 1 then
  326.                 change nextObtained.[2]
  327.  
  328.             // Если цвет отличен от текущего, то все ОК
  329.             elif changeOfColor2.[1] = 1 then
  330.                 change nextObtained.[1]
  331.             elif changeOfColor2.[2] = 1 then
  332.                 change nextObtained.[2]
  333.  
  334.  
  335.             // Цвет везде одинаковый и нигде не изменился
  336.             if turnG <> 90 then
  337.                 turnG <- 90
  338.  
  339.                 System.Threading.Thread.Sleep 1000
  340.  
  341.                 gSM.SetPower(turnG)
  342.                 printfn "\ngSM.SetPower(%A)\n" turnG
  343.             elif turnG <> 0 then
  344.                 turnG <- 0
  345.  
  346.                 System.Threading.Thread.Sleep 1000
  347.  
  348.                 gSM.SetPower(turnG)
  349.                 printfn "\ngSM.SetPower(%A)\n" turnG
  350.  
  351.         // Цвет стабилен только в 1 и 3 областях
  352.         elif flags.[1] >= 9 && flags.[3] >= 9 then
  353.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  354.             if changeOfColor1.[1] = 1 && changeOfColor2.[1] = 1 && turnG <> -90 then
  355.                 turnG <- -90
  356.  
  357.                 System.Threading.Thread.Sleep 1000
  358.  
  359.                 gSM.SetPower(turnG)
  360.                 printfn "\ngSM.SetPower(%A)\n" turnG
  361.                 change nextObtained.[1]
  362.             elif changeOfColor1.[3] = 1 && changeOfColor2.[3] = 1 && turnG <> 90 then
  363.                 turnG <- 90
  364.  
  365.                 System.Threading.Thread.Sleep 1000
  366.  
  367.                 gSM.SetPower(turnG)
  368.                 printfn "\ngSM.SetPower(%A)\n" turnG
  369.                 change nextObtained.[3]
  370.  
  371.             // Если цвет изменился в этой области, то все ОК
  372.             elif changeOfColor1.[1] = 1 && turnG <> -90 then
  373.                 turnG <- -90
  374.  
  375.                 System.Threading.Thread.Sleep 1000
  376.  
  377.                 gSM.SetPower(turnG)
  378.                 printfn "\ngSM.SetPower(%A)\n" turnG
  379.                 change nextObtained.[1]
  380.             elif changeOfColor1.[3] = 1 && turnG <> 90 then
  381.                 turnG <- 90
  382.  
  383.                 System.Threading.Thread.Sleep 1000
  384.  
  385.                 gSM.SetPower(turnG)
  386.                 printfn "\ngSM.SetPower(%A)\n" turnG
  387.                 change nextObtained.[3]
  388.  
  389.             // Если цвет отличен от текущего, то все ОК
  390.             elif changeOfColor2.[1] = 1 && turnG <> -90 then
  391.                 turnG <- -90
  392.  
  393.                 System.Threading.Thread.Sleep 1000
  394.  
  395.                 gSM.SetPower(turnG)
  396.                 printfn "\ngSM.SetPower(%A)\n" turnG
  397.                 change nextObtained.[1]
  398.             elif changeOfColor2.[3] = 1 && turnG <> 90 then
  399.                 turnG <- 90
  400.  
  401.                 System.Threading.Thread.Sleep 1000
  402.  
  403.                 gSM.SetPower(turnG)
  404.                 printfn "\ngSM.SetPower(%A)\n" turnG
  405.                 change nextObtained.[3]
  406.  
  407.  
  408.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  409.             if changeOfColor1.[1] = 1 && changeOfColor2.[1] = 1 then
  410.                 change nextObtained.[1]
  411.             elif changeOfColor1.[3] = 1 && changeOfColor2.[3] = 1 then
  412.                 change nextObtained.[3]
  413.  
  414.             // Если цвет изменился в этой области, то все ОК
  415.             elif changeOfColor1.[1] = 1 then
  416.                 change nextObtained.[1]
  417.             elif changeOfColor1.[3] = 1 then
  418.                 change nextObtained.[3]
  419.  
  420.             // Если цвет отличен от текущего, то все ОК
  421.             elif changeOfColor2.[1] = 1 then
  422.                 change nextObtained.[1]
  423.             elif changeOfColor2.[3] = 1 then
  424.                 change nextObtained.[2]
  425.  
  426.  
  427.             // Цвет везде одинаковый и нигде не изменился
  428.             elif turnG <> -90 then
  429.                 turnG <- -90
  430.  
  431.                 System.Threading.Thread.Sleep 1000
  432.  
  433.                 gSM.SetPower(turnG)
  434.                 printfn "\ngSM.SetPower(%A)\n" turnG
  435.             elif turnG <> 90 then
  436.                 turnG <- 90
  437.  
  438.                 System.Threading.Thread.Sleep 1000
  439.  
  440.                 gSM.SetPower(turnG)
  441.                 printfn "\ngSM.SetPower(%A)\n" turnG
  442.  
  443.         // Цвет стабилен только в 2 и 3 областях
  444.         elif flags.[2] >= 9 && flags.[3] >= 9 then
  445.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  446.             if changeOfColor1.[2] = 1 && changeOfColor2.[2] = 1 && turnG <> 0 then
  447.                 turnG <- 0
  448.                 gSM.SetPower(turnG)
  449.                 printfn "\ngSM.SetPower(%A)\n" turnG
  450.                 change nextObtained.[2]
  451.             elif changeOfColor1.[3] = 1 && changeOfColor2.[3] = 1 && turnG <> 90 then
  452.                 turnG <- 90
  453.  
  454.                 System.Threading.Thread.Sleep 1000
  455.  
  456.                 gSM.SetPower(turnG)
  457.                 printfn "\ngSM.SetPower(%A)\n" turnG
  458.                 change nextObtained.[3]
  459.  
  460.             // Если цвет изменился в этой области, то все ОК
  461.             elif changeOfColor1.[2] = 1 && turnG <> 0 then
  462.                 turnG <- 0
  463.  
  464.                 System.Threading.Thread.Sleep 1000
  465.  
  466.                 gSM.SetPower(turnG)
  467.                 printfn "\ngSM.SetPower(%A)\n" turnG
  468.                 change nextObtained.[2]
  469.             elif changeOfColor1.[3] = 1 && turnG <> 90 then
  470.                 turnG <- 90
  471.  
  472.                 System.Threading.Thread.Sleep 1000
  473.  
  474.                 gSM.SetPower(turnG)
  475.                 printfn "\ngSM.SetPower(%A)\n" turnG
  476.                 change nextObtained.[3]
  477.  
  478.             // Если цвет отличен от текущего, то все ОК
  479.             elif changeOfColor2.[2] = 1 && turnG <> 0 then
  480.                 turnG <- 0
  481.  
  482.                 System.Threading.Thread.Sleep 1000
  483.  
  484.                 gSM.SetPower(turnG)
  485.                 printfn "\ngSM.SetPower(%A)\n" turnG
  486.                 change nextObtained.[2]
  487.             elif changeOfColor2.[3] = 1 && turnG <> 90 then
  488.                 turnG <- 90
  489.  
  490.                 System.Threading.Thread.Sleep 1000
  491.  
  492.                 gSM.SetPower(turnG)
  493.                 printfn "\ngSM.SetPower(%A)\n" turnG
  494.                 change nextObtained.[3]
  495.  
  496.  
  497.             // Если цвет изменился в этой области и относительно текущего, то все ОК
  498.             elif changeOfColor1.[2] = 1 && changeOfColor2.[2] = 1 then
  499.                 change nextObtained.[2]
  500.             elif changeOfColor1.[3] = 1 && changeOfColor2.[3] = 1 then
  501.                 change nextObtained.[3]
  502.  
  503.             // Если цвет изменился в этой области, то все ОК
  504.             elif changeOfColor1.[2] = 1 then
  505.                 change nextObtained.[2]
  506.             elif changeOfColor1.[3] = 1 then
  507.                 change nextObtained.[3]
  508.  
  509.             // Если цвет отличен от текущего, то все ОК
  510.             elif changeOfColor2.[2] = 1 then
  511.                 change nextObtained.[2]
  512.             elif changeOfColor2.[3] = 1 then
  513.                 change nextObtained.[3]
  514.  
  515.             // Цвет везде одинаковый и нигде не изменился
  516.             elif turnG <> 0 then
  517.                 turnG <- 0
  518.  
  519.                 System.Threading.Thread.Sleep 1000
  520.  
  521.                 gSM.SetPower(turnG)
  522.                 printfn "\ngSM.SetPower(%A)\n" turnG
  523.             elif turnG <> 90 then
  524.                 turnG <- 90
  525.  
  526.                 System.Threading.Thread.Sleep 1000
  527.  
  528.                 gSM.SetPower(turnG)
  529.                 printfn "\ngSM.SetPower(%A)\n" turnG
  530.  
  531.         // Цвет стабилен только в 1 области
  532.         elif flags.[1] > 9 then
  533.             if turnG <> -90 then
  534.                 turnG <- -90
  535.  
  536.                 System.Threading.Thread.Sleep 1000
  537.  
  538.                 gSM.SetPower(turnG)
  539.                 printfn "\ngSM.SetPower(%A)\n" turnG
  540.             if changeOfColor2.[1] = 1 then
  541.                 change nextObtained.[1]
  542.  
  543.         // Цвет стабилен только во 2 области
  544.         elif flags.[2] > 9 then
  545.             if turnG <> 0 then
  546.                 turnG <- 0
  547.  
  548.                 System.Threading.Thread.Sleep 1000
  549.  
  550.                 gSM.SetPower(turnG)
  551.                 printfn "\ngSM.SetPower(%A)\n" turnG
  552.             if changeOfColor2.[2] = 1 then
  553.                 change nextObtained.[2]
  554.  
  555.         // Цвет стабилен только в 3 области
  556.         elif flags.[3] > 9 then
  557.             if turnG <> 90 then
  558.                 turnG <- 90
  559.  
  560.                 System.Threading.Thread.Sleep 1000
  561.  
  562.                 gSM.SetPower(turnG)
  563.                 printfn "\ngSM.SetPower(%A)\n" turnG
  564.             if changeOfColor2.[3] = 1 then
  565.                 change nextObtained.[3]
  566.     0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement