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 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%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