From e83e095e986a122342299cd646436902cfa0b27a Mon Sep 17 00:00:00 2001
From: Lucas Stratmann <lucas.stratmann@student.reutlingen-university.de>
Date: Mon, 1 Jun 2020 18:32:33 +0200
Subject: [PATCH] GUI Prototyp finished, Mainframe stable

---
 UML.dia                                       | Bin 6791 -> 7030 bytes
 UML.dia~                                      | Bin 6747 -> 6791 bytes
 res/Measure.png                               | Bin 0 -> 1615 bytes
 .../ardublock/simulator/Simulator.java        | 114 +++++++++++-------
 .../ardublock/simulator/arduino/Arduino.java  |  52 ++++++--
 .../ardublock/simulator/simcode/SimCode.java  |   2 +-
 .../simulator/simcode/blocks/CodeDelay.java   |   4 +-
 .../simcode/blocks/CodeDigitalWrite.java      |   1 +
 .../simcode/blocks/CodeSerialPrint.java       |  25 ++++
 .../ardublock/simulator/view/GUI.java         |  53 ++++++--
 .../simulator/view/modules/Button.java        |   6 +-
 .../simulator/view/modules/Modul.java         |   2 -
 .../ardublock/simulator/view/modules/RGB.java |   6 +-
 13 files changed, 185 insertions(+), 80 deletions(-)
 create mode 100644 res/Measure.png
 create mode 100644 src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeSerialPrint.java

