From 33cf1bc86438db20b3ed3dd4ca187711adbda36d Mon Sep 17 00:00:00 2001
From: Lucas Stratmann <lucas.stratmann@student.reutlingen-university.de>
Date: Mon, 18 May 2020 14:03:42 +0200
Subject: [PATCH] Initial Commit

---
 .gitignore                                    |   4 +
 res/PM31_RGB_LED.png                          | Bin 0 -> 19971 bytes
 .../ardublock/simulator/Simulator.java        | 145 ++++++++++++++++++
 .../ardublock/simulator/arduino/Arduino.java  |  78 ++++++++++
 .../ardublock/simulator/arduino/Pin.java      |  52 +++++++
 .../ardublock/simulator/arduino/Variable.java |  40 +++++
 .../ardublock/simulator/simcode/SimCode.java  |  18 +++
 .../ardublock/simulator/view/GUI.java         |  94 ++++++++++++
 .../simulator/view/modules/ArduinoUno.java    |  26 ++++
 .../simulator/view/modules/Button.java        |  26 ++++
 .../simulator/view/modules/Modul.java         |  69 +++++++++
 .../simulator/view/modules/Poti.java          |  25 +++
 .../ardublock/simulator/view/modules/RGB.java |  52 +++++++
 13 files changed, 629 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 res/PM31_RGB_LED.png
 create mode 100644 src/tec/letsgoing/ardublock/simulator/Simulator.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/arduino/Pin.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/arduino/Variable.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/view/GUI.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/view/modules/Button.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java
 create mode 100644 src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d8e3e3e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.project
