diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..a55e7a1
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/LED_Panel_arduino/LED_Panel_arduino.ino b/LED_Panel_arduino/LED_Panel_arduino.ino
new file mode 100644
index 0000000..bd3cb9e
--- /dev/null
+++ b/LED_Panel_arduino/LED_Panel_arduino.ino
@@ -0,0 +1,47 @@
+#include
+
+#define PIN 3
+PololuLedStrip leds;
+#define LED_COUNT 256
+#define BAUD 1000000
+rgb_color colors[LED_COUNT];
+
+#define BRIGHTNESS 10
+
+void setup() {
+ PololuLedStripBase::interruptFriendly = true;
+ Serial.begin(BAUD);
+ Serial.setTimeout(500);
+}
+
+// main program
+void loop() {
+
+ byte buf[1];
+ unsigned int c=0;
+ do{
+ c++;
+
+ if(Serial.readBytes(buf, 1) == 0) {
+ for (uint16_t i = 0; i < LED_COUNT; i++){
+ colors[i] = rgb_color(0, 0, 0);
+ }
+ leds.write(colors, LED_COUNT);
+ }
+ }while(buf[0] != 255);
+
+ if(c>1){
+ Serial.print("Invalid Data Bytes: ");
+ Serial.println(c);
+ }
+
+
+ for (uint16_t i = 0; i < LED_COUNT; i++)
+ {
+ char col[3];
+ Serial.readBytes(col, 3);
+ colors[i] = rgb_color(col[0], col[1], col[2]);
+ }
+
+ leds.write(colors, LED_COUNT);
+}
diff --git a/pom.xml b/pom.xml
index 135b37e..e970956 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,9 +20,9 @@
[2.0.0,3.0.0)
- com.profesorfalken
- jSensors
- 2.2.1
+ com.github.oshi
+ oshi-core
+ 5.5.1
com.tagtraum
diff --git a/src/main/java/de/zuim/ledcontrol/EffectManager.java b/src/main/java/de/zuim/ledcontrol/EffectManager.java
index 3f007e2..aabe28a 100644
--- a/src/main/java/de/zuim/ledcontrol/EffectManager.java
+++ b/src/main/java/de/zuim/ledcontrol/EffectManager.java
@@ -9,49 +9,53 @@ import java.awt.event.MouseListener;
public class EffectManager {
- int activeId=4;
- private final LEDEffect[] effects = new LEDEffect[]{new TemperatureEffect(), new ClockEffect(), new SineEffect(), new AudioEffect(), new ColorSweep()};
+ int activeId = 4;
+ private final LEDEffect[] effects = new LEDEffect[]{new ClockEffect(),new AudioVolume(), new TemperatureEffect(), new SineEffect(), new AudioFFT(), new ColorSweep()};
- public EffectManager(){
+ public EffectManager() {
- final SystemTray tray = SystemTray.getSystemTray();
- final TrayIcon trayIcon = new TrayIcon(new ImageIcon(getClass().getResource("/icon.png")).getImage(),"LEDEffects");
+ final SystemTray tray = SystemTray.getSystemTray();
+ final TrayIcon trayIcon = new TrayIcon(new ImageIcon(getClass().getResource("/icon.png")).getImage(), "LEDEffects");
- trayIcon.addMouseListener(new MouseListener() {
- @Override
- public void mouseClicked(MouseEvent e) {
- if(e.getButton()!=MouseEvent.BUTTON1)
- System.exit(0);
- getActiveEffect().unload();
- activeId++;
- if(activeId==effects.length)
- activeId=0;
- getActiveEffect().load();
- trayIcon.setToolTip("LEDEffects - " + getActiveEffect().getDescription());
- }
+ trayIcon.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (e.getButton() != MouseEvent.BUTTON1)
+ System.exit(0);
+ getActiveEffect().unload();
+ activeId++;
+ if (activeId == effects.length)
+ activeId = 0;
+ getActiveEffect().load();
+ trayIcon.setToolTip("LEDEffects - " + getActiveEffect().getDescription());
+ }
- @Override
- public void mousePressed(MouseEvent e) {}
+ @Override
+ public void mousePressed(MouseEvent e) {
+ }
- @Override
- public void mouseReleased(MouseEvent e) {}
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ }
- @Override
- public void mouseEntered(MouseEvent e) {}
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
- @Override
- public void mouseExited(MouseEvent e) {}
- });
- try {
- tray.add(trayIcon);
- } catch (AWTException e) {
- e.printStackTrace();
- }
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+ });
+ try {
+ tray.add(trayIcon);
+ } catch (AWTException e) {
+ e.printStackTrace();
+ }
- getActiveEffect().load();
- }
+ getActiveEffect().load();
+ }
- public LEDEffect getActiveEffect() {
- return effects[activeId];
- }
+ public LEDEffect getActiveEffect() {
+ return effects[activeId];
+ }
}
diff --git a/src/main/java/de/zuim/ledcontrol/LEDControl.java b/src/main/java/de/zuim/ledcontrol/LEDControl.java
index f762618..a7de024 100644
--- a/src/main/java/de/zuim/ledcontrol/LEDControl.java
+++ b/src/main/java/de/zuim/ledcontrol/LEDControl.java
@@ -1,108 +1,136 @@
package de.zuim.ledcontrol;
import com.fazecast.jSerialComm.SerialPort;
+import com.fazecast.jSerialComm.SerialPortDataListener;
+import com.fazecast.jSerialComm.SerialPortEvent;
import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
+import java.nio.charset.StandardCharsets;
public class LEDControl {
- public static final int WIDTH=16;
- public static final int HEIGHT=16;
- public static final int LED_NUM = WIDTH*HEIGHT;
- public static final int BAUD = 1000000;
+ public static final int WIDTH = 16;
+ public static final int HEIGHT = 16;
+ public static final int LED_NUM = WIDTH * HEIGHT;
+ public static final int BAUD = 1000000;
- private SerialPort port;
- private byte[][][] leds = new byte[WIDTH][HEIGHT][3];
- private EffectManager eff;
- private BufferedImage scaledImage;
+ private SerialPort port;
+ private final byte[][][] leds = new byte[WIDTH][HEIGHT][3];
+ private final EffectManager eff;
+ private BufferedImage scaledImage;
- public LEDControl(){
- eff = new EffectManager();
+ public LEDControl() {
+ eff = new EffectManager();
- Runtime.getRuntime().addShutdownHook(new Thread(() -> port.closePort()));
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> port.closePort()));
- connect();
+ connect();
- sendLoop();
- }
+ sendLoop();
+ }
- private void sendLoop(){
- long time = System.nanoTime();
- long iteration = 0;
+ private void sendLoop() {
+ long time = System.nanoTime();
+ long iteration = 0;
- while(true){
- if(port == null || !port.isOpen()){
- sleep(1000);
- connect();
- continue;
- }
+ long minTimeDelta = Long.MAX_VALUE,
+ maxTimeDelta = 0;
- long timeDelta = System.nanoTime()-time;
- time = System.nanoTime();
+ while (true) {
+ if (port == null || !port.isOpen()) {
+ if (!connect()) {
+ sleep(1000);
+ continue;
+ }
+ }
- renderFrame(timeDelta);
+ long timeDelta = System.nanoTime() - time;
+ if(timeDelta > maxTimeDelta)
+ maxTimeDelta = timeDelta;
+ if(timeDelta < minTimeDelta)
+ minTimeDelta = timeDelta;
+ time = System.nanoTime();
- port.writeBytes(new byte[]{(byte) 255}, 1); //start of new frame
+ renderFrame(timeDelta);
- for(int x=0;x>16)&0xff),254);
- leds[x][y][1] = (byte) Math.min((col>>8)&0xff,254);
- leds[x][y][2] = (byte) Math.min(((col)&0xff),254);
- port.writeBytes(leds[x][y], 3);
- }
- }
+ port.writeBytes(new byte[]{(byte) 255}, 1); //start of new frame
- sleep(10);
+ for (int x = 0; x < WIDTH; x++) {
+ for (int y = 0; y < HEIGHT; y++) {
+ int col = scaledImage.getRGB(x, (x % 2 == 1) ? leds[0].length - y - 1 : y);
+ leds[x][y][0] = (byte) Math.min(((col >> 16) & 0xff), 254);
+ leds[x][y][1] = (byte) Math.min((col >> 8) & 0xff, 254);
+ leds[x][y][2] = (byte) Math.min(((col) & 0xff), 254);
+ port.writeBytes(leds[x][y], 3);
+ }
+ }
- if(iteration%1000==1){
- System.out.println("Frametime: "+ (Math.round(timeDelta)/100000)/10.0 + "ms ("+iteration+" Frames)");
- }
- iteration++;
- }
- }
+ sleep(10);
- private void connect(){
- SerialPort[] ports = SerialPort.getCommPorts();
- if(ports.length > 0){
- port = SerialPort.getCommPorts()[0];
- System.out.println("Connect to " + port.getDescriptivePortName()+" "+port.getSystemPortName()+" ");
- port.setComPortParameters(BAUD,8,1,0);
- port.openPort();
- }
- }
+ if (iteration % 1000 == 1) {
+ System.out.println("Frametime: " + (Math.round(timeDelta) / 100000) / 10.0 + "ms ("+(Math.round(minTimeDelta) / 100000) / 10.0+"ms - "+(Math.round(maxTimeDelta) / 100000) / 10.0+"ms) " + iteration + " Frames");
+ minTimeDelta = Long.MAX_VALUE;
+ maxTimeDelta = 0;
+ }
+ iteration++;
+ }
+ }
- private void sleep(int ms){
- try {
- Thread.sleep(ms);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
+ private boolean connect() {
+ SerialPort[] ports = SerialPort.getCommPorts();
+ if (ports.length > 0) {
+ port = SerialPort.getCommPorts()[0];
+ System.out.println("Connect to " + port.getDescriptivePortName() + " " + port.getSystemPortName() + " ");
+ port.setComPortParameters(BAUD, 8, 1, 0);
+ if (port.openPort()) {
+ port.addDataListener(new SerialPortDataListener() {
+ @Override
+ public int getListeningEvents() {
+ return SerialPort.LISTENING_EVENT_DATA_RECEIVED;
+ }
- private void renderFrame(long timeDelta) {
- BufferedImage image = new BufferedImage(16*eff.getActiveEffect().getScale(),16*eff.getActiveEffect().getScale(),BufferedImage.TYPE_INT_ARGB);
- Graphics g = image.getGraphics();
- eff.getActiveEffect().render(timeDelta, g);
- g.dispose();
+ @Override
+ public void serialEvent(SerialPortEvent event) {
+ System.err.println("Received: " + new String(event.getReceivedData(), StandardCharsets.US_ASCII));
+ }
+ });
+ return true;
+ }
+ }
- if(eff.getActiveEffect().getScale()==1){
- scaledImage = image;
- }else{
- scaledImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
- AffineTransform at = new AffineTransform();
- at.scale(1.0/eff.getActiveEffect().getScale(), 1.0/eff.getActiveEffect().getScale());
- AffineTransformOp scaleOp =
- new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
- scaledImage = scaleOp.filter(image, scaledImage);
- }
- }
+ return false;
+ }
- public static void main(String[] args) {
- new LEDControl();
- }
+ private void sleep(int ms) {
+ try {
+ Thread.sleep(ms);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void renderFrame(long timeDelta) {
+ BufferedImage image = new BufferedImage(16 * eff.getActiveEffect().getScale(), 16 * eff.getActiveEffect().getScale(), BufferedImage.TYPE_INT_ARGB);
+ Graphics g = image.getGraphics();
+ eff.getActiveEffect().render(timeDelta, g);
+ g.dispose();
+
+ if (eff.getActiveEffect().getScale() == 1) {
+ scaledImage = image;
+ } else {
+ scaledImage = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
+ AffineTransform at = new AffineTransform();
+ at.scale(1.0 / eff.getActiveEffect().getScale(), 1.0 / eff.getActiveEffect().getScale());
+ AffineTransformOp scaleOp =
+ new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
+ scaledImage = scaleOp.filter(image, scaledImage);
+ }
+ }
+
+ public static void main(String[] args) {
+ new LEDControl();
+ }
}
diff --git a/src/main/java/de/zuim/ledcontrol/LEDEffect.java b/src/main/java/de/zuim/ledcontrol/LEDEffect.java
index f79f228..2650650 100644
--- a/src/main/java/de/zuim/ledcontrol/LEDEffect.java
+++ b/src/main/java/de/zuim/ledcontrol/LEDEffect.java
@@ -4,9 +4,17 @@ import java.awt.*;
public interface LEDEffect {
- String getDescription();
- default int getScale() {return 1; }
- default void load() {}
- default void unload() {}
- void render(long timeDelta, Graphics g);
+ String getDescription();
+
+ default int getScale() {
+ return 1;
+ }
+
+ default void load() {
+ }
+
+ default void unload() {
+ }
+
+ void render(long timeDelta, Graphics g);
}
diff --git a/src/main/java/de/zuim/ledcontrol/effects/AudioEffect.java b/src/main/java/de/zuim/ledcontrol/effects/AudioEffect.java
deleted file mode 100644
index 996b183..0000000
--- a/src/main/java/de/zuim/ledcontrol/effects/AudioEffect.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package de.zuim.ledcontrol.effects;
-
-import com.tagtraum.jipes.math.FFTFactory;
-import com.tagtraum.jipes.math.Transform;
-import de.zuim.ledcontrol.LEDControl;
-import de.zuim.ledcontrol.LEDEffect;
-
-import javax.sound.sampled.*;
-import java.awt.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import static de.zuim.ledcontrol.LEDControl.HEIGHT;
-import static de.zuim.ledcontrol.LEDControl.WIDTH;
-
-public class AudioEffect implements LEDEffect {
- @Override
- public String getDescription() {
- return "Audio Effect";
- }
-
- final static int BUFFERSIZE = 2048;
- double[] magnitudes = null;
- Thread audioThread = null;
-
- @Override
- public void load() {
- Runnable audioRunnable = () -> {
-
-
- Mixer.Info[] mixers = AudioSystem.getMixerInfo();
- List availableTargetLines = new ArrayList<>();
- for (Mixer.Info mixerInfo : mixers){
-
- Mixer m = AudioSystem.getMixer(mixerInfo);
-
- Line.Info[] lines = m.getTargetLineInfo();
-
- for (Line.Info li : lines)
- {
- try
- {
- if(li instanceof DataLine.Info && mixerInfo.toString().contains("mix"))
- {
- m.open();
- System.out.println("("+availableTargetLines.size()+") Found target line: " + li+" "+mixerInfo + "("+li.getClass()+")");
- availableTargetLines.add(li);
- m.close();
- }
- } catch (LineUnavailableException e){
- System.out.println("Line unavailable.");
- }
- }
- }
-
- DataLine.Info targetLineInfo = (DataLine.Info) availableTargetLines.get(0);
-
- System.out.println("SUPPORTED TARGET FORMATS: ");
- AudioFormat[] formats = (targetLineInfo).getFormats();
- for(int i=0; i decode
-
- float[] fbuf = decode(buf,format);
-
- final float[][] transformed = fft.transform(fbuf);
- final float[] realPart = transformed[0];
- final float[] imaginaryPart = transformed[1];
- magnitudes = toMagnitudes(realPart, imaginaryPart);
-
- //System.out.println("M"+ Arrays.toString(magnitudes));
- // do something with magnitudes...
- int max = 0, avg = 0,min=11111111;
- for(double m : magnitudes){
- avg += m;
- if(m>max)
- max= (int) m;
- if(m {
+
+
+ Mixer.Info[] mixers = AudioSystem.getMixerInfo();
+ List availableTargetLines = new ArrayList<>();
+ for (Mixer.Info mixerInfo : mixers) {
+
+ Mixer m = AudioSystem.getMixer(mixerInfo);
+
+ Line.Info[] lines = m.getTargetLineInfo();
+
+ for (Line.Info li : lines) {
+ try {
+ if (li instanceof DataLine.Info && mixerInfo.toString().contains("mix")) {
+ m.open();
+ System.out.println("(" + availableTargetLines.size() + ") Found target line: " + li + " " + mixerInfo + "(" + li.getClass() + ")");
+ availableTargetLines.add(li);
+ m.close();
+ }
+ } catch (LineUnavailableException e) {
+ System.out.println("Line unavailable.");
+ }
+ }
+ }
+
+ DataLine.Info targetLineInfo = (DataLine.Info) availableTargetLines.get(0);
+
+ System.out.println("SUPPORTED TARGET FORMATS: ");
+ AudioFormat[] formats = (targetLineInfo).getFormats();
+ for (int i = 0; i < formats.length; i++) {
+ System.out.println("(" + i + ")" + formats[i]);
+ }
+ AudioFormat format = formats[2];
+
+
+ System.out.println("SELECTED: " + format);
+
+
+ final DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
+ final AudioInputStream audioStream;
+
+ //verbesserung: https://stackoverflow.com/a/51240462
+ try {
+ TargetDataLine targetLine = (TargetDataLine) AudioSystem.getLine(info);
+ targetLine.open();
+ targetLine.start();
+ audioStream = new AudioInputStream(targetLine);
+
+ final byte[] buf = new byte[BUFFERSIZE];
+
+ final int numberOfSamples = buf.length / format.getFrameSize();
+ final Transform fft = FFTFactory.getInstance().create(numberOfSamples);
+ while (audioThread != null) {
+ int read = audioStream.read(buf);
+
+ fbuf = decode(buf, format);
+
+ final float[][] transformed = fft.transform(fbuf);
+ final float[] realPart = transformed[0];
+ final float[] imaginaryPart = transformed[1];
+ magnitudes = toMagnitudes(realPart, imaginaryPart);
+
+ //System.out.println("M"+ Arrays.toString(magnitudes));
+
+ int max = 0, avg = 0, min = 11111111;
+ for (double m : magnitudes) {
+ avg += m;
+ if (m > max)
+ max = (int) m;
+ if (m < min)
+ min = (int) m;
+ }
+ //System.out.println("M"+ max+" "+min+" "+avg/magnitudes.length+ " "+read+" "+magnitudes.length);
+ }
+
+ audioStream.close();
+ targetLine.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ };
+
+ audioThread = new Thread(audioRunnable);
+ audioThread.start();
+ }
+
+ @Override
+ public void unload() {
+ if (audioThread != null && audioThread.isAlive())
+ audioThread = null;
+ }
+
+ @Override
+ public void render(long timeDelta, Graphics g) {
+ for (int x = 0; x < WIDTH; x++) {
+ double val = 0;
+
+
+ if (magnitudes != null) {
+ double base = Math.exp(Math.log(magnitudes.length/2)/(WIDTH+3));
+
+ int intervalStart = (int) Math.pow(base,x+3),
+ intervalEnd = (int) Math.pow(base,x+4);
+
+ //System.out.println(x+" "+intervalStart+"-"+intervalEnd);
+
+ for(int magPos = intervalStart; magPos < intervalEnd; magPos++){
+ val += magnitudes[magPos];
+ }
+
+ val /= intervalEnd-intervalStart;
+ /*
+ int magnitudesInPixel = (magnitudes.length / WIDTH) / 20;
+
+ for (int sample = 0; sample < magnitudesInPixel; sample++) {
+ val += magnitudes[x * magnitudesInPixel + sample];
+ }
+ val /= (double) magnitudes.length / WIDTH;*/
+ }
+ int y = (int) Math.min(HEIGHT,Math.round(Math.max(1, val+10))/10);
+ g.setColor(new Color(Math.abs(y) + 1, 2, 0));
+ g.drawRect(x, HEIGHT - y, 0, HEIGHT);
+ g.setColor(new Color(Math.abs(y), 0, 0));
+ g.drawRect(x, HEIGHT - y, 0, 0);
+ }
+ }
+
+ private static float[] decode(final byte[] buf, final AudioFormat format) {
+ final float[] fbuf = new float[buf.length / format.getFrameSize()];
+ for (int pos = 0; pos < buf.length; pos += format.getFrameSize()) {
+ final int sample = format.isBigEndian()
+ ? byteToIntBigEndian(buf, pos, format.getFrameSize())
+ : byteToIntLittleEndian(buf, pos, format.getFrameSize());
+ // normalize to [0,1]
+ fbuf[pos / format.getFrameSize()] = sample / (Short.MAX_VALUE + 1.0f);
+ }
+ return fbuf;
+ }
+
+ private static double[] toMagnitudes(final float[] realPart, final float[] imaginaryPart) {
+ final double[] powers = new double[realPart.length / 2];
+ for (int i = 0; i < powers.length; i++) {
+ powers[i] = Math.sqrt(realPart[i] * realPart[i] + imaginaryPart[i] * imaginaryPart[i]);
+ }
+ return powers;
+ }
+
+ private static int byteToIntLittleEndian(final byte[] buf, final int offset, final int bytesPerSample) {
+ int sample = 0;
+ for (int byteIndex = 0; byteIndex < bytesPerSample; byteIndex++) {
+ final int aByte = buf[offset + byteIndex] & 0xff;
+ sample += aByte << 8 * (byteIndex);
+ }
+ return sample;
+ }
+
+ private static int byteToIntBigEndian(final byte[] buf, final int offset, final int bytesPerSample) {
+ int sample = 0;
+ for (int byteIndex = 0; byteIndex < bytesPerSample; byteIndex++) {
+ final int aByte = buf[offset + byteIndex] & 0xff;
+ sample += aByte << (8 * (bytesPerSample - byteIndex - 1));
+ }
+ return sample;
+ }
+}
diff --git a/src/main/java/de/zuim/ledcontrol/effects/AudioVolume.java b/src/main/java/de/zuim/ledcontrol/effects/AudioVolume.java
new file mode 100644
index 0000000..c34d6a1
--- /dev/null
+++ b/src/main/java/de/zuim/ledcontrol/effects/AudioVolume.java
@@ -0,0 +1,48 @@
+package de.zuim.ledcontrol.effects;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import static de.zuim.ledcontrol.LEDControl.HEIGHT;
+import static de.zuim.ledcontrol.LEDControl.WIDTH;
+
+public class AudioVolume extends AudioFFT {
+
+ @Override
+ public String getDescription() {
+ return "Audio Volume";
+ }
+
+ List volHistory = new ArrayList<>();
+ long timeDeltaSum = 0;
+
+ @Override
+ public void render(long timeDelta, Graphics g) {
+ timeDeltaSum += timeDelta;
+
+ if (fbuf != null) {
+ float avg = 0;
+ float max = 0;
+ for (float v : fbuf) {
+ avg += Math.abs(v);
+ if (v > max) {
+ max = v;
+ }
+ }
+ avg /= fbuf.length;
+ volHistory.add((int) (5 * avg));
+ }
+
+ if (volHistory.size() > WIDTH) {
+ volHistory.remove(0);
+ }
+
+ for (int x = 0; x < volHistory.size(); x++) {
+
+ g.setColor(new Color((int) ((Math.abs(volHistory.get(x)) + 1) * ((WIDTH - x) / (float) WIDTH)), 2, 0));
+ g.drawRect(WIDTH - x - 1, HEIGHT - volHistory.get(x), 0, HEIGHT);
+ }
+ }
+
+}
diff --git a/src/main/java/de/zuim/ledcontrol/effects/ClockEffect.java b/src/main/java/de/zuim/ledcontrol/effects/ClockEffect.java
index 9eb9497..3fa49c6 100644
--- a/src/main/java/de/zuim/ledcontrol/effects/ClockEffect.java
+++ b/src/main/java/de/zuim/ledcontrol/effects/ClockEffect.java
@@ -36,7 +36,6 @@ public class ClockEffect implements LEDEffect {
SimpleDateFormat formatter2 = new SimpleDateFormat("ss");
String text2 = formatter2.format(date);
- g.clearRect(0,0,WIDTH,HEIGHT);
g.setFont(font);
g.setColor(new Color(0,10-date.getMinutes()/6,date.getMinutes()/6));
posOffset-=(4*getScale()*timeDelta)/1000000000.0;
diff --git a/src/main/java/de/zuim/ledcontrol/effects/TemperatureEffect.java b/src/main/java/de/zuim/ledcontrol/effects/TemperatureEffect.java
index 786aa1a..1f50972 100644
--- a/src/main/java/de/zuim/ledcontrol/effects/TemperatureEffect.java
+++ b/src/main/java/de/zuim/ledcontrol/effects/TemperatureEffect.java
@@ -1,58 +1,55 @@
package de.zuim.ledcontrol.effects;
-import com.profesorfalken.jsensors.JSensors;
-import com.profesorfalken.jsensors.model.components.Component;
-import com.profesorfalken.jsensors.model.components.Components;
-import com.profesorfalken.jsensors.model.components.Cpu;
-import com.profesorfalken.jsensors.model.sensors.Fan;
-import com.profesorfalken.jsensors.model.sensors.Load;
-import com.profesorfalken.jsensors.model.sensors.Temperature;
+import com.tagtraum.jipes.math.FFTFactory;
+import com.tagtraum.jipes.math.Transform;
import de.zuim.ledcontrol.LEDEffect;
+import oshi.SystemInfo;
+import oshi.hardware.*;
+import javax.sound.sampled.*;
import java.awt.*;
-import java.util.ArrayList;
+import java.text.SimpleDateFormat;
+import java.util.*;
import java.util.List;
+import static de.zuim.ledcontrol.LEDControl.WIDTH;
+import static java.awt.image.ImageObserver.HEIGHT;
+
public class TemperatureEffect implements LEDEffect {
- @Override
- public String getDescription() {
- return "Temperatur Sensoren";
- }
+ @Override
+ public String getDescription() {
+ return "Temperatur Sensoren";
+ }
- @Override
- public void render(long timeDelta, Graphics g) {
- /*Components components = JSensors.get.components();
+ NetworkIF network = null;
+ CentralProcessor cpu = null;
+ Sensors sensors = null;
- List comps = new ArrayList<>(components.cpus);
- comps.addAll(components.disks);
- comps.addAll(components.gpus);
- comps.addAll(components.mobos);
+ @Override
+ public void load() {
+ if(sensors == null){
+ SystemInfo si = new SystemInfo();
+ HardwareAbstractionLayer hal = si.getHardware();
+ network = hal.getNetworkIFs().get(0);
+ cpu = hal.getProcessor();
+ sensors = hal.getSensors();
+ }
+ }
- if (comps != null) {
- for (final Component c : comps) {
- System.out.println("Found component: " + c.name);
- if (c.sensors != null) {
- System.out.println("Sensors: ");
+ private Font font = new Font("Calibri", Font.BOLD, 12*getScale());
- //Print temperatures
- List temps = c.sensors.temperatures;
- for (final Temperature temp : temps) {
- System.out.println(temp.name + ": " + temp.value + " C");
- }
+ @Override
+ public void render(long timeDelta, Graphics g) {
- //Print fan speed
- List fans = c.sensors.fans;
- for (final Fan fan : fans) {
- System.out.println(fan.name + ": " + fan.value + " RPM");
- }
- //Print fan speed
- List loads = c.sensors.loads;
- for (final Load load : loads) {
- System.out.println(load.name + ": " + load.value + " %");
- }
- }
- }
- }*/
- }
+ String text = "---";
+ if(sensors!=null){
+ text = Math.round(cpu.getSystemLoadAverage(1)[0]*100)+"%\n";
+ text+= sensors.getCpuTemperature();
+ }
+
+ g.setFont(font);
+ g.setColor(new Color(26, 9, 9));
+ g.drawString(text, 0, 8*getScale());
+ }
}