diff --git a/UML.dia b/UML.dia index f9f2622288ad09c5e631c423b1693e4af6b500fd..8ff568e509c13da6e3fdfcacfb332b5fcab30a2c 100644 Binary files a/UML.dia and b/UML.dia differ diff --git a/src/tec/letsgoing/ardublock/simulator/Simulator.java b/src/tec/letsgoing/ardublock/simulator/Simulator.java index ca867aa62dfa7f69c419b69be64dd581f67d3d37..9185bb95cdb91211b67439e7797f54ff5d874b5a 100644 --- a/src/tec/letsgoing/ardublock/simulator/Simulator.java +++ b/src/tec/letsgoing/ardublock/simulator/Simulator.java @@ -27,12 +27,16 @@ import tec.letsgoing.ardublock.simulator.simcode.vars.CodeMillis; import tec.letsgoing.ardublock.simulator.view.GUI; /** - * @author Lucas + * Diese Klasse verwaltet alle Elemente des Simulators. Sie ist geschrieben als Singelton. + * * * Pinmapping: * RGB: 9,10,11 * Poti: A5 * Button: 3,4,5 + * @author Lucas + * + * */ public class Simulator implements Runnable, ActionListener { @@ -43,10 +47,8 @@ public class Simulator implements Runnable, ActionListener { private Thread simuThread; private Vector<SimCodeFunction> functionsCode = new Vector<SimCodeFunction>(); - - //changed to public by Anian - //private Simulator() { - public Simulator() { + + private Simulator() { createSubClasses(); } diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java b/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java index 1970fe8693137086ca87c67e858896cecdf7d63d..9956dd5169e23b7cef2817db0916d17ca04fd02e 100644 --- a/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java +++ b/src/tec/letsgoing/ardublock/simulator/arduino/Arduino.java @@ -11,7 +11,10 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; import tec.letsgoing.ardublock.simulator.view.GUI; /** + * Diese Klasse hält die Daten eines "virtuellen" Arduinos und verwaltet die Hardware * @author Lucas + * + * * */ public class Arduino { diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java b/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java index d1f0662813206c88324a87714e50cc33d8e1d219..c24d32a23eb568c49d5d83dc8cd0d2095375dbc8 100644 --- a/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java +++ b/src/tec/letsgoing/ardublock/simulator/arduino/Pin.java @@ -7,7 +7,10 @@ import java.util.Observable; import java.util.Observer; /** + * Diese Klasse ist für einen Pin auf dem Arduino * @author Lucas + * + * * */ public class Pin extends Observable { diff --git a/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java b/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java index 109fd7f8aa9a4308ede2a92ad36e445e8b93e788..22fdba87f6c770dc7152b586fde7629af8da3c4f 100644 --- a/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java +++ b/src/tec/letsgoing/ardublock/simulator/arduino/Variable.java @@ -6,7 +6,10 @@ package tec.letsgoing.ardublock.simulator.arduino; import tec.letsgoing.ardublock.simulator.simcode.SimCode; /** + * Diese Klasse speichert eine Variable und stellt diese über Operationen zur Verfügung * @author Lucas + * + * * */ public class Variable { diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java b/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java index c3064373464074f132ed78fad44e5b1f9627b241..04d81c1d19e48c888014cc4fcb95d49da7bad30e 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/SimCode.java @@ -8,6 +8,9 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas + * + * Jedes Codeelement erbt von dieser dieser Klasse. + * Durch die run()-Methode kann jedes Code-Objekt ausgeführt werden. * */ public abstract class SimCode { diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeConnectString.java b/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeConnectString.java index b1c7c2e643b2a7edcc9a7a4e143c2e99d1d4af31..2ac24cd29d1b758c4136cfe11a91e76ddfc0696f 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeConnectString.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeConnectString.java @@ -10,6 +10,8 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas + * + * Verbinde einen beliebigen Block mit einer Zeichenkette * */ public class CodeConnectString extends SimCode { diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeSerialPrint.java b/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeSerialPrint.java index 82aa58a268f83105d6f188b8021646ba1554828a..823fc3cf8eccb8ca612b31ca7229437d3925c8ac 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeSerialPrint.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/comm/CodeSerialPrint.java @@ -11,6 +11,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas + * Sende Nachricht via Serial * */ public class CodeSerialPrint extends SimCode { diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeDelay.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeDelay.java index d64ddf2320ef05619d00dad0c2b8f6d79b3c2cdc..1a2a743a6b8e29d832c5fc3e13fce26415b16b9c 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeDelay.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeDelay.java @@ -10,7 +10,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Warte Millisekunden. */ public class CodeDelay extends SimCode { SimTypeInt codeBlock; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElse.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElse.java index 200f52eebbdbfcc64b7dce28340e1bdd4f5eb015..a628aec4d6daa73cc7c2ef986cb8fa3fc9f09639 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElse.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElse.java @@ -11,7 +11,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Führe Befehle aus, falls "falls"-Block FALSCH (und evtl. "sonst falls"-Block) sind. */ public class CodeElse extends CodeTypeIf { private Vector<SimCode> codeBlocks; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElseIf.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElseIf.java index 837d21e532f81d5c601c1d96dd814f84b1013af3..42bd5227310f0ef5e5d31cef500c54f865ac9dac 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElseIf.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeElseIf.java @@ -12,7 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Führe die Befehle aus wenn falls-Block FALSCH ist und Bedingung WAHR ist. */ public class CodeElseIf extends CodeTypeIf { private CodeTypeIf follow; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeFor.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeFor.java index 3a8ca8fce4ebb60d1c89d982fa69d50d2f06d1ee..59696167364d3184f4a998f150f2522e8a997b33 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeFor.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeFor.java @@ -12,7 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Wiederhole die Befehle x-mal. */ public class CodeFor extends SimCode { SimTypeInt count; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeForCount.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeForCount.java index d441b28353426a5229910f7aeabf097f6e0e7d62..9d7b600bef6b25db521a17f0610e0216fa61216d 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeForCount.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeForCount.java @@ -13,7 +13,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Wiederhole die Befehle x-mal. Die Wiederholungen werden in der Variable gespeichert. */ public class CodeForCount extends SimCode { private SimTypeInt count; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeIf.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeIf.java index 7ac50fe2b1c4595921681ffd594fe398592c182c..e604af38f63797c2057555d92f6e992134b513d1 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeIf.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeIf.java @@ -13,6 +13,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas * + * Führe Befehle aus, wenn die Bedingung WAHR ist. */ public class CodeIf extends CodeTypeIf { private CodeTypeIf follow; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeTypeIf.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeTypeIf.java index 4efc4c54efedf80363fbabb8b5b2b5d0cbff1025..378b1d956d9d4528ba5b51bf2c76b79476575855 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeTypeIf.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeTypeIf.java @@ -9,6 +9,8 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas + * + * Unterklasse für die If-Codeblöcke * */ public abstract class CodeTypeIf extends SimCode { diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhile.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhile.java index 68db29ffd5487217c63fd02ef4d7a2600e967b16..3a1d4bfbaea51c217c8a1d4a01623330349738dc 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhile.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhile.java @@ -12,7 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Führe Befehle aus, solange die Bedingung WAHR ist. */ public class CodeWhile extends SimCode { SimTypeBool condition; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhileMillis.java b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhileMillis.java index 6ca271762ced1e5d0e453d78c3fdca1f86f3447f..e9d7db62358fd8e7fee104d62308bab83e849885 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhileMillis.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/control/CodeWhileMillis.java @@ -13,7 +13,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Befehle ausserhalb von mache werden nur alle x-Millisekunden ausgeführt\nDie Startzeit jedes Durchgangs wird in der Variable gespeichert */ public class CodeWhileMillis extends SimCode { private SimTypeInt duration; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeBool.java b/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeBool.java index 0179cbcc574ff0113ce752ce5bbedbb13f2fc8f2..90850f7bf72b780b33b7e3082915eed3281f0d58 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeBool.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeBool.java @@ -9,7 +9,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Klasse für einen BooldatenTyp */ public class SimTypeBool extends SimCode { boolean value = false; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeInt.java b/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeInt.java index e1e89989f2a3dcda327f948378edbce75bd1636f..e70b4683f0f9888afa2117ff23ab74f46367142a 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeInt.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeInt.java @@ -9,7 +9,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Klasse für einen Int-Datentyp */ public class SimTypeInt extends SimCode { private int value = 0; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeString.java b/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeString.java index 0dba4ae354b9fc0c2d715880fc544a370792241f..8d38b793e5ac383a20bdbe65f0ad9312b8b092ed 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeString.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/datatypes/SimTypeString.java @@ -9,7 +9,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Klasse für einen Zeichenketten Datentyp */ public class SimTypeString extends SimCode { private String content; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/functions/CodeExecuteFunction.java b/src/tec/letsgoing/ardublock/simulator/simcode/functions/CodeExecuteFunction.java index a64f5eca7e1b2462de8f37b6cc6670453222b06e..63c2189fa852e2ab720b8fe3cd3c2977fc56a0a9 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/functions/CodeExecuteFunction.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/functions/CodeExecuteFunction.java @@ -8,7 +8,7 @@ import tec.letsgoing.ardublock.simulator.simcode.SimCode; /** * @author Lucas - * + * Führt das Unterprogramm mit dem Namen aus. */ public class CodeExecuteFunction extends SimCode { private String name; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/functions/SimCodeFunction.java b/src/tec/letsgoing/ardublock/simulator/simcode/functions/SimCodeFunction.java index 61859e1d7300613ff05d55d326d6fa8dc5007aa0..fe0aff06e7c104dcf8e7216a979fea64e6e73262 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/functions/SimCodeFunction.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/functions/SimCodeFunction.java @@ -11,7 +11,7 @@ import tec.letsgoing.ardublock.simulator.simcode.SimCode; /** * @author Lucas - * + * Erstellt ein Unterprogramm. */ public class SimCodeFunction { private String name; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogRead.java b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogRead.java index 4b855a4fec79c7af8f15c98c005f53bfb3e538b8..1ccd9183397d0cecab01d2d9dcfae5af8b4eb570 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogRead.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogRead.java @@ -9,7 +9,9 @@ import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt; import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** - * @author Lucas //TODO Block Beschreibung realtiv zu Ardublock + * Liest den analogen Wert vom Pin [0V=0;5V=1023] + * @author Lucas + * */ public class CodeAnalogRead extends SimCode { private SimTypeInt pin; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogWrite.java b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogWrite.java index 8d6c35e4bb049d94a7fe6a2598d155e19138cc54..2fd74c2ca12405a663549e9cb02cd3630ea0a9c7 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogWrite.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeAnalogWrite.java @@ -10,7 +10,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * PWM-Ausgang Wert[0-255] zuweisen */ public class CodeAnalogWrite extends SimCode { private SimTypeInt pin; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalRead.java b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalRead.java index 8edb168865328646a8ed09596542a6844fea5c1f..bbe6a2349fca4f1cfe321159f25d3e03a8656aa8 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalRead.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalRead.java @@ -10,8 +10,9 @@ import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt; import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** + * Liest den digitalen Wert des Pins ein [HIGH/LOW] * @author Lucas - * + * */ public class CodeDigitalRead extends SimCode { private SimTypeInt pin; diff --git a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalWrite.java b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalWrite.java index fa98aacd2be97f29b99ff871b22aed05be01fa9f..496cb224ff5545dc2c3bb3187021d531dec89e90 100644 --- a/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalWrite.java +++ b/src/tec/letsgoing/ardublock/simulator/simcode/io/CodeDigitalWrite.java @@ -11,7 +11,7 @@ import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; /** * @author Lucas - * + * Ausgang eines digitalen Ausgangs festlegen (HIGH/LOW) */ public class CodeDigitalWrite extends SimCode { SimTypeInt pin; diff --git a/src/tec/letsgoing/ardublock/simulator/view/GUI.java b/src/tec/letsgoing/ardublock/simulator/view/GUI.java index 4b560d312d6c7513464919f216fdb64e91936a4c..7bcd7f0bc3c9701729f5a84e2fc84e1c336ab5ed 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/GUI.java +++ b/src/tec/letsgoing/ardublock/simulator/view/GUI.java @@ -3,11 +3,16 @@ */ package tec.letsgoing.ardublock.simulator.view; +import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.Stroke; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Vector; @@ -33,6 +38,7 @@ import tec.letsgoing.ardublock.simulator.view.modules.Poti; import tec.letsgoing.ardublock.simulator.view.modules.RGB; /** + * Verwaltet die graphische Oberfläche. * @author Lucas * */ @@ -45,17 +51,32 @@ public class GUI extends JFrame implements Runnable, ActionListener { public GUI(Simulator simu) { super("ArdubBlock Simulator"); - // TODO Module geben Pin Positionen modules[0] = new RGB(new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/PM31_RGB_LED.png")))); modules[1] = new Button(new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/PM26_Taster.png"))),new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/Taster_Off.png"))),new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/Taster_On.png")))); modules[2] = new Poti(new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/PM24_Potentiometer.png")))); - modules[3] = new ArduinoUno(new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/ArduinoUno.png")))); - + modules[3] = new ArduinoUno(new ImageIcon(getToolkit().getImage(GUI.class.getResource("/img/ArduinoUno.png"))),simu); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); Container mainPane = this.getContentPane(); - JPanel modulPanel = new JPanel(new BorderLayout()); + JPanel modulPanel = new JPanel(new BorderLayout()) { + @Override + public void paint(Graphics g) { + + super.paint(g); + + for (int i =-1 ; i<2;i++) { + g.setColor(Color.BLACK); + g.fillRect(i*294+261, 183, 60, 5); + g.setColor(Color.RED); + g.fillRect(i*294+261, 211, 60, 5); + + } + drawConnections(g); + + } + }; modulPanel.add(modules[0].getPane(), BorderLayout.WEST); modulPanel.add(modules[1].getPane(), BorderLayout.CENTER); modulPanel.add(modules[2].getPane(), BorderLayout.EAST); @@ -65,7 +86,8 @@ public class GUI extends JFrame implements Runnable, ActionListener { mainPane.add(createControlPanel(simu), BorderLayout.LINE_END); mainPane.add(createSerialLog(), BorderLayout.PAGE_END); this.pack(); - //this.setLocation(-1000, 0); Code to Run the Window on seconds screen + System.out.println(modules[2].getPane().getLocation()); + //this.setLocation(-1300, 0); //FIXME Code to Run the Window on second screen this.setVisible(true); } @@ -129,6 +151,24 @@ public class GUI extends JFrame implements Runnable, ActionListener { panel.add(scrollPane, BorderLayout.PAGE_END); return panel; } + + private void drawConnections(Graphics g) { + int[] assignment= {11,10,9,5,4,3,19}; + g.setColor(Color.ORANGE); + Vector<Point> pinArduino=modules[3].getPinPos(); + Point posArduino=modules[3].getPosition(); + int counter=0; + Stroke roundLine=new BasicStroke(5,BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); + for (int i=0;i<3;i++) { + Vector<Point> pos =modules[i].getPinPos(); + for (Point p:pos) { + Graphics2D g2 = (Graphics2D) g; + g2.setStroke(roundLine); + g2.drawLine(p.x+modules[i].getPosition().x, p.y+modules[i].getPosition().y, pinArduino.get(assignment[counter]).x+posArduino.x, pinArduino.get(assignment[counter]).y+posArduino.y); + counter++; + } + } + } public void run() { while (!stopFlag) { diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java b/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java index cc8d31acd592768cd79d7e57065cf55d5598be4c..6c04cf9dd1fd859c6cd2343eca6a8de45071ad6e 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java @@ -8,16 +8,23 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Vector; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; +import javax.swing.JToggleButton; +import tec.letsgoing.ardublock.simulator.Simulator; import tec.letsgoing.ardublock.simulator.arduino.Arduino; import tec.letsgoing.ardublock.simulator.arduino.Pin; import tec.letsgoing.ardublock.simulator.view.GUI; /** + * Modul für einen Arduino Uno * @author Lucas * */ @@ -26,15 +33,16 @@ public class ArduinoUno extends Modul { private boolean ledOn; private int led13 = 0; - public ArduinoUno(ImageIcon _icon) { - - // TODO Arduino mittig anordnen - layerpane.setPreferredSize(new Dimension(587, 418)); + public ArduinoUno(ImageIcon _icon,Simulator simu) { + int locx=100; + int locy=50; + layerpane.setPreferredSize(new Dimension(587+locx, 418+locy));//587,418 JLabel chiplabel = new JLabel(); ImageIcon chipIcon = _icon; chipIcon = new ImageIcon(chipIcon.getImage().getScaledInstance(587, 418, Image.SCALE_SMOOTH)); chiplabel.setIcon(chipIcon); chiplabel.setSize(587, 418); + chiplabel.setLocation(locx, locy); layerpane.add(chiplabel, 0); JLabel labelPower = new JLabel() { @@ -50,7 +58,7 @@ public class ArduinoUno extends Modul { }; - labelPower.setLocation(504, 126); + labelPower.setLocation(504+locx, 126+locy); labelPower.setSize(20, 20); layerpane.add(labelPower, 0); @@ -64,9 +72,25 @@ public class ArduinoUno extends Modul { }; - label13.setLocation(257, 89); + label13.setLocation(257+locx, 89+locy); label13.setSize(20, 20); layerpane.add(label13, 0); + + JButton button = new JButton(); + button.setSize(70, 70); + button.setActionCommand("reset"); + button.addActionListener(simu); + button.setOpaque(false); + button.setContentAreaFilled(false); + button.setBorderPainted(false); + + JLabel labelButton = new JLabel(); + labelButton.add(button); + labelButton.setSize(60, 51); + labelButton.setLocation(64+locx, 1+locy); + layerpane.add(labelButton,0); + + calculatePinPos(locx,locy); } @@ -89,5 +113,35 @@ public class ArduinoUno extends Modul { tmpPin.setObserver(this); return true; } + + private void calculatePinPos(int locx,int locy) { + Vector<Point> pins=new Vector<Point>(); + int offset=0; + for (int i=15;i>1;i--) { + if (i<8)offset=-11; + pins.add(new Point(i*20+locx+246+offset,locy+19)); + } + for (int i=0;i<6;i++) { + pins.add(new Point(i*20+locx+447,locy+397)); + } + //Code to check the Pin Pos + /*JLabel label; + for (Point pin:pins) { + label= new JLabel() { + @Override + public void paintComponent(Graphics g) { + g.setColor(Color.RED); + g.fillRect(0, 0, 10, 10); + } + + }; + + label.setLocation(pin.x,pin.y); + label.setSize(10, 10); + layerpane.add(label, 0); + }*/ + this.setPinPos(pins); + } + } diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java index cd633187d659acd7817e6e42aa5780d0aba19508..4cebd9fbe95639d20d32e6270b7c8ca4db1fa847 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java @@ -3,9 +3,14 @@ */ package tec.letsgoing.ardublock.simulator.view.modules; +import java.awt.Color; import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Point; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Vector; + import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JToggleButton; @@ -14,6 +19,7 @@ import tec.letsgoing.ardublock.simulator.arduino.Arduino; import tec.letsgoing.ardublock.simulator.arduino.Pin; /** + * Modul mit 3 Toogle Buttons * @author Lucas * */ @@ -64,7 +70,7 @@ public class Button extends Modul implements ActionListener { layerpane.add(label1, 0); layerpane.add(label2, 0); layerpane.add(label3, 0); - + calculatePinPos(); } public void updateModul(Pin pin) { @@ -109,5 +115,13 @@ public class Button extends Modul implements ActionListener { lastState[pin] = value; pins.get(pin).setValue(value); } + + private void calculatePinPos() { + Vector<Point> pins=new Vector<Point>(); + for (int i=0;i<3;i++) { + pins.add(new Point(i*30+117,235)); + } + this.setPinPos(pins); + } } diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java index 8a932b6e19a6a5d5598c7afe614f7873de2e4189..3522dc48ad8e9a85e0053c668b3ac279c78a12f4 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java @@ -15,6 +15,7 @@ import tec.letsgoing.ardublock.simulator.arduino.Arduino; import tec.letsgoing.ardublock.simulator.arduino.Pin; /** + * Oberklasse für alle Module * @author Lucas * */ @@ -23,6 +24,7 @@ public abstract class Modul implements Observer { private Point position; protected Vector<Pin> pins = new Vector<Pin>(); protected JLayeredPane layerpane = new JLayeredPane(); + protected Vector<Point> pinPos=new Vector<Point>(); public void setState(boolean State) { active = State; @@ -37,7 +39,8 @@ public abstract class Modul implements Observer { } public Point getPosition() { - return position; + //return position; + return layerpane.getLocation(); } public void update(Observable Observable, Object arg1) { @@ -55,6 +58,14 @@ public abstract class Modul implements Observer { public void addPin(Pin _pin) { pins.add(_pin); } + + public Vector<Point> getPinPos() { + return pinPos; + } + + public void setPinPos(Vector<Point> _pins) { + pinPos=_pins; + } public JLayeredPane getPane() { return layerpane; diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java index be3ad1e1594f6f40685880c749711d186753d6aa..7c9076426a1dcdec0e42eec216ff2a857035a275 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java @@ -3,7 +3,15 @@ */ package tec.letsgoing.ardublock.simulator.view.modules; +import java.awt.Color; import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; +import java.util.Hashtable; +import java.util.Vector; + import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; @@ -15,10 +23,11 @@ import tec.letsgoing.ardublock.simulator.arduino.Arduino; import tec.letsgoing.ardublock.simulator.arduino.Pin; /** + * Modul mit einem Potentiometer * @author Lucas * */ -public class Poti extends Modul implements ChangeListener { +public class Poti extends Modul implements ChangeListener, MouseWheelListener { int value = 0; JSlider slider; @@ -33,10 +42,19 @@ public class Poti extends Modul implements ChangeListener { slider.setMajorTickSpacing(256); slider.setMinorTickSpacing(64); slider.setPaintTicks(true); + + //Create the label table + Hashtable<Integer,JLabel> labelTable = new Hashtable<Integer,JLabel>(); + labelTable.put( new Integer( 10 ), new JLabel("0 V") ); + labelTable.put( new Integer( 512 ), new JLabel("2.5 V") ); + labelTable.put( new Integer( 1023 ), new JLabel("5 V") ); + slider.setLabelTable( labelTable ); + slider.setPaintLabels(true); slider.setPreferredSize(new Dimension(180,50)); slider.setOpaque(false); slider.addChangeListener(this); + slider.addMouseWheelListener(this); JPanel sliderPanel=new JPanel(); sliderPanel.add(slider); @@ -46,6 +64,9 @@ public class Poti extends Modul implements ChangeListener { layerpane.add(chiplabel, 0); layerpane.add(sliderPanel,0); + calculatePinPos(); + + } @@ -67,4 +88,23 @@ public class Poti extends Modul implements ChangeListener { pins.get(0).setValue(slider.getValue()); } + + @Override + public void mouseWheelMoved(MouseWheelEvent arg0) { + int notches = arg0.getWheelRotation(); + if (notches > 0) { + slider.setValue(slider.getValue()+10); + } else { + slider.setValue(slider.getValue()-10); + } + + + + } + private void calculatePinPos() { + Vector<Point> pins=new Vector<Point>(); + pins.add(new Point(30+117,235)); + this.setPinPos(pins); + } + } diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java index 104e87e87559a379f74eae67812ded31db852433..0c9257891aa3befeae13dd53ad56f20938170844 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java @@ -7,6 +7,9 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Point; +import java.util.Vector; + import javax.swing.ImageIcon; import javax.swing.JLabel; @@ -14,6 +17,7 @@ import tec.letsgoing.ardublock.simulator.arduino.Arduino; import tec.letsgoing.ardublock.simulator.arduino.Pin; /** + * Modul mit einer RGB LED * @author Lucas * */ @@ -44,6 +48,8 @@ public class RGB extends Modul { ledlabel.setLocation(107, 37); ledlabel.setSize(200, 200); layerpane.add(ledlabel, 0); + calculatePinPos(); + } public void updateModul(Pin pin) { @@ -71,5 +77,13 @@ public class RGB extends Modul { return true; } + + private void calculatePinPos() { + Vector<Point> pins=new Vector<Point>(); + for (int i=0;i<3;i++) { + pins.add(new Point(i*30+117,235)); + } + this.setPinPos(pins); + } }