diff --git a/UML.dia b/UML.dia
index 959f68d670150cf6fb994762b216cd9ed1139a3d..ce92ab334b33e615a1532707c84125b71d872af4 100644
GIT binary patch
literal 7030
zcmb2|=3oE;ChoVfx%s!<w*9O5t<55S!~au7+|Nz7N+y2G+oXG|cjA)R7#%S-T|=Y%
zj3Dnozq|b3x8GM(y**L2Ys!g*F24*fSWR-bc~o%j^qk6h#s5BCzn_2j;N1CVnk}kI
zk8#*a|F~!|kLBW*t2fun-=AZhUjO&q?EOAW@6Z3*pZVx6-xu{omET@nz3Dsa+`pQ_
zk55mF3*9@v*Tm05Lg&Pt{XgvWdG>PKzIgOzcRpM5dVPbBLHgDCU)N1v=2@`U<FDhB
zyT8_-TetV)^GqTAMJI0-UCFv*!S^_&;Cbu%bNl{I`9CLijb8D_vbnO?=T!#(xB9sE
z{L$&lejP96-}&W?|GfBbWn$-<ZB_Qp&*jnF;rH$T`eSR{&VF5x@$2sP^-s5-UcaU4
z@yn>&`!W_z_;SsAnd25s_w&9x=5YAQoZC5%=c$$6)}?3Vo~6_mUVq!geOq+;7Hz#5
z@n;{Y`0i1-D^e+YeBpan@0FRGKJZUBmakqIm$W-?^|9C*u1h9*KmX0&QxNx*ZCbv4
z*6n?>tbLnK<{gcd4lJ0ee^6!b&R=&gl<2On%YX5z{GiPazQ4Km?K&<U)2qLK=IMO<
zxp%7UYxg|Miilf#!PZA6{%2PGcY|0K;rh5uXRaL=iFui3`esqiwfX(4tqf0ZpJ(|x
z#^uG`-zQ&vs=wZU&VQNbv*qlo)%O@#GUv}>E9YOoZ`PC_zv}-M?%H)bzW!%rf!z<q
zFV8-2Ue4iiT>jvbt2eE8*@d3Z_lx(8KG?f+)=_`%E}@le&zm+pH{OtG-=z{0Z!bRK
z#ryZJmoL-{O*$Q*e6V9l)(MHgR|cJRFYd?nK32KKBP6wFeT-M0pV|Aj7h?k-1-Z_z
zdv#*h$L5#5Q93=INr6%EH#Q&0w9WBS>sIL6e$4Opi5ag|-ygsEOLtO8bj!8#(e_@w
zvG;dhn}3z-SIhyu^SiH$=%#HxGXMN~x&H>{dRo^Cw@%Oco#=C=nR|6b@au`!6`Qo~
z1=TvP{+gEaY@f=#Gk@+r3EJZyWxM{E`MtKkHCyIQk}LarRVVgk$Bq45e=~Mv+RfM5
z66^2w%6Iwe#`4AdD*Ic7*c~_*Z{b`#hdY{oCD*q*Uk<2$*5o)`#QB=D`LD{7fA3e`
ztnNtK+s?Dz?&$0?`|A7;CwKE6`W>FWy-?(Q`n`zuh|gc_y0@3?*s|vc|3@XxKTiyP
z^4mSExSt@_{(XC)(QeLT$A1ew))71VFY=%0vw3Ez{Fmmsf2{w0*xH`=*u9_M3oTau
zG~oMdHT(XudA3%4U)Gl_GHF?Iq%v(?it*_UwkNZ-Zp^#!)ig|QwfU|kzMa3T9)`{E
zIvx9eBj28rhc0~hX;)t;ZO3=dr*n#0%lx+-dd(Se6GZM!^wj)R`Z{`c?xBB2U+$Nl
zyj=cZ(((hxRC3>~K6CO^@@oa2OTTj;{mCfYt@?87{u#Q_JG(lsFfY@;d}sAfi+lU*
z_{6rGYF?f6?9VgR#`3rAf!VJ<&$jn_{KP-eD(V#9Uwhxnf?GImU8&8TrPp-r%Zs<`
z?VU0gnA{DYWgu6*@EdFK4uy>1`CBvBFW!DA=c8C^jZ93u<ngNT8Nc|mF5Y-_vnnGc
zZ|yd<6{~_S%;MhaYMUR-*!<#{f76xjWB)=g8duM9iSxfvFIHD{KXr3Z$1d+L`D+tC
z=U&=2qx(3&jdc9ol$<sDR_6pf6w=wby7o$i^QZPd<&PI_|M}sSRr!i5Z>#d+-aS{C
zCBms|lC<;?SM#ZD;^}1{7weo;@Y-m!(WpB-?VmyaCX@S5Elk$<tvPpB`txF)bD<qA
zS8uMpdNZbK<w4oEcl>|vo2wfv{w8bV>Z9w#c1QiNe<Qo0{J^Ut_ZU|TSGRLjw;%bg
zR(s!OibOG3;vQo)`wx4U^p0}^bLR$>m~k$<72Nj!%0D3w)g!4Lrv;{mcAQRgWYOW+
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

literal 6791
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
Q<^Nfmg+f$Z*D^Bz09f<#EC2ui

diff --git a/UML.dia~ b/UML.dia~
index 7a7dafea856b70c28090bba445fc49e1cbfc01b9..959f68d670150cf6fb994762b216cd9ed1139a3d 100644
GIT binary patch
delta 6682
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
GGXMZ11H%OX

delta 6650
zcmZoSy=_u2-_5}Q0!-X*W3!8IyG{GM=clO7(k#2cweQ@_<qj7voAc(@<Pf3NIqJdD
z!NFP`Et+c-8@QW_rtts1y`3>=lBN(pQ^tgbzEwgqLxiVie5w8Nw)p(t+xP$P;B_mH
z+w*1dhpUpxUvi$bUe0*d{y98-e{D^1-u%CRcjx~z`+T>4|EmAbHdb2)&F7f@a&>sR
zx#y-Iua6#`t{?AFu)k!ohFar(CGYo-{@+n3(7&>vd-MB!lD+%(9XR8A=gZ!+yYnU;
z`S(@pquavj*L$sYmo1<Fyl@Lwdiv|Y*@c%iIv!n|E4|0+_qX70#bq0Jo;iB0lxyAI
zg6H>2-|U?KS>N|+|Klq=>%Sc8o*)0MOi;JhRAp!U8=jLp{eJyle=NsM_v(Uze|NX9
zKf3+(`Yn}@Uq=1jm$7cblWV=t>vm|npY`1^kHatL+|F4%FK_T|Z8<9U>`6i4^}Ai%
zyF|sywa>-J=`OP9jJ3ZhS}E(=_`EH9rRSbcuTDq$-F492xaf9Pf%yDCDxF^Y>i?^o
zM}+Nc{Cd0pR@sVY=aTEg*6fH@E?W2L=zLZ4@cN8d>%LxnZyNjeT>P)=joaVf{+)Q~
z*3<X5cmDajd~)Rb<^AR{ysuY3-PJzxt*5`-JGp1t_0M#@r``NEV~+OSoVM60XMcSz
z3{_A2d(Aj~ZYRf`YW;gL|Kwj?to&%>_xDT2=lT|Nwe%-`!vEhryc#}PDE5E9xvyFI
z@7wzJ{pZ~6S>6>@eiLb2@#FCPy;jxk+n2xkd3L3?ruGiw@a`9xj)6)~e%w)b^ONVz
zt$rKM>(|e-9(nb9_d}Zx^IB4jo*YSV39#JOG36^uRbzRzY44)~bGM9-+l(}4n%>;I
z)ji*}(^<8){#T~b>tmmvn|tmvD0NQTd)mHx%C^T#Dz<$(oRPnwq@!nP)Z@4*dN*u5
zdtEhJ_k2C%a{KGu?5~kaC!S{&*?FsZS;p3gBln6bzy4@nS{68wYsp;~NuJzAay4N`
zXW!!6`if&!h4)$3+-tM9&HOF2oBMD1WY0o-&98fA-P>U;_W5F5Jy+EGU$Y~31u1SQ
z7p-_$b3MWCX3FZBJxAuA->&>NOx~l6TUBkoklXh92<F7wh9T$FW?!o@n*T>ZWBP`<
ziWWXjkN!@4vA5kIX!fxOuY$K^f4}_QZT_8T`yKVAWzww|iyr!g`fT-icbUQasQYX0
zKLTr$?svaFS^t6a_;0pujUD^zdmkO`wYR-Dea5nb>A%i@TEC%Ws%G_sJo~Qy?c#ST
zJMBx)@9%GlJlr1m{q>u=*=gTiSX|nFsq@l;i9)|;?i6~fbNHP~{>p^%r0v%uDogIY
znsiO|-RsuqL@nR+-^-u<Q?@s$*|#zNE?a+dd9lJ$$p`7yP2Tn~&r%w>gVZbc<yF^b
zZ}z{j-{Nn1_NOb#5u#i<zL(zZ^P0a#XWKVs`<?gI&vA!uuig~X-hFfP)YUUA*BaKY
zd={s>{Nlf_fzfyF>4dn?`n+5E_q(m)Epu0%e}B)U^U;2mlPS8^AO0Ent6fmbm>iaC
zrEziQ?$G;-d-|JaYd;Rz`Q%7-K=(DV^Y?n@?%P^_YvzJgUXIdwSNOi}@n-#USX%#^
zu=$*-@XGUVGKDIQ6aVl2^ys(U?5Qz5&THzlS)<=g-gZ33rtZPbAFtGs)4#?pZ7!Og
za57eQ(J|{u_9^?L#rK|X55K;1SJ3y@JL`7N|64Fk-Q;@5RIby!TD#-sygb^!$>OiU
z!Ba<0or#}$^RP|*sY^A}=l)7A{gz$2ZF^&W;rR_;CN0dDFf)|?#(Tp&;eJCc^B?&|
z#xCg*b89=!C7qwkYipw&DDINpaZX^aqE++%>c)Th&(2TP<@&c$N9dgK!=Dd+KKQ9s
zv9DGB(GiX~e#_2RmIXTgEUD~lsqbye+mw}C(m2iv%u+OIeqSxPul_vmU4>cvH@}Kz
za@~=G!h78%)gFfrzdQ(qioE?xJ1gEqe7teTTkmhdiiHugx3^{RT$EU}@%_Hg^Dl07
zKm79GOBGLBd=;nPoQK~Ze6M=`T`x*C!fVfM*9U6z^y==nzt-QrTWHP6Z?8AL-z;|H
z`%2BXhQdd#ovz>Se>19QYT$=xzOBdE)R*N6{c9@^?`)edc==UN+x?*8?_c|`+G+l0
z|6eA$#CMU^f~Wr<EMKkC>Ga`q^L+U~e;zz%x3~ZC^Wb^@x_@l^%pig5x?+F+?0x?H
z`{C4ST`zT{!}qLTHMO64eTBVIy>rUTa_*|{F9YUZ*FD|*$)U2oZ<)>KsrP3-+Vl6V
zy9V!+Gy$*AAJy_U`>gUQjS^#j+xSh!w|ZLEZ^o~UzZ_~`70p^NX7953-6z)ae&3UJ
zKen$-`J&Qn#Opk>Nux>6ary#p-4~aZhgzIfU<%OC5D{6`>Y?8$md{jvZ?2x}tJl99
z&8ueUy%7B3v0Coy!jEt6c-PnE{O<U6<dw0>9FE0K%%W1Yt1i6Q(EhdkYH66qL*2ml
ztl3Q2OxZ!@^$(7DzS`BE<@Qdgo=uubnn`-m`ZqPAhpG;M;gvH1N(_yhAh_~uwXjRZ
zR*(`VX{L8NGX!P`%$Sh;CS}hP=hp{r32#v`P&QC@Hc>wQI9k8{_~Yq!ZYloSqx|oC
z^Mn4<{hS<`?)rTb!q&c?f7|W&VZ}p=hZOnlC{DX}<$(Ml`EQrx_gxHn$h4eeImdE~
zg5?owE%@dM&f6Gz-r~bP<~^DB8J&d`kDpO<O1|D0;-PhTg0LrNIMdFRJ0Ck-{=Mo_
zzC!LIg(KIG%$EAid!r@)a^&XvZ@+n;e4M=Xb|wQa+l2%)V!^?~4$X`v5*KvEc-gA%
zCnUT)x=&i?(W0=ex#<)4pE65*-!PRk$LMfE>aO0j)eBr-wHf*TQl0u;|6_gz|CZ(d
zZxxsL8Ltq$lEIKQrM1M~{qD<){_=b6CtcUlYGZP2+@cl0B5%RSK6yTeWId0Zi$(9D
zBiaViRu`LJ-*4b%^0+^T#hlAIe^$(|heC!XG4e6;G4U(8HC}&QbNTDuYbw(F-m{8L
zRK2+9Y1)(pJ}tkSe_Kx!xpd%lZqKr>X3u*BUwW85>)CKiRC(&Eyr95kH#&s+j0KNO
zI3!uzePdDJTCdEnzSiZDE7{zI=7yR}FWc2?HX+|N)O>c<5k9SaIiL3iS_QABJ1t;f
zpB%s`UVpLUTF>4T(f0kzf8IOyso?#lSla`$);<xpJTU9Hi}mi0HB;X<^abqOc1?N8
zddKMuHF9PjcINhXZq}X?%ed<!!~7F{QyT6w)GfaLqj%@@J?G7e3z|T11>-7j)qlIb
z>gp<7Fi<p5WL_qqf4=Eu&m#U)9g0iXs(-v(AXy(a>v4VTuFL1&-MP)2C34oWchZbk
z={W^SQKkILwVI?<H%4f62~M_tc0{eoxV?X=Ldf66^D<Ib-q~dG=uG%OFYUBVy`F2D
zW<JSU#S?AR&8ev4m%B{R@ucKKK644vokw*hbKhfC>ELWPN;A4AAhhLDKWEfScGj1>
zyZLV1>t3+=KKsQl^`AHG>UhRbaPvwSm)8oJ+fu$u79@9D6e&%y4O}D<%v371&aFJ;
zXq>0g%dpw3b35`E*EW3j&%YG0gSn<$?YXx|y<0b{!k)$tY=@*d@=+Ldi5%~{SN+)8
zz3-Xn{i>|=S8V_0zfL~6{I1pQH`mS{+g-ZunuUM8`9&-9H$J)7gB49~Z<9W9Chn%o
ziC~{}x5A?0sb?=PG!8fLnslk~&xFFS(oxIG#Wlb0eVtddqr1CL`;&e7hw`FuPZ9Uk
zLauA}SH4t;zTp_PRfE5{Yp<?(Ou<Uodow4t@9)XGQ?RWwYm$byQ{TLQzh0fW6Iobo
zciL?J)7$g!M%GWXj$cuE?n+ixtFPCRv&Vau#|14`^m{6iZFy*B1mD9uQpKJ+3#aNX
zZoR$QWon}E%aW_>re&U3oYtG*Fqv@{k4oS~7gr%s&kz)bER%2BtnmNmUgysi`eN)H
z`G2E^(I)TJxt{5_iY2$+Jjk(&`L5->cUx|D)-SQzd}gV9QyAM8qr(>#9@zW+QLA*B
z_`bhiinTs%@|}1=AtNBZbLO<TPl|=Y{9m7}P<OYre09?M^os7at>=P1Z92le>bT>H
z5(dS~3+~EQX&(OFIALY;gP)t;vS>X@j}VBM@bK9ArEJdW9I-XOni!-Qzc4a>xeyzF
z+I{MW`VaLT^$X^&J$f~%?TK*@dk=flbFG8LoM(5OyYTbw*Gt{+@4P<X{O8X4A3Gm!
z6V2Xsck!Bw9{p7bwfpw`y=!G~dcEvb@wuYcCMtP3PifP5dt~vJ*7_xHmhl%b)WmbM
zx^9lV81$+#=#k#1^nywd%q@#-Jl}l&_3z5K*`|W(&%Ts|)Yc#PdhqK*hxa$5?g%{O
zwM}QK(e2@U^y1s&jPT&gxh8+yENs`jYpL9_u`Kvj#K{hm88Xsr8&`%sics~uk?lFH
zWKO3h=jKb-`3#pXo@%pg>g+Wx^4S6_CmV(dWzXJoGH<@)x4*aF`%h$%y1U&$hWk;3
z!0{#vu_GH5`dABfI+7h_>cL`R=R%L)d-L7I{Bq<qi7V3=?91`JW0?7S-PK#ouN+Dj
zShX|jCY|SAXnkRB;!8jI9eVxYmz$!*7=#!+9CW!0_A)5#VX=`bs3@o|s6OzJv7P<<
zcc;P%zsKL+s%@NkmyySxbCb_+!Pa!kBMaQb7513D+aSc&FPvC%_0V1}Zijo{SF4<S
z7|SyGEw4m<!^zj&YWaJ&Cf*fv7J0L@p`XESQTUBTU!$G{$Z7CTSw8QR1c))A(%~87
zO!f{Y1uifnMQ%dn*9n!(Un>7IE@xlP9wRqLzM%5&k*9{YL}sK1C*AHlQIH*^ZKOXn
zB}XOj_)H5nL!E_jw_5`D-q;hC_vy)j%BBx*o89i!+gZFf@~Uz8%y5?3g#UsK24hd0
z^XGRCQ7joO3j`b77^E08So}H}dKpZZE^s&~GxRo`Z$8g##B_o~LAk22r{Z<%sbKbh
z^Rx5+vP?|i7vQ`$WA_QgZBI`aPS3pLozCqzyWn&Tx6rvGi;g_%%V~=WsBb%|d;9VE
zny2$#-3^;_CnhyGG@a?QyVMi|&6JA)rjcys{L;5NYPI%W)%f;(0Z-AUVAoyq{_kww
zKY6#;B8#Z08R>tWA02PrGj-eKJ;y)$)hcy4=q=|cxcNrvlE~e2JvM(*OCGmvKKn9I
zNHaQpZtuK*tF~mOAAS2%=XTAtd;i{?tM9t=(<%2>#yx52wJd?}Y;I;W2SguodoMrh
zT%RJpG?z55G_UmD`)=09w_J3K&)t%%`8wHZWoF@v)0;28D!+K4q%6bAnw=-NMYO%Q
ztygYCZ(7LwiRW~g1$}dkm$#hyXgOKxtkLq7465l#29usyp3_xYdTv*LTY2cpN6mtl
zr<|SqpI@*3cE+=>+b7Fs*#&$q)X|IlQr>=RLCC7tK`VDo-?F+wy-hkl^gN?9d(NMd
zgva8`11mPk>|kyD+3?fhs%Lko`q67n>1RCy4H~M1uSCf`_*9o^e4e?Vy`R0`Jf=T<
zhRC&-A5IA!DX1!_Vo&L6d-EmA-n;RA^Lyt_8RkWG<$J$8O0d><`@+M`#NG5_r%7Lr
zQFGyxA3LvvDK@Zqd-DI<eqvdx^>Z8D+nd*XwA{>@e&tHUfyF6>|1?f7dDdd6<a27X
zm)z!cZ?d-9=-$m(I!mtEV{UJ>gld}fijRwo=H0)0qkR2j9zm;mzwO~ScI(vgoNave
zCBE41-}k5Wv44NOK7MXW`pg|!|4n~AY1g{(_6p-gy{{Qp%ypPWR<gQQeg3@ry1wJo
z8w+BEOkVz&_2uE?-}3dfznMZhou?isC|Jb9-YUTQz_-zy^`1z@<@MqBLlf`CtKZr3
zgoh#F@?@6TWxFl7i(hNZJASJEjic<t^|^9u=0#Xs`(~-vWW<uHp?qhnqWo=}WVTFM
z9uA%pr&l?%Wy+pmKf^xBN%Z^Oa`)u5+K#Uh-uLb`zcKG?!>tE@9{l+wV$DDI_<@{L
z$q5BXL213dk2v&pxQQ{VdY<x`^j5=D_^{t?=jdd&&XD{UPYg1is;xGV@K9QLqkh$g
ziyr9-Hp#{p9MeD4iMGjJl-%Qa^_RCuy&T(m$G=R)7o-}lF>GO5V9KzTF@x73n<0uB
zB=lhEMX8uMDn(XttrqgmT>_d;OE`W{R@x#JJlDw4=c}<9Pf}E0*s@^NQ%TZ+cMR2^
z_XNz_x2@x_>|U4UYwtYM{4j^>&~|6(`g?UrAKEjX{ar4;<GX?t>qSkYrV|`W${jrl
zD2#8jUX*N$Y7cvm!}3{Xho{w<4dTm1C#1X2ldUYfvM}fB!ZTcFSveE}T8dt|YB1Y{
z^##;3EoWbTecR<~+4Es_5~=C?+zV@G>oa^e&-q?{=|%^8@9vMykt^!I^(rsTc%`||
zs#-m&#s5a`0d<`$tK`FKO_IAV3K!{~H0b42pCXx~!=vQmY+kbHqi&d!-;5)7ymW6#
zC5i+IXC0caEiUsX*fOc4leL2B0cV3c!#oBw#xLG^JH9l|X2?sj*wM-OZPy(i!4URU
z%qIe;&Z(D~;BL`!R8fa7ar*@K?j{HE9m+C$_Bmud+jKzawD1Ot1CJQGon6{Gcs5w<
zus`sqimSW$R>M)wtc@E5T8uAW>gg6P((RhL%+zxE5u?l3%>>h8FJ4_(csBpD>qf4%
z#f9%}%h@Vq9uzhlXOv^d!l;*dP<Y@6!(-+iegiv;z(bvr_6aZbcBm=nVBujk5cyE?
zq2fRQgEQmz??MJ5R~d!!_Xb$LKJdTz?S}aigmRjvJlJ9wbVy;@gq$<FNmt)##PMn<
zb`+RRYI*E)Zs(*Gani5K-@fxcWw$eR_urZ8_k`^I-8Fgk>YPnkzKQ<=nuRX^sGk+D
zk-j3e<M6RhYQ9@8?e0yg=YOD}9vZsj!_WEFKdg7IR_R(C+Szr@Ucb)fa&)Hkm1>(`
zSJW4A{3_~-n4T%pcFJkV&s}pRD}S7Raf~;8cJmUIAhz=s(zbuUUY)sf^P_Jy({k;!
zx7qLBtW>@)pjbsZ-S_S0OhLD$#?xAEFIy^He`1+R;Ld3&8lJ-5H-#o!CC`>{%RPCu
zAZP8J6j6!UDwDd_ewOW>VYax|7E~xDZ9Qdm;kkL{hySWw_RL4v1f(5u7&bDZG4y$k
zlm&`b7GJy`^SWB!cT3gj+Q_hb72@v&qHj69UAp!CBUz`HQJ1R3{X6TY?n|>dyX%|z
z$ywITKb>c8(&Q^Y)fUxflcC{%m0R*!uy=jggd??rl40khmPD*oUJ}u}?AT20Ub*?j
zZa%$bk(?8YbY1;+I9r6SpRxAdm6;K_RoS6MtCsC*Upr^j)$MauMFqvxJdb0S`?TuB
zYNhpEd$dp)^$;N`!!?UOvc(DA-gNDE=Gy8CPmTHsi_1Q$ZM>$>T9{HFyxQ_|xXA^T
zML7%3@=Iw<3}j6!T_AZ?Z9(WV!L7flcJ?g$SG@a-{F_ZS*7r8g{`v9OvQJxgsX0IR
zr1q<5YW2@;GRtQBy}i0`>-OtkWQtx|cy0E+mG-YpROR2H`uV?3*6y3KVdISDT_<8S
z{ex3XDvssJEdPH!rGE4Bg1aY!PfR^@tA^{k)%-(S^=!5I`B)8C6dao)yl(qGPXWDP
z$DSq26@}e6lP}2?H*b(*Z?C+(-TIQ+w3D*G4=i-MXkprZWy<;ETjk`#dKhmTJzzi5
z-n%WQmPg>W2A2@~(eT^#^Pg_n{o|C)+aFzu`>djBjtayp?tA54b5yfXV|sG8$J~|M
zzsxb5tn|dCHDX)hNyEuYj;B7ZR@bYSNOt-3X<}R92@l7dCwB$H-tw=`n7rlc#Z6&i
zi?m!qJ5~vVezjU<w1lhV*cnBi<bYIzB&#cO#<L}aRSku2JfD1~cJsFMDGK#zt${re
zH=l$^sFxkvyFf-XX{A<r!|jg~E~-p3+Qq#rhb5R}SpiE&!m8))4Qi9`NX(CZB_E>h
zbVlLZVwK6WGM9PX&`etOjqzIM9L8s7;tvKm%FLDu6^d@>G2L=3;zamYt7A!<91nHL
z=_Wo^IOf!|HJ)oZ$0k386HYy$yv_3!>v!tz6{zvb*(s>3en-iso4ZOj?(O_tO@&$s
zn^LY`SoO%mC9Gr3CuQxzSrbF$)H^QD5W6qv5;09eI?Mg|(uEfnEuHiuYEr6a@}U*3
zJc+%$vjbMIdy@4=0hE2Z1ddH*=v|}Ww6k%o{JlEMQ_G4^<XfI~?u(hhlqXQo+#t<z
zr(WR!8>2bL4#xw$P_ZTV?<hRo8zawd{{HE!X(nztyAQs4J?-h+>;o&7f6Scj8@Bpe
zZ|d2o=CYfoL&L9M7PE4E_Fn(Xx4<~vw7f@uh0cZ@4EU|Nc=D&r40$U}{w0$?9pdl5
z<nS}7ImX0aZf?-$Cw?{eo?S^_@lVgx@<V0)hsqC?y1(|U-sHQ=@A&tq$vGDLCl}R~
zMg;you`6qXSyj|h-ibSME(om5^48ubs1lT<>m_seQ~>u@Mxo`GE@j<kdDd^Dk*N0k
z=#<DQH@1~txZoxseqg`DfvQI=Yr>en%vvb8FYH3mg^W8z7bYB;(6oH*+bjADr6<qc
zbTU9mMo+E2&C|kHmHTVm`tFn8{SyubGzWBl^txir&co_`o-@kti*ycWbk4VlX(tQ<
zwzjTXn|PVWwBpe6fUT-*LEA#_b5CRM40<bcSytonDdQ<#f|1XkOp&;~<cLXy*5>me
z&eiF8=M6kHj92vsCoT+~#2xT(#o2PUrUDMtXx0|z9@C7+Avq;mo{Rpy`B|#TW7o7P
zZ!1~Vw@ux&<(A8y4YuoV&7GE$a{1)LmrrC2uBb6p$GxfC`24QnxjirEmH)LWc)$0@
c?)+=|SL#3C*!%b0?EmZ^l(uEEFJ@){0BZ~KrvLx|

diff --git a/res/Measure.png b/res/Measure.png
new file mode 100644
index 0000000000000000000000000000000000000000..84554c2d55b678e9a21029c6691e6202b0275c35
GIT binary patch
literal 1615
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

literal 0
HcmV?d00001

diff --git a/src/tec/letsgoing/ardublock/simulator/Simulator.java b/src/tec/letsgoing/ardublock/simulator/Simulator.java
index f70b425..1590f29 100644
--- a/src/tec/letsgoing/ardublock/simulator/Simulator.java
+++ b/src/tec/letsgoing/ardublock/simulator/Simulator.java
@@ -3,6 +3,8 @@
  */
 package tec.letsgoing.ardublock.simulator;
 
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.util.Vector;
 
 import tec.letsgoing.ardublock.simulator.arduino.Arduino;
@@ -10,13 +12,14 @@ import tec.letsgoing.ardublock.simulator.arduino.Pin;
 import tec.letsgoing.ardublock.simulator.simcode.SimCode;
 import tec.letsgoing.ardublock.simulator.simcode.blocks.CodeDelay;
 import tec.letsgoing.ardublock.simulator.simcode.blocks.CodeDigitalWrite;
+import tec.letsgoing.ardublock.simulator.simcode.blocks.CodeSerialPrint;
 import tec.letsgoing.ardublock.simulator.view.GUI;
 import tec.letsgoing.ardublock.simulator.view.modules.RGB;
 
 /**
  * @author Lucas Hallo Test
  */
-public class Simulator implements Runnable {
+public class Simulator implements Runnable, ActionListener {
 	private static Simulator instance;
 	private Arduino arduino;
 	private GUI gui;
@@ -30,7 +33,6 @@ public class Simulator implements Runnable {
 	private volatile boolean stopFlag = false;
 
 	private Simulator() {
-		System.out.println("Konstruktor");
 		createSubClasses();
 
 	}
@@ -43,20 +45,32 @@ public class Simulator implements Runnable {
 	}
 
 	private boolean createSubClasses() {
-		gui = new GUI();
+		gui = new GUI(this);
 		arduino = new Arduino(gui);
 		gui.connectPins(arduino);
 
 		guiThread = new Thread(gui);
 		guiThread.start();
+		
 
 		return true;
 	}
 
 	public void startSimu() {
-		stopFlag = false;
-		simuThread = new Thread(this);
-		simuThread.start();
+		if(simuThread instanceof Thread ) {
+			if (!simuThread.isAlive()) {
+				stopFlag = false;
+				arduino.reset();
+				simuThread = new Thread(this);
+				simuThread.start();
+			}
+		} else {
+			stopFlag = false;
+			arduino.reset();
+			simuThread = new Thread(this);
+			simuThread.start();
+		}
+		
 	}
 
 	@Override
@@ -67,7 +81,7 @@ public class Simulator implements Runnable {
 		int maxLoop = loopCode.size();
 
 		while (!stopFlag) {
-			System.out.println("Thread");
+			//TODO Künstlicher Slowdown?
 			if (setupCounter < maxSetup) {
 				setupCode.get(setupCounter).run(arduino);
 				setupCounter++;
@@ -76,6 +90,9 @@ public class Simulator implements Runnable {
 
 			if (loopCounter < maxLoop) {
 				loopCode.get(loopCounter).run(arduino);
+				if (loopCode.get(loopCounter) instanceof CodeDigitalWrite) {
+					//TODO Functiondetection
+				}
 				loopCounter++;
 				if (loopCounter == maxLoop) {
 					loopCounter = 0;
@@ -88,37 +105,40 @@ public class Simulator implements Runnable {
 
 	public void stopSimu() {
 		stopFlag = true;
+		simuThread.interrupt();
 	}
 
 	// reload new code from Ardublock
 	public boolean reload() {
-		stopSimu();
-		try {
-			simuThread.join();
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		if (simuThread instanceof Thread) {
+			stopSimu();
+			try {
+				simuThread.join();
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 		}
 		gui.stopThread();
 		gui.dispose();
 
 		createSubClasses();
 
-		startSimu();
-
 		return true;
 	}
 
 	// Function to reset the Arduino in the Simulation
 	public boolean reset() {
-		stopSimu();
-		try {
-			simuThread.join();
-		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
+		if (simuThread instanceof Thread) {
+			stopSimu();
+			try {
+				simuThread.join();
+			} catch (InterruptedException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 		}
-		arduino.reset();
+		
 		startSimu();
 
 		return true;
@@ -138,49 +158,51 @@ public class Simulator implements Runnable {
 		functionsCode = _functionsCode;
 		return true;
 	}
+	
+	public void actionPerformed(ActionEvent arg0) {
+		String command = arg0.getActionCommand();
+		if (command == "go") {
+			this.startSimu();
+		} else if (command == "stop") { //TODO Only Softstop not Hard. -> New Button?
+			this.stopSimu();
+		} else if (command == "reset") {
+			this.reset();
+		} else if (command == "reload") {
+			this.reload();
+		} else if (command == "meas") {
+
+		}
+	}
 
 	/**
 	 * @param args
 	 * @throws InterruptedException
 	 */
 	public static void main(String[] args) throws InterruptedException {
-		// TODO Auto-generated method stub
 		Vector<SimCode> testSetup = new Vector<SimCode>();
 		Vector<SimCode> testLoop = new Vector<SimCode>();
-		testSetup.add(new CodeDelay(2000));
+		int testdelay = 500;
+		testSetup.add(new CodeDelay(1000));
 		testLoop.add(new CodeDigitalWrite(0, true));
-		testLoop.add(new CodeDelay(500));
+		testLoop.add(new CodeDelay(testdelay));
 		testLoop.add(new CodeDigitalWrite(1, true));
-		testLoop.add(new CodeDelay(500));
+		testLoop.add(new CodeDelay(testdelay));
 		testLoop.add(new CodeDigitalWrite(2, true));
-		testLoop.add(new CodeDelay(500));
+		testLoop.add(new CodeDelay(testdelay));
+		testLoop.add(new CodeSerialPrint("Hello World"));
 		testLoop.add(new CodeDigitalWrite(1, false));
-		testLoop.add(new CodeDelay(500));
+		testLoop.add(new CodeDelay(testdelay));
 		testLoop.add(new CodeDigitalWrite(0, false));
-		testLoop.add(new CodeDelay(500));
+		testLoop.add(new CodeDelay(testdelay));
 		testLoop.add(new CodeDigitalWrite(2, false));
-		testLoop.add(new CodeDelay(500));
+		testLoop.add(new CodeDelay(testdelay));
 
-		System.out.println("Main Entry");
 		Simulator simu = Simulator.getInstance();
 		simu.setSetupCode(testSetup);
 		simu.setLoopCode(testLoop);
-		Thread.sleep(5000);
-		simu.startSimu();
-		System.out.println("After Start");
-		Thread.sleep(5000);
-		System.out.println("Send Stop");
-		simu.reset();
-		System.out.println("Reset Done");
-		Thread.sleep(5000);
-
-		// simu.stopSimu();
-		// System.out.println("Stopped");
-		Thread.sleep(2000);
-		// simu.startSimu();
-		Thread.sleep(100000);
-		simu.stopSimu();
 
 	}
 
+
+
 }
diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java b/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java
index 1120007..4265bf7 100644
--- a/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java
+++ b/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java
@@ -13,9 +13,10 @@ import tec.letsgoing.ardublock.simulator.view.GUI;
  */
 public class Arduino {
 
-	private Vector<Variable> vars;
+	private Vector<Variable> vars=new Vector<Variable>();
 	private Pin[] pins = new Pin[20];
 	private GUI gui;
+	private Vector<Variable> localVars=new Vector<Variable>();
 
 	public Arduino(GUI _gui) {
 		gui = _gui;
@@ -24,28 +25,57 @@ public class Arduino {
 		}
 	}
 
-	public void createVariable(String _name, int _type, Object _value) {
+	public void createVariable(String _name, int _type, Object _value, boolean local) {
+		if (local) {
+			localVars.add(new Variable(_name, _type));
+			localVars.lastElement().setValue(_value);
+		} else {
 		vars.add(new Variable(_name, _type));
 		vars.lastElement().setValue(_value);
+		}
 
 	}
 
-	public boolean setVariable(String _name, Object _value) {
-		for (Variable var : vars) {
-			if (var.getName() == _name) {
-				var.setValue(_value);
-				break;
+	public boolean setVariable(String _name, Object _value, boolean local) {
+		if (local) {
+			for (Variable var : localVars) {
+				if (var.getName() == _name) {
+					var.setValue(_value);
+					break;
+				}
+			}
+			
+		} else {
+			for (Variable var : vars) {
+				if (var.getName() == _name) {
+					var.setValue(_value);
+					break;
+				}
 			}
 		}
+		
+		
 		return true;
 	}
 
-	public Object readVariable(String _name) {
-		for (Variable var : vars) {
-			if (var.getName() == _name) {
-				return var.getValue();
+	public Object readVariable(String _name, boolean local) {
+		if (local) {
+			for (Variable var : localVars) {
+				if (var.getName() == _name) {
+					return var.getValue();
+				}
+			}
+			
+		} else {
+			for (Variable var : vars) {
+				if (var.getName() == _name) {
+					return var.getValue();
+				}
 			}
+			
 		}
+		
+		
 		return null;
 	}
 
diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java b/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java
index e60efaa..11a4b9a 100644
--- a/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java
+++ b/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java
@@ -16,7 +16,7 @@ public abstract class SimCode {
 	protected Vector<Object> arguments = new Vector<Object>();
 	// TODO temporären Funktionsstack implementieren.
 
-	public abstract void run(Arduino ArduinoClass); // TODO Wie wird man an die Functions kommen?
+	public abstract void run(Arduino ArduinoClass);
 
 	public Object getReturn() {
 		return returnValue;
diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDelay.java b/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDelay.java
index 7251824..327c6df 100644
--- a/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDelay.java
+++ b/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDelay.java
@@ -19,13 +19,13 @@ public class CodeDelay extends SimCode {
 
 	public void run(Arduino ArduinoClass) {
 		ArduinoClass.serialPrint("Sleep for: " + duration);
-		// TODO Auto-generated method stub
 		try {
 			Thread.sleep(duration);
 		} catch (InterruptedException e) {
 			// TODO Auto-generated catch block
-			e.printStackTrace();
+			//e.printStackTrace();
 		}
+
 	}
 
 }
diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDigitalWrite.java b/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDigitalWrite.java
index 533906c..ca5c176 100644
--- a/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDigitalWrite.java
+++ b/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeDigitalWrite.java
@@ -4,6 +4,7 @@
 package tec.letsgoing.ardublock.simulator.simcode.blocks;
 
 import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.arduino.Variable;
 import tec.letsgoing.ardublock.simulator.simcode.SimCode;
 
 /**
diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeSerialPrint.java b/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeSerialPrint.java
new file mode 100644
index 0000000..6384aad
--- /dev/null
+++ b/src/tec/letsgoing/ardublock/simulator/simcode/blocks/CodeSerialPrint.java
@@ -0,0 +1,25 @@
+/**
+ * 
+ */
+package tec.letsgoing.ardublock.simulator.simcode.blocks;
+
+import tec.letsgoing.ardublock.simulator.arduino.Arduino;
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+
+/**
+ * @author Lucas
+ *
+ */
+public class CodeSerialPrint extends SimCode {
+	private String content;
+	
+	public CodeSerialPrint(String _content) {
+		content=_content;
+	}
+	
+	public void run(Arduino ArduinoClass) {
+		ArduinoClass.serialPrint(content);
+
+	}
+
+}
diff --git a/src/tec/letsgoing/ardublock/simulator/view/GUI.java b/src/tec/letsgoing/ardublock/simulator/view/GUI.java
index c54b095..d67e7e5 100644
--- a/src/tec/letsgoing/ardublock/simulator/view/GUI.java
+++ b/src/tec/letsgoing/ardublock/simulator/view/GUI.java
@@ -5,11 +5,15 @@ package tec.letsgoing.ardublock.simulator.view;
 
 import java.awt.BorderLayout;
 import java.awt.Color;
+import java.awt.Component;
 import java.awt.Container;
+import java.awt.Dimension;
 import java.awt.Font;
 import java.util.Vector;
 
+import javax.swing.Box;
 import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 import javax.swing.JPanel;
@@ -19,6 +23,7 @@ import javax.swing.JTextArea;
 import javax.swing.text.BadLocationException;
 import javax.swing.text.DefaultCaret;
 
+import tec.letsgoing.ardublock.simulator.Simulator;
 import tec.letsgoing.ardublock.simulator.arduino.Arduino;
 import tec.letsgoing.ardublock.simulator.view.modules.ArduinoUno;
 import tec.letsgoing.ardublock.simulator.view.modules.Button;
@@ -30,22 +35,21 @@ import tec.letsgoing.ardublock.simulator.view.modules.RGB;
  * @author Lucas
  *
  */
-//TODO Rotate Modules
 public class GUI extends JFrame implements Runnable {
 	private Vector<String> serialprint = new Vector<String>();
 	private Modul[] modules = new Modul[4];
 	private volatile boolean stopFlag = false;
 	private JTextArea serialLog = new JTextArea();
 
-	public GUI() {
-		super();
+	public GUI(Simulator simu) {
+		super("ArdubBlock Simulator");
 		modules[0] = new RGB();
 		modules[1] = new Button();
 		modules[2] = new Poti();
 		modules[3] = new ArduinoUno();
 
 		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
+		this.setResizable(false);
 		Container mainPane = this.getContentPane();
 
 		JScrollPane scrollPane = new JScrollPane(serialLog);
@@ -57,31 +61,54 @@ public class GUI extends JFrame implements Runnable {
 		serialLog.setBackground(Color.black);
 		serialLog.setFont(new Font("Arial", Font.BOLD, 15));
 
-		for (int i = 0; i < 105; i++) {
-			serialLog.append(Integer.toString(i) + "\n");
-		}
 
 		JPanel modulPanel = new JPanel(new BorderLayout());
 		modulPanel.add(modules[0].getPane(), BorderLayout.EAST);
 		modulPanel.add(modules[1].getPane(), BorderLayout.CENTER);
 		modulPanel.add(modules[2].getPane(), BorderLayout.WEST);
 		modulPanel.add(modules[3].getPane(), BorderLayout.NORTH);
-
 		JPanel controlPanel = new JPanel();
 		controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));
-		// TODO make ControlButtons
+		
+		JButton goButton=new JButton();
+		JButton stopButton=new JButton();
+		JButton resetButton=new JButton();
+		JButton reloadButton=new JButton();
+		JButton measButton=new JButton();
+		
+		goButton.setIcon(new ImageIcon("res/Play.png"));
+		stopButton.setIcon(new ImageIcon("res/Stop.png"));
+		resetButton.setIcon(new ImageIcon("res/Reset.png"));
+		reloadButton.setIcon(new ImageIcon("res/Reload.png"));
+		measButton.setIcon(new ImageIcon("res/Measure.png"));
+		
+		goButton.addActionListener(simu);
+		stopButton.addActionListener(simu);
+		resetButton.addActionListener(simu);
+		reloadButton.addActionListener(simu);
+		measButton.addActionListener(simu);
+		
+		goButton.setActionCommand("go");
+		stopButton.setActionCommand("stop");
+		resetButton.setActionCommand("reset");
+		reloadButton.setActionCommand("reload");
+		measButton.setActionCommand("meas");
+		
+		controlPanel.add(goButton);
+		controlPanel.add(stopButton);
+		controlPanel.add(resetButton);
+		controlPanel.add(Box.createRigidArea(new Dimension(0, 400)));
+		controlPanel.add(reloadButton);
+		controlPanel.add(measButton);
 
 		mainPane.add(modulPanel, BorderLayout.CENTER);
-		mainPane.add(new JButton("Controls"), BorderLayout.LINE_END);
+		mainPane.add(controlPanel, BorderLayout.LINE_END);
 		mainPane.add(scrollPane, BorderLayout.PAGE_END);
 		this.pack();
 		this.setVisible(true);
 
-		JScrollBar vertical = scrollPane.getVerticalScrollBar();
-		vertical.setValue(vertical.getMaximum());
 	}
 
-	@Override
 	public void run() {
 		while (!stopFlag) {
 			try {
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java
index a20fed4..d624fcb 100644
--- a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java
@@ -10,6 +10,7 @@ import java.util.Observable;
 import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JLabel;
+import javax.swing.JToggleButton;
 
 import tec.letsgoing.ardublock.simulator.arduino.Arduino;
 import tec.letsgoing.ardublock.simulator.arduino.Pin;
@@ -27,10 +28,13 @@ public class Button extends Modul {
 		chiplabel.setIcon(chipIcon);
 		chiplabel.setSize(294, 294);
 		layerpane.add(chiplabel, 1);
+		
+		JToggleButton but= new JToggleButton();
+		but.isSelected();
 	}
 
 	public void updateModul(Pin pin) {
-
+		
 	}
 
 	public boolean connect(Arduino arduino) {
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java
index 7e7b957..2b46547 100644
--- a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java
@@ -40,9 +40,7 @@ public abstract class Modul implements Observer {
 	}
 
 	public void update(Observable Observable, Object arg1) {
-		System.out.println("Update");
 		if (Observable instanceof Pin) {
-			System.out.println("is Pin");
 			for (Pin p : pins) {
 				if (p == (Pin) Observable)
 					updateModul((Pin) Observable);
diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java
index 72a8c8e..55fc884 100644
--- a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java
+++ b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java
@@ -40,12 +40,12 @@ public class RGB extends Modul {
 				Graphics2D ga = (Graphics2D) g;
 				int transparancy = (int) (Math.max(redValue, Math.max(greenValue, blueValue)) * 0.8);
 				ga.setPaint(new Color(redValue, greenValue, blueValue, transparancy));
-				ga.fillOval(0, 0, 70, 70);
+				ga.fillOval(0, 0, 73, 73);
 			}
 
 		};
 
-		ledlabel.setLocation(115, 185);
+		ledlabel.setLocation(113, 183);
 		ledlabel.setSize(200, 200);
 		layerpane.add(ledlabel, 0);
 	}
@@ -57,12 +57,10 @@ public class RGB extends Modul {
 			blueValue = pin.getValue() / 4;
 		if (pin == pins.get(2))
 			greenValue = pin.getValue() / 4;
-		System.out.println("New Values: " + redValue + " " + blueValue + " " + greenValue);
 	}
 
 	public boolean connect(Arduino arduino) {
 		// TODO Pins= R G B ?
-		System.out.println("Connected RGB");
 		Pin tmpPin = arduino.getPin(0);
 		this.addPin(tmpPin);
 		tmpPin.setObserver(this);
-- 
GitLab