G5D95

            Помню, умею, могу:

              + Помню -- ходячий Гугль.
              + Умею  -- посещает театральный кружок и виварий
                         (обучение через подражание)
              + Могу  -- изматывающие тренировки*0.
                         советы от корифеев программирования*1:
                         + учитесь у мастеров (но не у жадных ленивцев)
                         + делайте что-нибудь (пишите свой код)
                         + работайте в команде (все сидят за одним 
                           "распределенным" компьютером, Интернетом 
                           называется).

            *0) Намедни закупил в онлайн-буксторе 
                "Руководство по накачиванию мышц".
                Написано, что освоить можно за один год, 
                а брошюрка тощая такая, как я, страниц 50 всего. 
                Прочел за час.. это отстой, пацаны -- 
                мышцы не отросли вовсе.
               
            *1) Калеб Докси. Введение в программирование на Go. 
                             В создании языка принимали участие 
                             Кен Томпсон, Роб Пайк,.. Вам мало?

Светофор*. Python + Arduino, Ubuntu Gnome 16.04
===============================================

Внимание: Для правильной работы Wine + UnoArduSim виртуальная машина VirtualBox должна иметь CPU c одним ядром.

  Тестировали в классе такую настройку:
  
  Host:      Windows 10 x64-86
  Программа: VirtualBox 5.0.20 64-bit
  HDD:       Hamster-18GB-G56.exe (Ubuntu 16.04 x64-86)
  CPU:       1 Core
  RAM:       4096MB
  Display:   128MB, 3D acceleration [OFF]

Arduino
--------

  $ unoardusim &

void setup() {
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode( 9, OUTPUT);
  pinMode( 8, OUTPUT);
}

void loop() {
  digitalWrite(13, HIGH);
  digitalWrite(12, LOW);
  digitalWrite(11, LOW);
  digitalWrite( 9, LOW);
  digitalWrite( 8, HIGH);
  delay(1000);

  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite( 9, HIGH);
  digitalWrite( 8, LOW);
  delay(1000);

  digitalWrite(13, LOW);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  digitalWrite( 9, HIGH);
  digitalWrite( 8, LOW);
  delay(1000);

  digitalWrite(13, LOW);
  digitalWrite(12, HIGH);
  digitalWrite(11, LOW);
  digitalWrite( 9, HIGH);
  digitalWrite( 8, LOW);
  delay(1000);
}

*) светофор           -- traffic lights (eng.)
   пешеходный переход -- pelican crossing (eng.)

------------------------------------------------------------------------

Питон

  $ python traffic.py

import os
import ctypes
import time
from visual import *

name = 'ma.so'
lib = os.path.dirname(os.path.abspath(__file__)) + os.path.sep + name
dll = ctypes.cdll.LoadLibrary(lib)

def getScreenSize():
    result = (ctypes.c_int*2)()
    dll.X_screen_size(result)
    return [result[0], result[1]]

def pickColorOnClick():
    rs = (ctypes.c_int*6)()
    dll.X_mouse_select(rs)
    return rs[0], rs[1], rs[2], rs[3]/65536., rs[4]/65536., rs[5]/65536.

def pickColorAt( ax, ay):
    rs = (ctypes.c_int*3)()
    dll.X_color_at(ctypes.c_int(ax), ctypes.c_int(ay), rs)
    return rs[0]/65536., rs[1]/65536., rs[2]/65536.

if __name__ == '__main__':
    print "screen size", getScreenSize()
    
    print "Click on pixel, where RED light for WHEEL blinks"
    rrw = pickColorOnClick()
    print "Click on pixel, where YELLOW light for WHEEL blinks"
    ryw = pickColorOnClick()
    print "Click on pixel, where GREEN light for WHEEL blinks"
    rgw = pickColorOnClick()
    print "Click on pixel, where RED light for FOOT blinks"
    rrf = pickColorOnClick()
    print "Click on pixel, where GREEN light for FOOT blinks"
    rgf = pickColorOnClick()
 
    xrw = rrw[1]; yrw = rrw[2];
    xyw = ryw[1]; yyw = ryw[2];
    xgw = rgw[1]; ygw = rgw[2];
    xrf = rrf[1]; yrf = rrf[2];
    xgf = rgf[1]; ygf = rgf[2];
    
    srw = sphere(color=color.red, radius=5, pos=(0,27,0))
    syw = sphere(color=color.yellow, radius=5, pos=(0,17,0))
    sgw = sphere(color=color.green, radius=5, pos=(0,7,0))

    srf = sphere(color=color.red, radius=5, pos=(0,-13,0))
    sgf = sphere(color=color.green, radius=5, pos=(0,-23,0))

    # Wheel
    box(pos=(-10, 17,  0),length=30,height= 2,width=10,axis=(0,1,0))
    box(pos=( 10, 17,  0),length=30,height= 2,width=10,axis=(0,1,0))
    # Foot
    box(pos=(  0,-18, 10),length=20,height=10,width= 2,axis=(0,1,0))
    box(pos=(  0,-18,-10),length=20,height=10,width= 2,axis=(0,1,0))
    
    while(True):
        rrw = pickColorAt( xrw, yrw)
        srw.color = (rrw[0], rrw[1], rrw[2])
        ryw = pickColorAt( xyw, yyw)
        syw.color = (ryw[0], ryw[1], ryw[2])
        rgw = pickColorAt( xgw, ygw)
        sgw.color = (rgw[0], rgw[1], rgw[2])
        rrf = pickColorAt( xrf, yrf)
        srf.color = (rrf[0], rrf[1], rrf[2])
        rgf = pickColorAt( xgf, ygf)
        sgf.color = (rgf[0], rgf[1], rgf[2])
        time.sleep(.1)

