diff --git a/src/main/java/com/ardublock/translator/block/output/NeopixelAinToColorBlock.java b/src/main/java/com/ardublock/translator/block/output/NeopixelAinToColorBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..71650d9b5d9b72d02fb264af131773a507c802b7 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/output/NeopixelAinToColorBlock.java @@ -0,0 +1,72 @@ +package com.ardublock.translator.block.output; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; + +public class NeopixelAinToColorBlock extends TranslatorBlock { + + public NeopixelAinToColorBlock (Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + private final static String colorFunction = "int ainToColor(int value, int color) {\n" + + " int rgbValue = map(constrain(value, 0, 1023), 0, 1023, 0, 255);\n" + + "\n" + + " int colorValue1 = 0;\n" + + " int colorValue2 = 0;\n" + + " int colorValue3 = 0;\n" + + "\n" + + "\n" + + " if (value <= 341) { // Bereich von 0 bis 341: R -> G\n" + + " colorValue1 = 255 - rgbValue * 3;\n" + + " colorValue2 = rgbValue * 3;\n" + + " colorValue3 = 0;\n" + + " } else if (value <= 682) { // Bereich von 342 bis 682: G -> B\n" + + " rgbValue -= 85;\n" + + " colorValue1 = 0;\n" + + " colorValue2 = 255 - rgbValue * 3;\n" + + " colorValue3 = rgbValue * 3;\n" + + " } else { // Bereich von 683 bis 1023: B -> R\n" + + " rgbValue -= 170;\n" + + " colorValue1 = rgbValue * 3;\n" + + " colorValue2 = 0;\n" + + " colorValue3 = 255 - rgbValue * 3;\n" + + " }\n" + + "\n" + + " switch (color) {\n" + + " case 1:\n" + + " return colorValue1;\n" + + " case 2:\n" + + " return colorValue2;\n" + + " break;\n" + + "\n" + + " case 3:\n" + + " return colorValue3;\n" + + " break;\n" + + "\n" + + " return -1;\n" + + " }\n" + + "}"; + + //@Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String analogValue ; + String color; + + translator.addDefinitionCommand(colorFunction); + + TranslatorBlock tb_ain = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_color = this.getRequiredTranslatorBlockAtSocket(1); + + analogValue = tb_ain.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + color = tb_color.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + String ret = "ainToColor("+analogValue+", "+color+")"; + + return codePrefix + ret + codeSuffix; + } +} diff --git a/src/main/java/com/ardublock/translator/block/output/NeopixelRainbowBlock.java b/src/main/java/com/ardublock/translator/block/output/NeopixelRainbowBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..786568549d0000cefd71723b4688bb1310c65d1b --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/output/NeopixelRainbowBlock.java @@ -0,0 +1,35 @@ +package com.ardublock.translator.block.output; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; + +public class NeopixelRainbowBlock extends TranslatorBlock { + + public NeopixelRainbowBlock (Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + //@Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String pin ; + String wait; + String rainbowFunction; + + TranslatorBlock tb_pin = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_wait = this.getRequiredTranslatorBlockAtSocket(1); + + pin = tb_pin.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + wait = tb_wait.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + String ret = "rainbow("+wait+");\n"; + + rainbowFunction = "void rainbow(int wait) {\nfor(long firstPixelHue = 0; firstPixelHue < 65536; firstPixelHue += 256) {\nfor(int i=0; i<strip_pin"+pin+".numPixels(); i++) {\nint pixelHue = firstPixelHue + (i * 65536L / strip_pin"+pin+".numPixels());\nstrip_pin"+pin+".setPixelColor(i, strip_pin"+pin+".gamma32(strip_pin"+pin+".ColorHSV(pixelHue)));\n}\nstrip_pin"+pin+".show();\ndelay(wait);\n}\n}"; + translator.addDefinitionCommand(rainbowFunction); + + return codePrefix + ret + codeSuffix; + + } +} diff --git a/src/main/java/com/ardublock/translator/block/output/NeopixelRainbowChaseBlock.java b/src/main/java/com/ardublock/translator/block/output/NeopixelRainbowChaseBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..03e4effafa8f320c6bcf0ffd35514f3b217fafe4 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/output/NeopixelRainbowChaseBlock.java @@ -0,0 +1,38 @@ +package com.ardublock.translator.block.output; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; + +public class NeopixelRainbowChaseBlock extends TranslatorBlock { + + public NeopixelRainbowChaseBlock (Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + //@Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String pin ; + String wait; + String times; + String rainbowFunction; + + TranslatorBlock tb_pin = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_wait = this.getRequiredTranslatorBlockAtSocket(1); + TranslatorBlock tb_times = this.getRequiredTranslatorBlockAtSocket(2); + + pin = tb_pin.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + wait = tb_wait.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + times = tb_times.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + String ret = "theaterChaseRainbow("+wait+", "+ times +");\n"; + + rainbowFunction = "void theaterChaseRainbow(int wait, int times) {\nint firstPixelHue = 0;\nfor(int a=0; a<times; a++) {\nfor(int b=0; b<3; b++) {\nstrip_pin"+pin+".clear();\nfor(int c=b; c<strip_pin"+pin+".numPixels(); c += 3) {\nint hue = firstPixelHue + c * 65536L / strip_pin"+pin+".numPixels();\nuint32_t color = strip_pin"+pin+".gamma32(strip_pin"+pin+".ColorHSV(hue));\nstrip_pin"+pin+".setPixelColor(c, color);\n}\nstrip_pin"+pin+".show();\ndelay(wait);\nfirstPixelHue += 65536 / 90;\n}\n}\n}"; + translator.addDefinitionCommand(rainbowFunction); + + return codePrefix + ret + codeSuffix; + } +} diff --git a/src/main/java/com/ardublock/translator/block/output/NeopixelTheaterChaseBlock.java b/src/main/java/com/ardublock/translator/block/output/NeopixelTheaterChaseBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..76408621ec382b6e499fcb29f1082f3b97205f08 --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/output/NeopixelTheaterChaseBlock.java @@ -0,0 +1,44 @@ +package com.ardublock.translator.block.output; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; + +public class NeopixelTheaterChaseBlock extends TranslatorBlock { + + public NeopixelTheaterChaseBlock (Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + //@Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String pin; + String red, green, blue; + String wait, times; + String theaterFunction; + + TranslatorBlock tb_pin = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_red = this.getRequiredTranslatorBlockAtSocket(1); + TranslatorBlock tb_green = this.getRequiredTranslatorBlockAtSocket(2); + TranslatorBlock tb_blue = this.getRequiredTranslatorBlockAtSocket(3); + TranslatorBlock tb_wait = this.getRequiredTranslatorBlockAtSocket(4); + TranslatorBlock tb_times = this.getRequiredTranslatorBlockAtSocket(5); + + pin = tb_pin.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + red = tb_red.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + green = tb_green.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + blue = tb_blue.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + wait = tb_wait.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + times = tb_times.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + String ret = "theaterChase("+red+", "+green+", "+blue+", "+wait+");\n"; + theaterFunction = "void theaterChase(uint8_t red, uint8_t green, uint8_t blue, int wait) {\nuint32_t color = strip_pin"+pin+".Color( red, green, blue);\nfor(int a=0; a<"+times+"; a++) { \nfor(int b=0; b<3; b++) {\nstrip_pin"+pin+".clear();\nfor(int c=b; c<strip_pin"+pin+".numPixels(); c += 3) {\nstrip_pin"+pin+".setPixelColor(c, color);\n}\nstrip_pin"+pin+".show();\ndelay(wait);\n}\n}\n}\n"; + translator.addDefinitionCommand(theaterFunction); + + return codePrefix + ret + codeSuffix; + + } +} diff --git a/src/main/java/com/ardublock/translator/block/output/NeopixelWipeBlock.java b/src/main/java/com/ardublock/translator/block/output/NeopixelWipeBlock.java new file mode 100644 index 0000000000000000000000000000000000000000..142441a157bee4794b131b68e688947f8a06b02f --- /dev/null +++ b/src/main/java/com/ardublock/translator/block/output/NeopixelWipeBlock.java @@ -0,0 +1,43 @@ +package com.ardublock.translator.block.output; + +import com.ardublock.translator.Translator; +import com.ardublock.translator.block.TranslatorBlock; +import com.ardublock.translator.block.exception.SocketNullException; +import com.ardublock.translator.block.exception.SubroutineNotDeclaredException; + +public class NeopixelWipeBlock extends TranslatorBlock { + + public NeopixelWipeBlock (Long blockId, Translator translator, String codePrefix, String codeSuffix, String label) + { + super(blockId, translator, codePrefix, codeSuffix, label); + } + + //@Override + public String toCode() throws SocketNullException, SubroutineNotDeclaredException + { + String pin; + String red, green, blue; + String wait; + String wipeFunction; + + TranslatorBlock tb_pin = this.getRequiredTranslatorBlockAtSocket(0); + TranslatorBlock tb_red = this.getRequiredTranslatorBlockAtSocket(1); + TranslatorBlock tb_green = this.getRequiredTranslatorBlockAtSocket(2); + TranslatorBlock tb_blue = this.getRequiredTranslatorBlockAtSocket(3); + TranslatorBlock tb_wait = this.getRequiredTranslatorBlockAtSocket(4); + + pin = tb_pin.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + red = tb_red.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + green = tb_green.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + blue = tb_blue.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + wait = tb_wait.toCode().replaceAll("\\s*_.new\\b\\s*", ""); + + String ret = "colorWipe("+red+", "+green+", "+blue+", "+wait+");\n"; + + wipeFunction = "void colorWipe(uint8_t red, uint8_t green, uint8_t blue, int wait) {\nuint32_t color = strip_pin"+pin+".Color( red, green, blue);\nfor(int i=0; i<strip_pin"+pin+".numPixels(); i++) {\nstrip_pin"+pin+".setPixelColor(i, color);\nstrip_pin"+pin+".show();\ndelay(wait);\n}\n}\n"; + translator.addDefinitionCommand(wipeFunction); + + return codePrefix + ret + codeSuffix; + + } +}