+.classpath
+.settings/*
+bin/*
diff --git a/res/PM31_RGB_LED.png b/res/PM31_RGB_LED.png
new file mode 100644
index 0000000000000000000000000000000000000000..0b41b57258a19805ff63071ce49a250acfe0d6fa
GIT binary patch
literal 19971
zcmeAS@N?(olHy`uVBq!ia0y~yU{nKP4mJh`hVw^kZ!s`1uoOFahH!9jaMW<5bTBY5
za29w(7BevD{sCdeb%)=~U|?X7EOCt}3C>R|DNig)WhgH%*UQYyE>2D?NY%?PN}v7C
zMv8$!fx*+oF{EP7o4e%|A)$}{fBe4pa{8reWkp6ID~}hU4lLY@G?E<e#+I&qy>8v^
zS5epQ-hUOf?e+Dok9Mt#b!2f26m*<*X~}k#B@^zQ_E~oCzPw@MLq92>NuCz#pFf;9
z$FlhSOb@%A-|qyg>~do=5SGx)G(9|Vs$vC)YoJe8v|;H*OIF7hN|W3+DSDcvWPR{p
z7oA=$zd<~LUF6r_nmU_n1rO9b_2buC*qoH=K9}dkIgw|h*j~F^EytF)nq^Jol~TDm
zf4L~jLTybs*8aP_%P+Rxes(A@>uB7i2OFMV)683aS>ff=n4=FX`G4qdxG(?Q=61^k
zhHy`-pMpnUO6GZSZfs9GCaKeW=z{y~zZdNs1(;?mKI3)xVpdj}$nD&nTiHC--v`f`
z_n*CnqvG6`9qGb8;oeq1BRwZQI=oyh>#(}2$F73MkurV)E%(ku-t@RS&1vbU+f3pG
zPK8zP*zK$)C(rdX;GMMP(rFE!-dS@Ob<UWla?<VX%sJ5lEp{hzivxEqZ0IW8nWs|O
z{HW-^jK#H?$t7kp@+PIcRP}b-A+y~e_WJGh6G}Es%P4m7H(wkbdi(VTt6bZ=JP&0a
ztjSrDaZ_;lSC6UDA2qf!{eS(U+FHuTDpGm>ss%Cf+YMrc%@qHgiIP%K@=d&B{ZH)J
z(S8^0`O)Fkaz_s@?9%!7?e6L)A<w^;6t@&RT%G3RWoP#)Y{I|p+r`oka^Bm@a;kMN
znHrYivuou^d-+U*BkXf)y{jj<UHfpSwO&D4Y3=gamlm&jyY<eWm-#F6*1UbWjN^I3
zu|rj#;{P3dm{*b;5Oa#@z^$;q-}J<FCWU?8s^?>G^t10GTkML1^}25r7bms-;89&0
z)~)jOY$8wBq6bAg_nbP!qc~^2&BXrxHE$P&aXuGHb`tnoKXv8#+K=s->!glf@49R|
z+3e8DwF#FzqcU6deC#*<*FPp<A~yGb^lj!z&O&?knMw7ww6!UnF5=(1qFSTNDK}R)
z?Dffd?vsk0wl|a>#w_MGp7g8Rux-xsvc95FbG`7GQ%koLMPGmAzj)2W_^UHYE>C(d
zaW~zGb5`EdsDJA&3W$kad+yBXFiFM9+4<t@uezzTiXRknH@YTYoLKZ*qxskhTlwBU
zN!eeceowEQ+*DNi>Ad@^--q5tXY;T*&)-{{-FxxI?)gi&_RiNk<FP;5{iW)Z*$uC2
zuYMHuX;z7>(#%WTwQPHN$@b?lJA$n4?))*c^+2)@k5bt|g<ci!^-Rou^|4>qhg|Z~
zk2X5A^q!rHgFwpxF*{4f&kGECmrRYb`@8jW^UExe%&a@2FMnOu=4w*-5&h>-i7c0K
zL+kQs^QC;GJk{-`O|2srcMJR#Xi_M#ja|}tV&=(BOD6w6q*+;#WuVLS=<ssYxzT$M
zHYt2rapLoDPa&1UQ=!49Ez~^K?PUygJy#pfjSe<B=i=<l%*)GbG1rfWjrriggAzQk
zzrS31SrQZ++<f?<!?aW#G46v055`vcIlkcA6zKh9ic9X(Wy1Yhe&^c@jApcH`JMmp
zp_4Or&)+-GK31GKc~a5ZdiJheR_m{;cq$ngP5Sbs<k6!?f2!`CI_1SDYvq!esVUe0
z{gav6<jyHmMA&$xTKuk;ADhMbeBKAm&Y+{e{!BE{wb;4daz<U!EBU1Bt`fiBEm*oa
zAU^*5G~MWs#w$L7BBxHD*3{QmS5$1=n0$QE)p>WPE?=ba=H}-1HEY&{y}prS2C~P`
zk55?LPsPaS)0%Ud9Ja3Fc}H&O-?%p;zTEc11RjN#PmeB~S*SFnX2t5&$$x)+UE6l)
zB^NjM%^iixdE0;YoL{NIb$eTGw(%6d)a|!HqN%B=={0_iFESI8AM;F#+s8J`YQL~Z
zyZTKdjXmwNMJw*)nMZHSIry-k<W+5GXy}_;TVMB_um15Nk&D}U`@Y@BA1B`4mU|;7
zX|3wQawC2o_ri)_%$!jP%Z@GD{Ccs^qpp`G$NOX#@7os_Dp&Q#!t;Jz_rhguZ7nQC
zdOH}7XUblztgKwJY+2c_Z>u(LoOrmMfAy(cGwIjY*Q;AwOLreVw4?B`gjvpvaM||5
z2OF8$Pn<dP=87e&qJTuw*^Dz*yKldmvyjzo=A`DM0*vyTHg671Ww!r2B{6?r=MoLw
z)XeN_AO7zB9%Pr&@#^nf-eq&<$Xv}$NK90$|8;r(iWMs|G^01C@ruV)DBAzNd4A8c
z-%p=DHLUsZL9gCRgCq9f3>l}x3%dk2ExFobaD=sU;=Sc7SFH-VE9NR=dFaDsC(Z)_
z!H0M3|I2$f^Q*U)SAgH@+w&ehN?N~O)b-)~|9_T;YnVpwF4L7Z&kMP#udDkO<n928
zq_b?Et0fhcwIzRPY-E4>vgYm~)%EfGYgu|1Zkx74)_Tt=89w&1-Ft(d+wPrgYi&LI
z@$vrcQT2Csm98?1&lPXEcR(Q5Y0^|hBRQwvm#Vz~Jz9PEc1YySXVpG->$0pa7rx70
zdh%4+xtFiKR&7qy;AnJ8zP7M}WAaChw3`bu|I0p?h_5xdHe-g_{mTN<w--L%;x<WT
zed`^Dq+6EhYx;}3OsBWp^D@hF3_P>xQ6SHzIF`#VYka?3*j1Z#9sB<Ml$faN#~Frk
zscg-Tq9$`~^S!*d7Q6T7ZT)v=XYp;@Hia)@o8sIGwcTcJzOS~&pNp6GXwt@tsaKaQ
z+3@<??T>TJ{w_AOnUnkde*f<+0$ttRufK53{P^)z>4v=hf6IP-ef>OC%~PmbOgHJy
zj>5R7QoYBXhfY!W!sTnPKWWCs+ii}`Y#Xb;=dItg=jCNhX{#wmbfXQfT?v>!!QtSO
zlRNx&*G^LDWMmHE{=9W{{r`V5mPJQa=WE&6%vnCaZdUH?Z4>9t?Y)_k_UFe(6;;)r
zHUDq=wF|b)Q~SrdeIZD>echZ_ud>z`MTdwSe|A3q^WMzN%$C;H(qD6`_Rd@A+`ft_
zaPdWh%1<e3{`2m<s_u1DZf56y_r;P`@j?gdg4+tGjV7!49!hz2r=aV_iww6OiNa&g
zeZ9SvO-;83zrUEZ)n}H8C(jy@Uo3(?Zw+SpoS9>}`LObi%a<<AFiJfYssF3~UgdMc
zoEsbXWYsk^IzFGbpZ}r2@P6P6=_6}n*d==1($36qbaZ62w6vTueR_58i)&e1j~qKT
zY2Lhd*9%UZIH91a*?G8~KR6_0iPU@%IXS<gBBPZnS0;TIUg$4)@Cv7=r>Bal>cawy
z4L5UiwIgPoO*2``qihi^*4=8Dd~AUR7cVcbiJ94=ix~#9&pz7b`(m?;!Cc0@ara+-
z^i21jq|(&X#KHCIcJ*IQrVcwbM**e@93Zlf2IM(QS)aV^yO+<t@b=u%^EzMbo|hPy
znwdQ++F7+r^6s(69}~7lRqv8)y0ES|FEe)a<!hhHT?1FFSfOBHApvr5Y;iTWYhZ!Z
z+$-0wSH~Jg&h53mq2-uy*HYZ4U29W7z=XOxl6N0}3<wUse0c3EN%qtI-%5m84lXZ#
z7pAw|YQCuZz85dkzU-KL^!JZ#4}Q<fYg719axT`8(PsZ&UcT@Y!>#u%7M+#7ePYx4
z6&tT_TAZPOx_`~l;#2o3ngl$~olFP{h?u>3;#N!P>Rp;m3O@?Y-95$GB=Ez<fU`-U
zV4%ozC*RIydFZpmb;*Y>NB0L$y&YS&?a8|bSKr@1_^#+jO@2;*$akN;Gq-f4Y}q8%
z|L9?>ZvF?~Z`Y<-osaoruu|}3+<Wb{`su~*%I^JrD11lm`^)yXn_Ubzo!DoVu(cgs
zR=nYhM&(uYs8hOC#^pY{CMGxw_^<tMfAzPJQ&Q#cTmKI)G2UQVZq4Agy_+k0Yxv$R
z9U{M4k8Z!h*umNL>|x~h335}9z2E;MTfBDD0p%u70jtcL`%L$2&E6S)^OJOZa?T}<
z(7OW32Ku@+vl5zHXW!dDz4mDPEt|5$T+Z+7{xpZ*ocvkt$tgkc&(nGJgVOUYe)C`8
z1|`!MD$Um%It+I_J%8ZDzm}O!83j>$UwL}`d3)*j3;B6RYFGcekf*WrSwW=OCKX|E
znaBOlzH>e5@)WRo`S0cS!v9}x?>Qxtr(XZ-)%>{B&1`;&MW-VEeSEt*uGVvI;>FpP
z_PIiO{oTT*N9|s>NHj<Pd-rk2%JPWXYp;DlVWYm*>W8ZFCAEc9P5-=HT_2RZJ~{uQ
z;wdSuJ+FAXyjUNsPQG9E<3^^SW=-Ac+YA}1yn)j=N~CoE|M(WV#&7m6UHiZMnSz>e
zsq<wbPB&-&yK}Q&GyrVw-++<^)As$(exCk+WXiwCJN{q(|9ta2w`&Xu#b!(fN_ht6
zX>qOJj(^hc%S-vXur%)d%FWk5|9tq>eqX$rrOw2e%xcC~i8Ia@uQ`9q$uqX{^mQ&S
zYri+PtIvybxEOFAlKf$nZLFVP-F;h4C(-|-<G<aH50~8+&f!=TpTXodxADsglOnCp
zp{1v!w0_(^Hhu3Yxw(I}*U9c};3$@uy4?2U@6&D5&%JAA(Gc`$DrlQ`d&`u>jgoil
z|C)W9E|chfaGu%g{Bw8DJ-hSv2%G!oujlW-|4{j<US^g+CSN#faJ=fgQ=Eq+KWT97
zkNvCe_3HG`-%Iza-x7NHwd!zx|F_?*sufe!+s$fY)7R&Jmnl4Gc;@ts&a*c?@<JQu
zN6Gy-B05>2WJ2^ulfTy=XKJqAcJ<R~f4RqNv*$g37`gvJxVC(LWp3=Xv^u*)&h`4g
zX1|IE-6mycy(unqo}g_5^ZtLgR<F63`uyVg`9~j?{d(T~g-K|^m;Xm4d^8np?}|Bc
zWJE=tZb}sYRC+D#s%~i7B@dCKhtCQB-gD}(k7A5LfmGtM$@cN0*Rrmq=Po-H_Bix=
zSK{Z6EiKhkMXyi&6#FmF>-FCGKfZ=;yA#!Czde{`vI0lrV#^sW@{<)f7~Mf!Y-CTe
zPz&Ft7iVoM{>ARu_?WpbR3?A>zdb#lXU?`e{5)IE_2Jss(>E(m?b){4{akv`sTtGO
zzkb8J=lfyxH~N-E*K*(If>I6pSAPFTrv$}|SG<X6Z_0E?seiU?{`qsl)uG<+szg{9
zUwaTLma}1kgwXL1I}Sd%E|Pe0=8lpNtU5KH#rozuFW$G1pLMb-H&1JNr2y}hKDOyM
z^?ij{80vQa;^fNqzP0xIt?%zY)gI*EQ+=0v&%eLbIVW!)JZ`@4ShMl_XWvr!%bdNL
z-RE<td5f{gemTGK&~}HXDh1sILRArYp^W)&qmG?F7JGQgzvP=GHPyfKUny7BKHqNd
z%;~Vr@rc-kFaKN_TJ0V@eSdG+vW<P!%m3|JKKs(zs#1fQe`UPRMjd*2C*phTizNM+
zk1Fyym7V5d|C^_LSmL*L`?igJ{NL6jWxP?CbXaKjiq^*E*YBO0xmjTcx6{g*IoZ3`
zuAaq`=Y4&y`-|UQS>Bl?rb*?NQFqJN>26YCd=O~!_R1UUs#Js0QVr9~CS~y!kpU8K
z0;Bf%X|7RU61Vrv(Th_Aq<DS3H?u{~T_U#P`j?eFrUgphQq*T2d&wpeYP<d2lmGt|
z)^-Q1t#Uq^wR{>|`Q@K?4&?0&k5BpD@&Ef(d#fuy-+H%b_P8oP-@LlOp4HT~E-&)I
zr)Yz(+};XD1fG1}x~3~eDz<F@oZ~fns-0HOTqdZr&FQGghZnow*?7ve+FSau1%7#c
z+)#c^$W`rK*(!ZMmQ68v8Y29;?bqx;d$Va>r!PnCi`%Q)-sV<%BGyz{_T};Y?JiS<
z@2w9BU2bIFx9buIL(T!G#g3uwFRaS__H`ySx9<OTQMDxc@$>|#$rerK>wl^TowhH|
z5C8K$jc<DD@5do8suCilZnACKn%(Rv;5S`x?y;-N`l)Xx=I>!kn#cV|$Y*PBsfk4n
z%gdw2WeeZ$F23Y@XU0yC(0{(y#OD3^Wf}T&cK82Q?~nU@%c}4E$$fmfrm`g2`zG`A
z`zQDG%w+hJbjp9@i?b23X7heNyI=Q@rSZJ}!ICwPEGEyJ-+#1VlX6<zub(z{&+Y1E
z;sltSmad)k{rj4%uV3Z6_$q2^7d-J;{q?R~`Dr!gv)@Eyk1R3XS`!-;f9zCq{Jg^d
zA^Fd?+o^4Tv~b(Tbx&VE+q<Re)Qg8Jd!%OG_~deU`YSEz`8E55xBtFVc}sE5&PBI^
z<o-WeFT3u4>9w?d=WgA3_$!;Q{_L#7@!R7+%3RQ%f2!0aVuj%H!+t?E2K(exLa$q_
zT&L-*d|GJ+i{gPVHxrl+<UV$p=##Oc{QmU2@06_7`Hwz+H7%_r+u7h`uKiiA@|y<)
ze{i2W{&Mkz=*klp*W3zizj}Fd_?dr;cGz5zU-Q7HU0~;0zdK>#U6-4W-@I~O<+X{2
zm1M7H_pwFRkGFXmvG8`fT>7?GQKr^<2E+8zj&XH6%V)aZ&s}I@SHbf6(DE(6j%<pY
zuvTKt`!es@=cf2wDvX}9>+<&!zoSQAtDe>@nzB9Ge1hev+$no&Sz;HrUFg_Q_PY9x
zT#lJ^FRz(YuGt(ub-8}_$Y~Q(B|WDxa2|bp@bhE&$Y~c}mP+`z`J@@EZRU);ym7(G
zm1~xLd#$u+y?l$^r7QoWt0vmX``G5Tqz3F>cqMwv)%bF)xl2?JPr0?ad1YR_WvaYP
z@;g@XPe<m@JCO3}Z}a=2oe}%%Y~^de2!eWjMn;n&pPx_p^W!6rlu5^xD<MwK&b9lt
zZ`(F)&K#LO8OuZ8-rl~sDV3YmveIY1-CXVUdnQG0PFr|+Yn^NA_S-){U#@@lx4y>V
z%T#6#N!iEK&&zSR7?c|BEcbV}NtRkUy)KXSRQS_?@3ox%wja}<ouB`H^Q^mh&;NeE
z|NQCn_+u|ijOzc@Ow)}%HbK$Zs%F)M2?B1tQb$(=E{@o;;-%M@6BCtnqPO+f|9Qy&
z=VO2UlWWoWPiJMXJD6dz>R!HqM8%(t$1U@(RQ`E4vAu9khQg~yA-@j2KbZITdh!*?
zA3s}O?=1V$^v))?U#sNHT=%_Q{h7LJEfd50mG~>VoL;)S2lAP2Nc!0o=A3!7OZ3bf
z%gO)$Jh#77eBQR^_uK6@e?A<Z%eC~{lI6=kKWOIPRQTBK-Twb|_v(J<rk$H}^3&7P
zfg<<s|7YbE+mQ70c*VD?!P{)OqgGy@UGiG=a?cgdKUuGI8FJ3v_Vi1wn?C>Y+pra@
zzP;P|#iNYpuE@#x;knB$1olOS{Xb?Mx@PgLhj%Y8F@E-C$B#u-#zEHm&wI@gmD&8X
zG<fx&BZ~t*9Sk)2sdumXdF`ahlS4zfxVV1YeP4IHk(qtR|9`(Dw`2%P^)B<CwfJJj
zjz?YE5gQU1L9y#^_fti_?uR0X*3{Ho^^2LE@5y3*yGOHLuV47&uJREbzyBNkSC_xK
zmT)P%#P0vS&=@)0YCf5z8w3BgXqcEx>e#Sue)6NBJ8xFy*B8aNsefqK(a^|Q_jlp)
z*$?ZvrtGU1N#@-1`(L|?ipq*rH9wzD|MPA8{?ubVk~RN+K6i0*D|>MvZ1vPjmx8jg
zvI;C@ZoDnyVPme^JMY1Rghh)NbMo=!ef_&hXLH6yCA}RFnC4YH;uO<~I1ub_dvs6b
z=aACLlO|QXfBQY6=C0|K+KQeTtJzEcR0|~h%8?J=d)4vh!k{~HoO9#u7G`dZyqNK|
z;@5%H^#x^G*PlN;xAD`zuFxY#k5=woror|9$8r0Lw_C4Qe7Wczxu>FV_VG=(-^y5(
zbgWsUvuX3@m8(}fufHxVDA;%~!C~>m2W7iA-hLYr9)9`8jgFf+YNn=B8JXD(N?rua
zmwo&2;ln>q_3Ixl?zeknzW*n0^|v<<LG-0eeib2M;mZGWzt7m8U>AB{M8Ixw@oRh5
zE<0(T+vTaH3#L__6nJ>&Qo)k0F8xoHpL_qWayt3=<A>k(|IgFk_oJ!&e(m&!hokr3
z3=?TJ&AzrF`?}tlG-F9g$(W*(sw%3gTPt0!T)1$cQ&|1P$&-nnpPjAw^>TSiN{T`1
zDUnH&t}HBiIyKy=<V8T<zMpAYT3QvKPO67)pUlb0x#!a*?U?;fs!BGdHL<yueA<2K
z^RFBOPN!;_r)FOFtj@fbukI;)d<+~={5BsL?$`gfeZTLw-rwKf^FK#SQZY<A!qLVj
z>*eL;b$Y5#Y^-c#WMoKKSkm^}nK?N}GE5d-e%aB}qoSqN_2o;+rOTIRT9@mwva-Ip
zv9Won_w-Bq>+7GLo$c<^^WC69(Yfuzz3TUcmwn9(@7I3+_<jF>*`Hfp@+KeadHAqh
z{@MBScC8QRU3{T*>)m4>lRD02Hy&jCt2(*Zh23@Qlt{msJwM)S&pY(8uyQJ=Q-9Ec
zq)0RIvvZGcy&ki=>gUY#d5M>o`PO_m$gZMRmg9N5?(eUK8eBVf?tF81_w+SubaKq3
z4Gj%lTwD^2W?slJF)=Yo*nHEX-~q$ZrAsqRq}X^Q4s-}Adw6>*Yif3aMgrFF|2IoK
zzGh;lu)0z8x19Cbi|hXW`uOd3J}9|@lB!(om%z~KX)*g--db<_{MP+;$NthAGwat^
zHN-b*Dr@x`b}C2J+Ui-{dY#SM8ufeTUAM}rgt<npOiN$?e$|>6vU#yYdFR~r`&AKN
zZ{5z{e|Go#eW$J8@45UiAnV)H>G4G$9yq%7%bk66w7avrJNPT}T(3ZpQ>RW@RDIFN
zzP|2g+GfMlQzAyj#ykIfIxT6O#v@<<$I#N!QYUWDj13zmD_?m0=uyP363y!|#k?m^
zp1f0X*>}}r`+qkcpV^ZjW@_!tAuD`)<@rmKRUBUa?>3wf<aF+b!X}l%g9~1^NJj6U
zZWkI?su=ybY~ID4Dy&Z1n-}hGV?P;S%l4-5ZMdy;VAmn0>nBaCg^IE{SB0+UpKGnb
zvwP#q@0~mEc?S9QuJZG3nK<dl<kg*8$F&bEjWY|E61Z$6p?@t$Su<kqZ>P9ifz)lw
zZZovA<Y!g?zq|kTE0y>9yMJ6xu7C3BwEp+1w-**V$CO?T{qs8hf6}!zk#p_JKATKV
z+q!k@9E-xHPoIijy?$M2A@kyEm5-Y6#fukJ)YPh4edFTfq|Nh|ELqaht+%T~(YY;Q
z`|Y1kCi{bO%*jcrtCqJ(o98|Gc02$1-tYH5-{k-HuwDLByZ!%(b>I6Pleymfuipml
zBV4vWc;)Uc?KvWxSw_3<rnI~Z{Z=TZ*(Y(Y_I2#~)snmKo=cq`d+f{0%auP8zfKKt
z4-F6BT>HE1+nbxsI;U0C)rEzHoeK&KHt9V6Sg~UD>cxBZ%-OTYMuv}F*{vtx&5ez^
zhXwj%t&c6AU*{DRB=q_DdH3a)KVA)w-<W&bEN{m{wyPGa)92StJ8%Dg&Q$I2Rr6kH
zb{)EUU2oZe5Wg!;CQOm*`P5$gDiB(D#eC;0nI|?sW#8}pEw|XM_fyr|ozLezzU*(G
z`t;P)+;f51{&{(NJ9qA!Q+}^9*KT6=wF?&xyt}*m=C)kv!otEcv(5WEIyl~xS+5RT
zyJ*FV4(YrdjTbHi?ECpl+AROxnX~5i-(1yvSG04-pHHV}nr4fAzq>qcLE-s%wlRBu
zWChim%jFh4SSNT_#z*SG#|@kxUmU8ssq|UshOk34ca;76|7uPv->>?i)qgOMdFStQ
zyZ4;p=H}k{{a*FY*YW>f6{nP@x3soSoHVKF;DwFzHTTB(7Zn)^tNXbGirD>lz&yt<
z{qzpC*=LWf3SBK>Q(@rT#<OtUy1vra*9@z^yqLx?HFaiB4-Y5{>h1fHbm;Kmz2^j_
zrBDCry&n)3*H)SETU+&uNO<quSMR&3zVigTHqF|Y@I86{JdUONPA8WKZ(rN8`~42@
zuea|1|5u)NX2!uKo|CH<r249OCS6$(_~+B~{h(xYJ-%Lc_uX?nlEyP^DvkdCeP6$F
z{rdEKdn#L6TUS0ipPH6tRQ@jJ-_P^)zij@+ZolvO_F0lmS!sRpf|pkhvi##+J}tR3
z;ML@;ZQ_$>%s4ScGkDLb?yjzgty!Yw_bSu*x1O1OFd^aNqobhq#U*e3#LYKnm}Ck$
zxAQ&S`~4pCgH@~7De3F?+g5+8*!%t6?)T3&pSOGb<KyF1kLT6@`+4Npk)X}SAJnIP
z|CP|R>><0Hvc|2=zaL-xex`tBVYSJ-)z4nFc8B!8kFWh2y3A+hp$iM0t5>A%^POuo
zwNqIA)34X-AD39|e9*)_A$8{0*Vl!GgbuyAxjAxo+1l$d7eF;$^|zd9da<jl=Baq<
zL{*4>`+N27Ps4K_@A=hOoxXX`C~_>Cdsn_!_RzK_y$}EQbIyH|R}eHi_F$`c+>6k6
zC03CelUTi{>AYMxZEG&5Z7E^UAgUdvaN3AlTrcJJw%jSxrWuvJiD+tSy0NQt_4R5{
z$`4x?(|LE@y_B+hdn&KU=pMhj;2wkNgfH(Bf)rBhXY~DkKVg%1OK^P1_VsiAF$abA
z-@Lv)zTa(e;;k*2wpTWNi>-Lr8WIw+q5glJle6<ovs|g{>+4)6semH*+S=&7P8olG
zd}Lu|-I#aR>gvXz;9yU$m+p5P55&dq`_2|D-V$Ui=vUkSw}5y0ncWeg|8AzwFMPRl
zdfClgUjGz4g~H=1Rab|vKlZf9u<(&fS9iB%;UgC3HlBkiMjPw@|C{z}lTPtT)#)Ez
zE}#F)=HAlJdI#$~Yz@pOd^wj8q)-um9b&w9a-8hUWTVih(c5x9R&IS##(r(`>J=+A
zjEszayxaZ$Le|zEY4g7K`+oCzPLi-JQnCN@V6We`D=UL<?kd%mlYd>)D{0JD?U=BB
zjo^*Pmur6-PC2tPwtm&Kf>rZ4&gseh5?rO>WBF7*@YqBxC9SL6cm5g}ajo8&`Nk_^
z>s-Zlt<X}hq_Zi@=fyC@hu`P0ySA{nZO)uRxs~Mt*&*}SpGaGD>Sl?Z_y)6v^*T|H
zSCuEM%}e<3;9%U-$VgKSms;3bfXI-L5QDNe5$lVVUp_fIf8R^f?>YkORxI<Me{S{q
zeW#XqPL?pu64BrDfoXbNl_sdz`}^zbjht=M0`Je9IWuBySf7mLqF;BM+xeC*T*O!2
z{CUl`{#RagoXch`@c3u*UeW2+Ozr1^HYuS`J{_87uCYSXYH=~E?Av((S=VIzM2!zz
zZtYe+qRF+tVBVb|t*T<hXU(rJ%$$>OOz{2|(cLRI^v!sBJf!s1@nb;~ONw@XySn>x
zW=2SPS)8fz-qgFlCY<m(^n2y?m+Q{-E?&1K(^g)3uknmG>aRHa`xLaaPObjaE?=jh
ztlYd{fx`Mvd-m9Pd3#Sxo%#59|K|MrcF)ew_jh(?PTRcmtmn>HO&y({jt-7bpFVkb
zdMc`^wau9$bLsMBPF`MBb@k;>PcAx{lJw%j!Z-K!MvM9w8XC5=wO@*e=uZvUu|D{#
z#eSB{6J|L2cm>9*{Wem{GZ6kY_xPRb>yDSQRqxJxb!+|O{7u{`)z{f3UnrI0ejRE*
zhr!a)l1IY8A#~pC+1~r>{!UQo1Wi@-th=`@S9;>aiK|xX+|B&);h~I8#e^wSL@r&r
zbmH7OHCx-cQ>KV~`t)f}o6VA?OMl9oXECTak<ceT?fct=TQfHIvWMAw<`jg?{@Qkg
z=h32`nMc}>2*?XL*Oe}`_tWRdExKyy;TMvxccEr$;Vxlyzb!uAC(oWu{qy4^LrQx3
z?^N|En++2VFqFNy!Dynpcz5OJv;{A<UVIVo^7T!<zAo0TfAW+Y{mH3~zdt{pp72S7
zOPjy$V&2}L&d&-0kNGg1*>!L0qInm(O|@En-YD6$WJ!ypaoUPguV258el{yKG*nPp
z`gYL%pYLr|m6V!Jomv+C=f#T*Ev;E{zujG3x3Yw7ZfRk$`~Ajv{&7xzUgwkicX$n|
z;-8nZ`<{?FG9!>P<JOJ5ojbNP_J`*lf68~~zvH2sli$eA-~4B7n6_BAYv{c@(@U~s
zx8LsdTOO>Nc>Au3=b;RfOE+$KczAG>mX>OCHQmfPmbJC&>edJy6O$kF9?A&`HC>U|
zAzk?8+(RbW1f#5#EAtLyOyMwE{r`&j4NZORS0C#$oUR8;)v{k+$ylPb`fAtBoMTUm
z9v1C1kl-;fG5Nu>aoz<PpQyEBk<$vT=1TCe$?&ybUvh6-lctG@$Wp@%Z7y?GosTnQ
zTwqf4sHNrTquSdqHtasBeS&@I>-AGqRDyaq-{w`!e6WVyJt1F6Q_=9qoLleOrawKW
z<u&(}dYA37#S6Y}{IqP5#wzuku0;>Zc1LfEoRli*IVnUtn2pPGQk32Cm)2iTZMyU7
z-QK9RVs{#=k3PAcaOqUkqGqKFUi;)V-Dmjou@zPBQeSH;Cw^4*-rO3!{(aF-oC#q!
zDwehNWNwd}uvX#~ll6>}P19B{z9OwV&(HDU*-2BM-0&}PUVTgbW$M*jz6YPbxldC0
zQf156&OFzz{q)mAk3S|DNYtFOea(5+dhL!Fy*qj4ReR?hJLbm2)*OD}+V$((tEOJR
zaG@cE<IY0)I__ohK0h_L_w44IyX>#C)g8aC*QfrJzG|43^=7U#-!G+$8$VhL39Vdq
zq=8e7XVdxUS=aJPd)$<Hd3jH4>baS-Y~8xP2@@uS<#+Fzyhua$U`S-7XF!0!B$dRi
zQK8<iww3;ljF0F4b>Obk9sTRenv>azjvtY>7V!$*CMEatPo|X2tNRH}7eqz&y5#1r
zU1eisHEWX4*IO>j?S6Lk^ekDlh{<yj2Or<EWy{i^&j<|--I@~@5EpmPC}Yc>JuzEz
zD?L3qFJ8R3Dw*NRwX2IHn9OJVDLOhutgxu(#M{$yD$6f@*X=y~c+sAPLgnUnkFhqr
zIaVX|)$ncj8&(mkYw8aj6?bo3&>elbaF&5><j$L`K3%yIQdCqF^7P`xi&LhV^)~f)
zcRxPTDZFIq(ydqIZL3PAZ{KMe85y}`scEi8KtRBSP1OaFku$YgHf`P<{c7I32tTn~
z9}dLUoY6nH#B!<s$|d`H{us~6yCf>(*ZRol{XRxcb+yGUcMi&L+5EBe>-QA%c`pK<
zm%o+{U}sx?{OIqe^S9pq8T)L_k~5K4eb;8qw>#!@jqU5Sk1JQM%(=bIH}u~6czd&)
z8yAAokN3&?%r@)o>EYS;|KD#p-etAFzZus4Dp`=(@Z!qKU`C6&KNiK$&U{=od-CMN
ze|~<hl>;p~_`BwS%vavpKP%^4UYdG-pR+~mtI8xXZ;gu+U%4Osw`@Vdo{fL^iEZzX
ze9-9T_;5jJZL8o5o{MQk+<e<@a<k29eiZP@SUfQODLU&=#?4KsSFT-~G;P|k<MQ=A
zXVa1&9B9;u-sTg!fA@~Nd9Pl*^6>UvylvaGM~{+%f`eDCSg~N)vSZm*y_a96{Qvj&
z&%5&d!LrAn76k@H_;{5xz1r#^SaII|?~+Zc8s+((DrNG#;B{PO?>Bw+Dyi}Vy7`Jf
z=Gz@>Q90bm%)aLoJHMPyK!AXCc~$;CDIp=Jni`wm-`*ZhF)}Q8aA2D4qhtN@=eOUl
zyFK@8{=$nHJKk=)Jwc^2`FNjU#fOA1RkqdN->GV9p3L^Swk~$}g{-YS(#!5i{W;Lc
z>>(vt8}h*K-<!<`w>)={bMFf))Y-l4s(m%T$ir_e?;`jP+N<>X6htk_;*9c~G{Yc~
zX|`Ez(BAYfFD~k4%k;|I&(n?G_TXa$s0nLb{%*;-b?j-Aolj2-SnSrD^zF?}hu{mK
z{z2SVv)o%pb`(CY(YwB>@^hLKn~TC$L+wS&fBp@7*Oe$9n3r2!aChRS9J41Y-oIsC
zxH=>FY|f1>6QlF@UR_=D?#@n|-)}bGssH~sj#<OKPv+$G__~{y8f8R8j=a0O8`M4B
zoObrr$I?TlQog4z@9fs!H{-{TiuKpS*T<ceEx+^d^ImDQe3#i$5{qv{KmMMu%kcB6
zvez0KXX<`Rb-ljw`ag$L_y!)X^y8<kqn6D!nQffT*Khkx;`a9Z{76@ZS#0rrvewh`
z_x)_!vc*Ji*9)b8-}nCq1?;gt+0+02{sy(3gw_4tboM`9TL1rFT>SfcduK0Nq!gNN
z@n^^D_kFP{_Y4=!jw(<4Bjj_nck3H{%S#V`?F?lN*-{*ORjNGTcj=$Ai$!l+eJxw|
zM1UvJ?b^E7(@&?z-wVn!k(z0qFZciV{r`KKI1^4y(FAo_A0239=8?6Uve3DGQ`S|j
zb^Cs0iRs6k+5i7<zLT?ab&ckf%X`0Gi#{{g`ug)f2TZfCE#Nm!^vS7z{b`;Gqu2lV
zo`X|_E?v%jIYaMG%K`Czu~q5~o4e<)nYV9CUW%)7+UzRDy^kV{{bDccwr{-XTe8zP
zbosqSi(gGK)H?P^DrNewmGezsK56eVy3uL8YI%&vt)398S>JZOU+ewaOgnzI_y1iP
z_bNZ<uK%=VjgH>VCqmcOL^@|>t-78ay)6ecv~;KRdTfS?R9w|dRU>2LnI@S+SFc{(
z^Xt{>n2Lw3Ju;S?tnIy4b8&Oew5>Liul+LdeC?-o`|=D~1*f{i6_njxP%avsr+a+<
z?VH@qoV#@A*xY&-`9AuE+&M1ko9AoJ?^=It;*=-0p)bx^zgMxan6Z3*-L2Jk9)H|W
z@-nEYxjAxAg`udZs7~yzDcyRzIvyTw4-OAM{(Aj>zp5&$;%8@Ge%yLczVeBnm$!H2
z&!^Kv*FSywwD8~@Zjb5&n_V3TV))lu&S2Uey-!!@3LkT}c-uaXrTg5)GnGmrc=Y%D
z$iJGs|JT*^Kb}nX582&&V$+#LuH7e2o_u&af4{1c(WKYwcK7+)|DAGoce${P%$eBo
zyRCQgp8tG4|GVX+J-cNr3L5(Desxs8-+TS}YyCgJSr54#Vaw5&>&0v%XQn6@8=?Q&
zW#R!r=1t5cb@TSAIIVnt$xZU+xBFjpc4bYxuEsKP;>0Ugu6#IW{eDBn#P4R0+!jx)
z`}=ES(orraXJ=1;e|1~ixld0|zkK0>LsXQMa~qGMq2Wa6Xkd?<^2CV~?`{j}I{x_K
zyWQ{8zP-5_Q#$n*V@P12AiwPw0mE*#g}l6X=9fZyy@dvj(_1EUEZyfTz36!5o_Sq+
zjMC1|diwR&48!D#pHHW6yqUAA@56=-21!XtKYl#!H=KQT$@1mKNk=%g<=#H_?d@$(
zA0HJ%!-*S{j|)jko_u$AcjV3@)tfhOhJ=P*yl}yxw$_%Hmv_pPDHG<;KhJOf=fJMg
z*DF@6_^?ycDSgkUQ`$K<HZ(q;U%xMP&E=Kzete!h=ff01Gv$wK&RxFx%gx|m|HCB<
z3OzEUGo*~F+UjkrR?JjzTDktR>WrJ8epxN^oqf%SQ_Nxgb>pHZ9&%ML6p!`Eu71_t
z)z_zHXgE<+J1k-I%@Ze1Bz$>samU>}yMI5DwY0Q4dV5vv?B*pNZZoX>l%k}pyfJDm
zXuRmno1CJeA`N~0;|~i2<mAqQx+jK7M<R1Mx2B($tNT3r{)a!G&l?v!aJc%q`un@5
z{q=vC3%!jlu)RM2!{+Wn%NbSa&%bAaN5LHTHn}d>5W14mWV`O~E~ocl+l*$PFfyL6
z6Tk4)hPsEX;uW9In*V&z%pdZQ#do{w`~Cmz#JXFx*X?LJal%7NO6tazOyS$x^VL;V
zTPG^J8x=e_z;|}#>a}Z+CT*M(c)T(&P_SD}_tC4>>z~c5eiyj+-N%ZE4Ihe5Etc-s
zrE>MSAd`3T^YZoklRkxOI9|TN=`6UzsVZ&Hlnb>!f1OYKe`H`4>7BOh`@D|i<9$zW
zY)rQK|L1c|)yt);N)I+SH%r=9nf(0ub4}b{sqMFY|Nr}Y^2CXRKR-TdbRC*!Tm9qB
z=JPl9*V`ZOmtVeR%alWhoV>ifEz90Wu=C5MJU=(L=G)EmoV&Y3C!cglN_w8R`PHje
zJ6<lEEn$`;(Qo^0#`)Fj#N(?b>YJ}o&O4c)lKa5^^(*0UpMN|{gFCgC7dM-(o+Z5g
z?en$f|Ce*APd|P1eEq-TQ>RWv>?+Az&Al!)J$-Z9S*fh-?3o6MOv%UlR8>@#Je6o|
zZJjc8YG7<^@7c7&Z_APmBsN6ou&}aDoH4_rq@-kd{!=Y&?VUfL&F19ddbIU=ob&qd
z`-|S*+dDgZ-R`!Q`MigX3<{=OScblrJMMD571X<b-qxjG{PE4I=bQbnZ#iR|owoh<
z&!_tJCoe8`|9QUtpY#5@zcq5sfg*geR!5fk&OUMeyt=9B)Se!mpy1%n&d$uwC+A##
zxn#kDhC_#(j`hjD-u(DiiMrpM2g~jMYMwlK(&qb}V!M2CZEfwHFD`Xo?Bi8TnpU;>
zyu;Pi%_~<subj!TytrXez@PcfDp|=D&+GG7*PXbVXWnn~i6g$|BkOsa&pod^@4eL0
z(z>xZo&V;|n<6423Z6m}Cr)f>ZC!Z%^~Kj;Z{(P*3Df4~<qZi5S#bH~i~IZSA0O{e
zzp%hDSFZl?vEDo7_iNA0Fl=5vuj<tEclu_tdyig^b)FdHcgMH+p^nwH-LvDHJ*TPY
z`OJ6hSopS2vUOQy(fz0I?H(7GhHIF<URTf+BqFxMZym2`NxEjB>Z{U=<$j(E?3TRT
zWV`3iv5xmw?{_S!bCi*-E81PQbP;3C8f(>~bN<xJWpA695U9Uxe!RTP&b65i^PHQ^
zYyT*GDU(}1`%yUG1VQTw=F|SM&-Gir>hrbe{Ets2`xpKFdcFAl-tT2Af^R=82nY*v
ztE{vvEiJXne|qTf;m+RP-10ra$;ry+?f=`X-~Z1FG&x~@uVV4}D!u95v-9`P-20Qg
zbAPEs5yShIN8RzwnN_b?;$nV;w7;(3^S`+6d*t!g^R-g!XY8shSgYiC^yh<jho&kS
z*~tBSXtDEB+L!2dL-`Q@5<SQae%p+`FyYU~97E^++PE<!rmkr1^Q*UuGBQHeKdQXi
z^JQACztf{robQ*%y<Lcy!cTr*<8eu@ym|7W`uC}iPJI0HTK@m1o9UbD|JTV?JYanF
z>Q%*?jmM*|Ils!fU-Ox_-~OM4+v17K=T&tDE_VC5=6Qj|kE83~CEmXG-g8H?h16!N
z1m?N%%a_RLolbH;DEBG5>(-y(%(ZL}J|z}+a(3lBU$M`#_g_Y#`uUX&OaAQ?`z6rp
z>i#G9@XfLUcJI7h2cJ6?9B$)HKH4REr{Zz%o$B{{b)vScNX`AQZbRl}wRL;HMZMei
zI}b#Mt&6#tr4hL{tgh<x`5$@z%O2%P-qLn{8B(`XPk*KU^S1AGH^Dvh4_}V@W(%~>
zcG6tC{=@N?tOxbC9ISd&Z`ZTNoNwccS*t6b9-SU4drzvjZFc^?nXTO7n@U~=z1#U*
zPDn^-$EQ=;JKt<N9aUR(Jy29swC2-Eb<j-iojWn0p}v3b|Nran=;#Q$KY9A}<GS1L
zda-U*xnn4E^TzM|?bZL)1z7Aa&De6}zR{FTPa|V$UaH#s{$hM)_VRnR7B)6>;{X4;
zey8g7TCkz<`{tz2t89CCxZODOk_xDueV~!Kv%f#TSi>POP%ttwvgZ5U@|=5nX6~*2
zZj^FDKukC4Nb2<1WmQ2HyRNPd|9rriKS55=^UqV~s-qE0`(A85Xp;IU;heNs`?}t9
z`}h2j3R`ot^|Y#)ih$pwEk=gjY=M)b&g}hu|M)N7`yVba^9xByty(25By?z!s&~Yu
z6waMHcY>ymb8c>GO+7s=Fe<9+WQvlaB4hW_OPdO!Yin)4e*G#UDw?=8s<W@}*`Ckm
z9)CKm|NLh9{Lr<WPrXY^P5uA<^bD)p)%8M~O<<Pf>+kQK{a;;6n6&%j#-)DBfq{|E
zF*OowbARpm+4?mkM5H`>cFR50k{p?3PXzWwZ0kFpUVluP-}ca<R_^G%OkSRzimIxu
zuh;LF%aEEmckW!@z(B#TU%y7I4HI!an6xorV}yr?hk~i;)>MZy_X-<1yFVYC|NZ$A
zoRP$<^1sOB*Nb)c+t%zZ%{Ex-K7Wp5Z2tRSx`$Nfh=^WY#kTgQOrBTwt^2Rf%5Ry}
zCOGX&nfacc(varI0o%8{^zroY;gh`ju5J3#KCV8qU-x=<ZohbZhUbo47E|l4%0DOV
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
K=d#Wzp$P!n5zNT|

literal 0
HcmV?d00001

diff --git a/src/tec/letsgoing/ardublock/simulator/Simulator.java b/src/tec/letsgoing/ardublock/simulator/Simulator.java
new file mode 100644
index 0000000..0e9e154
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/Simulator.java
@@ -0,0 +1,145 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator;
+
+import java.util.Vector;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Pin;
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.view.GUI;
+import tec.letsgoing.ardublock.simulator.view.modules.RGB;
+
+/**
+ * @author Lucas
+ *
+ */
+public class Simulator implements Runnable {
+	private static Simulator instance;
+	private GUI gui;
+	private Thread guiThread;
+	private Thread simuThread;
+	private Arduino arduino;
+	private Vector<SimCode> setupCode;
+	private Vector<SimCode> loopCode;
+	private Vector<SimCode> functionsCode;
+	
+	private volatile boolean stopFlag=false;
+	
+	private Simulator() {
+		System.out.println("Konstruktor");
+		createSubClasses();
+		
+		
+		guiThread = new Thread(gui);
+		guiThread.start();
+	}
+	
+	public static synchronized Simulator getInstance() {
+		if (instance==null) {
+			instance=new Simulator();
+		}
+		return instance;
+	}
+	
+	private boolean createSubClasses () {
+		gui=new GUI();
+		arduino=new Arduino();
+		gui.connectPins(arduino);
+		return true;
+	}
+	
+	
+	public void startSimu() {
+		simuThread = new Thread(this);
+		simuThread.start();
+	}
+	
+
+	@Override
+	public void run() {
+		int counter = 0;
+		while (!stopFlag) {
+			try {
+				Thread.sleep(500);
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			System.out.println("Thread");
+			arduino.digitalWrite(0, true);
+			if (counter==2) arduino.digitalWrite(1, true);
+			if (counter==3) arduino.digitalWrite(2, true);
+			if (counter==4) arduino.digitalWrite(1, false);
+				
+			counter++;
+		}
+	}
+	
+	
+	public void stopSimu() {
+		stopFlag=true;
+		gui.stopThread();
+		gui.dispose();
+	}
+	
+	//reload new code from Ardublock
+	public boolean reload() {
+		
+		return true;
+	}
+	
+	//Function to reset the Arduino in the Simulation
+	public boolean reset() {
+		
+		return true;
+	}
+	
+	public boolean setSetupCode(Vector<SimCode> _setupCode) {
+		setupCode=_setupCode;
+		return true;
+	}
+	
+	public boolean setLoopCode(Vector<SimCode> _loopCode) {
+		loopCode=_loopCode;
+		return true;
+	}
+	
+	public boolean setFunctionsCode(Vector<SimCode> _functionsCode) {
+		functionsCode=_functionsCode;
+		return true;
+	}
+	
+	
+	
+	
+
+	/**
+	 * @param args
+	 * @throws InterruptedException 
+	 */
+	public static void main(String[] args) throws InterruptedException {
+		// TODO Auto-generated method stub
+		
+		
+		
+		System.out.println("Main Entry");
+		Simulator simu = Simulator.getInstance();
+		simu.startSimu();
+		System.out.println("After Start");
+		Thread.sleep(5000);
+		System.out.println("Send Stop");
+		simu.stopSimu();
+		System.out.println("Stopped");
+		Thread.sleep(2000);
+		simu.startSimu();
+		Thread.sleep(1000);
+		simu.stopSimu();
+		
+		
+		
+
+	}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java b/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java
new file mode 100644
index 0000000..e724906
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java
@@ -0,0 +1,78 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.arduino;
+
+import java.util.Vector;
+
+/**
+ * @author Lucas
+ *
+ */
+public class Arduino {
+	
+	private Vector<Variable> vars;
+	private Pin[] pins=new Pin[20];
+	
+	public Arduino () {
+		for (int i =0;i<20;i++) {
+			pins[i]=new Pin();
+		}
+	}
+	
+	public void createVariable(String _name,int _type, Object _value) {
+		//TODO search if Var ist already vorhanden
+		vars.add(new Variable(_name,_type));
+		vars.lastElement().setValue(_value);
+		
+	}
+	
+	public void setVariable(String _name, Object _value) {
+		for(Variable var:vars) {
+			if (var.getName()==_name) {
+				var.setValue(_value);
+				break;
+			}
+		}
+	}
+	
+	public Object readVariable(String _name) {
+		for(Variable var:vars) {
+			if (var.getName()==_name) {
+				return var.getValue();
+			}
+		}
+		return null;
+	}
+	
+	public boolean digitalWrite(int _pin, boolean _value) {
+		if (_value==true) pins[_pin].setValue(1023);
+		else pins[_pin].setValue(0);
+		return true;
+	}
+	
+	public boolean digitalRead(int _pin) {
+		if (pins[_pin].getValue()>=512) return true;
+		else return false;
+	}
+	//TODO Check Wie der Analogpin übergeben wird
+	public boolean analogWrite(int _pin,int _value) {
+		pins[_pin].setValue(_value);		
+		return true;
+	}
+	
+	public int analogRead(int _pin) {
+		return pins[_pin].getValue();
+	}
+	
+	public Pin getPin(int number) {
+		return pins[number];
+	}
+	
+	public boolean reset() {
+		vars=new Vector<Variable>();
+		pins=new Pin[20];
+		return true;
+	}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java b/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java
new file mode 100644
index 0000000..3ad235b
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java
@@ -0,0 +1,52 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.arduino;
+
+import java.util.Observable;
+import java.util.Observer;
+
+/**
+ * @author Lucas
+ *
+ */
+public class Pin extends Observable implements Observer {
+	private int value=0;
+	private boolean mode=false; //false == Input, true==Output
+
+	@Override
+	public void update(Observable o, Object arg) {
+		// TODO Keine Funktionalität da noch kein Pinobjekt als Gegenstelle.
+//		System.out.println("Pin Update");
+//		System.out.println(arg);
+		//Set Variable direkt
+	}
+	
+	public void setMode(boolean _mode) {
+		mode=_mode;
+	}
+	
+	public boolean getMode() {
+		return mode;
+	}
+	
+	
+	public void setValue(int _value) {
+		if (_value>1023) _value=1023;
+		if (_value<0) _value=0;
+		value=_value;
+		this.setChanged();
+		this.notifyObservers();	
+	}
+	
+	public int getValue() {
+		return value;
+	}
+	
+	
+	
+	public void setObserver(Observer observ) {
+		this.addObserver(observ);
+	}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java b/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java
new file mode 100644
index 0000000..d173669
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java
@@ -0,0 +1,40 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.arduino;
+
+/**
+ * @author Lucas
+ *
+ */
+public class Variable {
+	public static final int TYPE_INT=0;
+	public static final int TYPE_FLOAT=1;
+	public static final int TYPE_STRING=2;
+	
+	private String name;
+	private int type;
+	private Object value;
+	
+	public Variable(String _name,int _type) {
+		name=_name;
+		type=_type;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public int getType() {
+		return type;
+	}
+	
+	public void setValue(Object _value) {
+		value=_value;
+	}
+	
+	public Object getValue() {
+		return value;
+	}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java b/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java
new file mode 100644
index 0000000..100c8ec
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java
@@ -0,0 +1,18 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.simcode;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+
+/**
+ * @author Lucas
+ *
+ */
+public abstract class SimCode {
+	
+	public void run(Arduino ArduinoClass) {
+		
+	}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/GUI.java b/src/tec/letsgoing/ardublock/simulator/view/GUI.java
new file mode 100644
index 0000000..7ae24f2
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/view/GUI.java
@@ -0,0 +1,94 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.view;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.util.Vector;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+import javax.swing.text.DefaultCaret;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.view.modules.ArduinoUno;
+import tec.letsgoing.ardublock.simulator.view.modules.Button;
+import tec.letsgoing.ardublock.simulator.view.modules.Modul;
+import tec.letsgoing.ardublock.simulator.view.modules.Poti;
+import tec.letsgoing.ardublock.simulator.view.modules.RGB;
+
+/**
+ * @author Lucas
+ *
+ */
+public class GUI extends JFrame implements Runnable{
+	private Vector<String> serialprint;
+	private Modul[] modules= new Modul[4];
+	private volatile boolean stopFlag=false;
+	private JTextArea serialLog=new JTextArea();
+	
+	public GUI() {
+		super();
+		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		Container pane= this.getContentPane();
+		JScrollPane scrollPane = new JScrollPane(serialLog);
+		DefaultCaret caret = (DefaultCaret)serialLog.getCaret();
+		caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
+		serialLog.setSize(20, 20);
+		serialLog.setRows(5);
+		serialLog.setAutoscrolls(true);
+		for (int i =0;i<105;i++) {
+			serialLog.append(Integer.toString(i)+"\n");
+		}
+		
+		
+		pane.add(new JButton("Center"),BorderLayout.CENTER);
+		pane.add(new JButton("Line End"),BorderLayout.LINE_END);
+		pane.add(scrollPane,BorderLayout.PAGE_END);
+		this.setSize(400, 300);
+		this.setVisible(true);
+		
+		modules[0]= new RGB();
+		modules[1]= new Button();
+		modules[2]= new Poti();
+		modules[3]= new ArduinoUno();
+	}
+	
+	@Override
+	public void run() {
+		while (!stopFlag) {
+			System.out.println("Gui");
+			super.repaint();
+			try {
+				Thread.sleep(500);
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public boolean serialPrint(String Content) {
+		serialprint.add(Content);
+		if (serialprint.size()>100) {
+			serialprint.remove(0);
+		}
+		
+		return true;
+	}
+	
+	public boolean connectPins(Arduino arduino) {
+		for (Modul modul:modules) {
+			modul.connect(arduino);
+		}
+		return true;
+	}
+	
+	public void stopThread() {
+		stopFlag=true;
+	}
+	
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java b/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java
new file mode 100644
index 0000000..322010c
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java
@@ -0,0 +1,26 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.view.modules;
+
+import java.util.Observable;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Pin;
+
+/**
+ * @author Lucas
+ *
+ */
+public class ArduinoUno extends Modul {
+
+public void updateModul(Pin arg0) {
+		
+	}
+
+public boolean connect(Arduino arduino) {
+	
+	return true;
+}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java
new file mode 100644
index 0000000..f3b4977
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java
@@ -0,0 +1,26 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.view.modules;
+
+import java.util.Observable;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Pin;
+
+/**
+ * @author Lucas
+ *
+ */
+public class Button extends Modul {
+
+public void updateModul(Pin pin) {
+		
+	}
+
+public boolean connect(Arduino arduino) {
+	
+	return true;
+}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java
new file mode 100644
index 0000000..a1b496c
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java
@@ -0,0 +1,69 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.view.modules;
+
+import java.awt.Point;
+import java.util.Observable;
+import java.util.Observer;
+import java.util.Vector;
+
+import javax.swing.JLayeredPane;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Pin;
+
+/**
+ * @author Lucas
+ *
+ */
+public abstract class Modul extends Observable implements Observer{
+	private boolean active;
+	private Point position;
+	protected Vector<Pin> pins=new Vector<Pin>();
+	protected JLayeredPane layerpane;
+	
+	public void setState(boolean State) {
+		active=State;
+	}
+	
+	public boolean getState() {
+		return active;
+	}
+	
+	public void setPosition(Point Position) {
+		position=Position;
+	}
+	
+	public Point getPosition() {
+		return position;
+	}
+	
+	public void update(Observable arg0, Object arg1) {
+		System.out.println("Update");
+		if (arg0 instanceof Pin) {
+			System.out.println("is Pin");
+			for (Pin p:pins) {
+				if (p==(Pin)arg0) updateModul((Pin)arg0);
+			}
+		}
+	}
+	
+	public abstract void updateModul(Pin pin);
+	
+	public void addPin(Pin _pin) {
+		pins.add(_pin);
+	}
+	
+	public JLayeredPane getPane() {
+		return layerpane;
+	}
+	
+	public abstract boolean connect(Arduino arduino);
+	
+	
+	
+	
+	
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java
new file mode 100644
index 0000000..0e25943
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.view.modules;
+
+import java.util.Observable;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Pin;
+
+/**
+ * @author Lucas
+ *
+ */
+public class Poti extends Modul {
+
+public void updateModul(Pin arg0) {
+		
+	}
+
+public boolean connect(Arduino arduino) {
+	
+	return true;
+}
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java
new file mode 100644
index 0000000..93922e7
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java
@@ -0,0 +1,52 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.view.modules;
+
+import java.util.Observable;
+import java.util.Observer;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Pin;
+
+/**
+ * @author Lucas
+ *
+ */
+public class RGB extends Modul {
+	private int redValue=0;
+	private int blueValue=0;
+	private int greenValue=0;
+
+	
+	public void setObserver(Observer observ) {
+		this.addObserver(observ);
+	}
+	
+	
+	
+	public void updateModul(Pin pin) {
+		if (pin==pins.get(0)) redValue=pin.getValue();
+		if (pin==pins.get(1)) blueValue=pin.getValue();
+		if (pin==pins.get(2)) greenValue=pin.getValue();
+		System.out.println("New Values: "+redValue+" "+blueValue+" "+greenValue);
+	}
+	
+	public boolean connect(Arduino arduino) {
+		System.out.println("Connected RGB");
+		Pin tmpPin=arduino.getPin(0);
+		this.addPin(tmpPin);
+		tmpPin.setObserver(this);
+		
+		tmpPin=arduino.getPin(1);
+		this.addPin(tmpPin);
+		tmpPin.setObserver(this);
+		
+		tmpPin=arduino.getPin(2);
+		this.addPin(tmpPin);
+		tmpPin.setObserver(this);
+	
+		return true;
+	}
+
+}
-- 
GitLab