From 6e81052e38d78a3fee8367e87d8bed7df9fb0508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Ple=C3=9F?= Date: Wed, 6 Jun 2012 23:25:07 +0200 Subject: [PATCH] connected serial lib for relaisboard. Now working --- .idea/artifacts/crashteststeuerung_jar.xml | 2 + librxtxSerial.so | Bin 0 -> 154682 bytes src/META-INF/MANIFEST.MF | 2 +- src/de/ctdo/crashtest/TestClass.java | 23 ++++ .../ctdo/crashtest/domotics/IRelaisboard.java | 2 +- .../ctdo/crashtest/domotics/Relaisboard.java | 106 ++++++++++++------ src/de/ctdo/crashtest/game/TheGame.java | 19 +++- 7 files changed, 114 insertions(+), 40 deletions(-) create mode 100644 librxtxSerial.so diff --git a/.idea/artifacts/crashteststeuerung_jar.xml b/.idea/artifacts/crashteststeuerung_jar.xml index a91aff4..f9aabe3 100644 --- a/.idea/artifacts/crashteststeuerung_jar.xml +++ b/.idea/artifacts/crashteststeuerung_jar.xml @@ -14,6 +14,8 @@ + + \ No newline at end of file diff --git a/librxtxSerial.so b/librxtxSerial.so new file mode 100644 index 0000000000000000000000000000000000000000..e60c5e674cd579c79fb4654f280c80d528a3cda4 GIT binary patch literal 154682 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 literal 0 HcmV?d00001 diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF index a44ebd4..d15802b 100644 --- a/src/META-INF/MANIFEST.MF +++ b/src/META-INF/MANIFEST.MF @@ -1,3 +1,3 @@ Manifest-Version: 1.0 -Main-Class: de.ctdo.crashtest.SteuerungFrame +Main-Class: de.ctdo.crashtest.Steuerung diff --git a/src/de/ctdo/crashtest/TestClass.java b/src/de/ctdo/crashtest/TestClass.java index 878f2bf..9a74739 100644 --- a/src/de/ctdo/crashtest/TestClass.java +++ b/src/de/ctdo/crashtest/TestClass.java @@ -1,5 +1,7 @@ package de.ctdo.crashtest; +import de.ctdo.crashtest.domotics.IRelaisboard; +import de.ctdo.crashtest.domotics.Relaisboard; import de.ctdo.crashtest.mpd.IMPDController; import de.ctdo.crashtest.mpd.MPDController; @@ -11,8 +13,29 @@ public class TestClass { public static void main(String args[]) throws InterruptedException { + IRelaisboard board = new Relaisboard("/dev/ttyUSB0"); + board.open(); + + /* + board.setRelais(1,false); + //board.setRelais(1, true); + + board.toggleRelais(1, 500); + Thread.sleep(1000); + board.toggleRelais(1, 500); + Thread.sleep(1000); + board.toggleRelais(1, 500); + + //board.setRelais(1, false); + + Thread.sleep(4000); */ + + board.blinkRelais(2, 500, 6); // hint Button + + Thread.sleep(6000); + board.close(); } diff --git a/src/de/ctdo/crashtest/domotics/IRelaisboard.java b/src/de/ctdo/crashtest/domotics/IRelaisboard.java index 0baee89..2bcbfaa 100644 --- a/src/de/ctdo/crashtest/domotics/IRelaisboard.java +++ b/src/de/ctdo/crashtest/domotics/IRelaisboard.java @@ -4,7 +4,7 @@ public interface IRelaisboard { void setRelais(final int relais, final boolean state); void toggleRelais(final int relais, final int milliseconds); - + void blinkRelais(final int relais, final int pause, final int count); boolean open(); void close(); diff --git a/src/de/ctdo/crashtest/domotics/Relaisboard.java b/src/de/ctdo/crashtest/domotics/Relaisboard.java index 1e4d921..5b482da 100644 --- a/src/de/ctdo/crashtest/domotics/Relaisboard.java +++ b/src/de/ctdo/crashtest/domotics/Relaisboard.java @@ -11,38 +11,34 @@ public class Relaisboard implements IRelaisboard { private OutputStream outputStream; private Boolean serialPortGeoeffnet = false; private String portName = "/dev/ttyUSB0"; + private Object mLock = new Object(); public Relaisboard(final String port) { this.portName = port; } - private synchronized void send(final char ch) { - if (!serialPortGeoeffnet) return; - - try { - outputStream.write(ch); - } catch (IOException e) { - Logger.sLog("Fehler beim Senden"); - } - } - private void sendData(final int relais, final boolean state) { - if(relais >= 0 && relais < 8) { + if(relais >= 0 && relais < 8 && outputStream != null) { char charsOff[] = { 'a','b','c','d','e','f','g','h' }; char charsOn[] = { 'A','B','C','D','E','F','G','H' }; - if(state) { - send(charsOn[relais]); - } else { - send(charsOff[relais]); + try { + if(state) { + outputStream.write(charsOn[relais]); + } else { + outputStream.write(charsOff[relais]); + } + + outputStream.flush(); + } catch (IOException e) { + Logger.sLog("Fehler beim Senden"); } } } @Override - public boolean open() - { + public boolean open() { serialPortGeoeffnet = false; Boolean foundPort = false; @@ -100,33 +96,73 @@ public class Relaisboard implements IRelaisboard { public void setRelais(final int relais, final boolean state) { if(!serialPortGeoeffnet) return; - Runnable r = new Runnable() { - @Override - public void run() { - sendData(relais, state); - } - }; + synchronized (mLock) { + Runnable r = new Runnable() { + @Override + public void run() { + sendData(relais, state); + } + }; - new Thread(r).start(); + new Thread(r).start(); + } } @Override public void toggleRelais(final int relais, final int milliseconds) { if(!serialPortGeoeffnet) return; - Runnable r = new Runnable() { - @Override - public void run() { - sendData(relais, true); + synchronized (mLock) { + Runnable r = new Runnable() { + @Override + public void run() { + sendData(relais, true); - try { - Thread.sleep(milliseconds); - } catch (InterruptedException e) { } + try { + Thread.sleep(milliseconds); + } catch (InterruptedException e) { + e.printStackTrace(); + } - sendData(relais, false); - } - }; + sendData(relais, false); + } + }; - new Thread(r).start(); + new Thread(r).start(); + } + } + + @Override + public void blinkRelais(final int relais, final int pause, final int count) { + if(!serialPortGeoeffnet) return; + + synchronized (mLock) { + Runnable r = new Runnable() { + @Override + public void run() { + int i; + + for(i = 0; i< count; i++) { + sendData(relais, true); + + try { + Thread.sleep(pause); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + sendData(relais, false); + + try { + Thread.sleep(pause); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }; + + new Thread(r).start(); + } } } diff --git a/src/de/ctdo/crashtest/game/TheGame.java b/src/de/ctdo/crashtest/game/TheGame.java index a0f9e54..2a4b938 100644 --- a/src/de/ctdo/crashtest/game/TheGame.java +++ b/src/de/ctdo/crashtest/game/TheGame.java @@ -12,6 +12,7 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent private IStatemachine machine; private IBuntiClient bunti; private IMPDController mpdController; + private IRelaisboard relaisboard; public TheGame(IGuiControl guiControl) { this.guiControl = guiControl; @@ -19,7 +20,8 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent this.ircClient = new IrcClient("crashtest", "#crashtest","irc.hackint.eu"); this.bunti = new BuntiClient("bunti.ctdo.de", 8080); this.mpdController = new MPDController("dampfradio.raum.ctdo.de"); - this.machine = new Statemachine(); + this.relaisboard = new Relaisboard("/dev/ttyUSB0"); + this.machine = new Statemachine(); initGame(); } @@ -30,6 +32,8 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent machine.addListener(this); machine.reset(); + relaisboard.open(); + relaisboard.toggleRelais(2, 2000); } @@ -45,11 +49,12 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent switch (newState) { case IDLE: machine.stopTimer(); + guiControl.setExtra(""); + guiControl.setWall(""); mpdController.setVolume(45); mpdController.playSong("start", "mix"); - bunti.setPar56(0,0,0); bunti.setLampel(false,false,false); @@ -68,6 +73,8 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent machine.startTimer(60*8); break; case TABLE_GAME_ONE: + guiControl.setWall("64K RAM SYSTEM 38911 BASIC BYTES FREE. **** COMMODORE 64 BASIC V2 ****"); + mpdController.setVolume(70); mpdController.playSong("K2", "Der Berg Ruft"); @@ -120,6 +127,9 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent guiControl.showCountDown(true); machine.pauseTimer(true); sayScore(); + + relaisboard.blinkRelais(2, 500, 6); // hint Button + break; case ROKET_STARTED: mpdController.setVolume(50); @@ -131,6 +141,8 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent ircClient.say("table game complete, r0kets now"); + relaisboard.toggleRelais(0, 300); + guiControl.showCountDown(true); machine.startTimer(7*60); break; @@ -163,7 +175,7 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent @Override public void keyPress(char key) { machine.handleInput(key); - guiControl.setExtra("btn: " + key); + //guiControl.setExtra("btn: " + key); } @@ -175,6 +187,7 @@ public class TheGame implements StatemachineListener, GuiEventListener, IRCEvent machine.reset(); bunti.setPar56(0xff,0xff,0xff); ircClient.say("bye"); + relaisboard.close(); } /**