Skip to content
Snippets Groups Projects
Commit 43ff87e0 authored by Lucas Stratmann's avatar Lucas Stratmann
Browse files

I/O und If/Else/IfElse funktionieren (unverschachtelt)

parent 14a7aabf
Branches
No related tags found
No related merge requests found
Showing with 98 additions and 6 deletions
package com.ardublock.translator.block.control; package com.ardublock.translator.block.control;
import java.util.Vector;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
public class ElseBlock extends TranslatorBlock public class ElseBlock extends TranslatorBlock
{ {
public ElseBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) public ElseBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
...@@ -25,4 +33,18 @@ public class ElseBlock extends TranslatorBlock ...@@ -25,4 +33,18 @@ public class ElseBlock extends TranslatorBlock
ret = ret + "}\n"; ret = ret + "}\n";
return ret; return ret;
} }
@Override
public SimCode toSim() throws BlockException, SocketNullException {
//FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?.
Vector<SimCode> vector = new Vector<SimCode>();
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
while (translatorBlock != null)
{
vector.add(translatorBlock.toSim());
translatorBlock = translatorBlock.nextTranslatorBlock();
}
return new CodeElse(vector);
}
} }
package com.ardublock.translator.block.control; package com.ardublock.translator.block.control;
import java.util.Vector;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeIf;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
public class ElseIfBlock extends TranslatorBlock public class ElseIfBlock extends TranslatorBlock
{ {
public ElseIfBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) public ElseIfBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
...@@ -28,4 +36,19 @@ public class ElseIfBlock extends TranslatorBlock ...@@ -28,4 +36,19 @@ public class ElseIfBlock extends TranslatorBlock
ret = ret + "}\n"; ret = ret + "}\n";
return ret; return ret;
} }
@Override
public SimCode toSim() throws BlockException, SocketNullException {
//FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?.
SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim());
Vector<SimCode> vector = new Vector<SimCode>();
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1);
while (translatorBlock != null)
{
vector.add(translatorBlock.toSim());
translatorBlock = translatorBlock.nextTranslatorBlock();
}
return new CodeElseIf(condition,vector);
}
} }
...@@ -39,9 +39,8 @@ public class IfBlock extends TranslatorBlock ...@@ -39,9 +39,8 @@ public class IfBlock extends TranslatorBlock
@Override @Override
public SimCode toSim() throws BlockException, SocketNullException { public SimCode toSim() throws BlockException, SocketNullException {
//TODO Ardublock muss mein Projekt in den Buildvariabel haben //FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?.
//TODO If Block benötigt den folgenden Block irgendwie vermutlich muss das der Loop Block durchführen SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim());
SimTypeBool condition= (SimTypeBool) this.getRequiredTranslatorBlockAtSocket(0).toSim();
Vector<SimCode> vector = new Vector<SimCode>(); Vector<SimCode> vector = new Vector<SimCode>();
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1); TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1);
while (translatorBlock != null) while (translatorBlock != null)
...@@ -49,8 +48,8 @@ public class IfBlock extends TranslatorBlock ...@@ -49,8 +48,8 @@ public class IfBlock extends TranslatorBlock
vector.add(translatorBlock.toSim()); vector.add(translatorBlock.toSim());
translatorBlock = translatorBlock.nextTranslatorBlock(); translatorBlock = translatorBlock.nextTranslatorBlock();
} }
CodeIf output=new CodeIf(null, condition,vector);
return null; return new CodeIf(condition,vector);
} }
......
...@@ -5,6 +5,7 @@ import com.ardublock.translator.block.TranslatorBlock; ...@@ -5,6 +5,7 @@ import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
//FIXME Unterscheidung zwischen Ifelse und Elseif nahezu unmöglich. Vorschlag: Umbennenung in IfAndElseBlock
public class IfelseBlock extends TranslatorBlock public class IfelseBlock extends TranslatorBlock
{ {
public IfelseBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) public IfelseBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
......
...@@ -9,6 +9,9 @@ import com.ardublock.translator.block.exception.SocketNullException; ...@@ -9,6 +9,9 @@ import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.simcode.SimCode; import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse;
import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf;
import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction; import tec.letsgoing.ardublock.simulator.simcode.functions.SimCodeFunction;
...@@ -39,10 +42,20 @@ public class LoopBlock extends TranslatorBlock ...@@ -39,10 +42,20 @@ public class LoopBlock extends TranslatorBlock
public SimCode toSim() throws BlockException, SocketNullException { public SimCode toSim() throws BlockException, SocketNullException {
Vector<SimCode> vec =new Vector<SimCode>(); Vector<SimCode> vec =new Vector<SimCode>();
TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0); TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
SimCode prevSimCode=null;
while (translatorBlock != null) while (translatorBlock != null)
{ {
vec.add(translatorBlock.toSim()); SimCode newSimCode = translatorBlock.toSim();
translatorBlock = translatorBlock.nextTranslatorBlock(); translatorBlock = translatorBlock.nextTranslatorBlock();
if (newSimCode instanceof CodeElseIf || newSimCode instanceof CodeElse) {
((SimTypeIf)prevSimCode).setFollowBlock((SimTypeIf) newSimCode);
} else {
vec.add(newSimCode);
}
if (newSimCode instanceof SimTypeIf) {
prevSimCode=newSimCode;
}
} }
SimCodeFunction loop =new SimCodeFunction("loop",vec); SimCodeFunction loop =new SimCodeFunction("loop",vec);
return loop; return loop;
......
...@@ -2,9 +2,15 @@ package com.ardublock.translator.block.input; ...@@ -2,9 +2,15 @@ package com.ardublock.translator.block.input;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt;
import tec.letsgoing.ardublock.simulator.simcode.io.CodeAnalogRead;
import tec.letsgoing.ardublock.simulator.simcode.io.CodeAnalogWrite;
public class AnalogInputBlock extends TranslatorBlock public class AnalogInputBlock extends TranslatorBlock
{ {
...@@ -22,5 +28,9 @@ public class AnalogInputBlock extends TranslatorBlock ...@@ -22,5 +28,9 @@ public class AnalogInputBlock extends TranslatorBlock
ret = ret + ")"; ret = ret + ")";
return codePrefix + ret + codeSuffix; return codePrefix + ret + codeSuffix;
} }
public SimCode toSim() throws BlockException, SocketNullException {
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
return new CodeAnalogRead(new SimTypeInt(translatorBlock.toSim()));
}
} }
...@@ -2,11 +2,17 @@ package com.ardublock.translator.block.input; ...@@ -2,11 +2,17 @@ package com.ardublock.translator.block.input;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import com.ardublock.translator.block.numbers.NumberBlock; import com.ardublock.translator.block.numbers.NumberBlock;
import com.ardublock.translator.block.numbers.VariableNumberBlock; import com.ardublock.translator.block.numbers.VariableNumberBlock;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt;
import tec.letsgoing.ardublock.simulator.simcode.io.CodeAnalogRead;
import tec.letsgoing.ardublock.simulator.simcode.io.CodeDigitalRead;
public class DigitalInputBlock extends TranslatorBlock public class DigitalInputBlock extends TranslatorBlock
{ {
public DigitalInputBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) public DigitalInputBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
...@@ -32,5 +38,9 @@ public class DigitalInputBlock extends TranslatorBlock ...@@ -32,5 +38,9 @@ public class DigitalInputBlock extends TranslatorBlock
ret = ret + ")"; ret = ret + ")";
return codePrefix + ret + codeSuffix; return codePrefix + ret + codeSuffix;
} }
public SimCode toSim() throws BlockException, SocketNullException {
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
return new CodeDigitalRead(new SimTypeInt(translatorBlock.toSim()));
}
} }
...@@ -2,9 +2,14 @@ package com.ardublock.translator.block.output; ...@@ -2,9 +2,14 @@ package com.ardublock.translator.block.output;
import com.ardublock.translator.Translator; import com.ardublock.translator.Translator;
import com.ardublock.translator.block.TranslatorBlock; import com.ardublock.translator.block.TranslatorBlock;
import com.ardublock.translator.block.exception.BlockException;
import com.ardublock.translator.block.exception.SocketNullException; import com.ardublock.translator.block.exception.SocketNullException;
import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
import tec.letsgoing.ardublock.simulator.simcode.SimCode;
import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt;
import tec.letsgoing.ardublock.simulator.simcode.io.CodeAnalogWrite;
public class AnalogOutputBlock extends TranslatorBlock public class AnalogOutputBlock extends TranslatorBlock
{ {
public AnalogOutputBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) public AnalogOutputBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
...@@ -25,6 +30,13 @@ public class AnalogOutputBlock extends TranslatorBlock ...@@ -25,6 +30,13 @@ public class AnalogOutputBlock extends TranslatorBlock
String ret = "analogWrite(" + portNum + " , " + value + ");\n"; String ret = "analogWrite(" + portNum + " , " + value + ");\n";
return ret; return ret;
} }
public SimCode toSim() throws BlockException, SocketNullException {
TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
SimTypeInt pin=new SimTypeInt(translatorBlock.toSim());
translatorBlock = this.getRequiredTranslatorBlockAtSocket(1);
SimTypeInt value= new SimTypeInt(translatorBlock.toSim());
return new CodeAnalogWrite(pin,value);
}
} }
......
...@@ -322,9 +322,11 @@ public class SimulateCodeButtonListener implements ActionListener ...@@ -322,9 +322,11 @@ public class SimulateCodeButtonListener implements ActionListener
//sim.addFunctionsCode(setupCode); //sim.addFunctionsCode(setupCode);
System.out.println("Add new Functions"); System.out.println("Add new Functions");
sim.stopSimu();
sim.resetFunctions(); sim.resetFunctions();
sim.addFunctionsCode(loop); sim.addFunctionsCode(loop);
sim.addFunctionsCode(main); sim.addFunctionsCode(main);
//TODO Autostart?
//TODO ! start simulator here //TODO ! start simulator here
//sim.run(); //sim.run();
//sim.startSimu(); //sim.startSimu();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment