Hardware:16 - 80 Relais
aus JControlWiki, der freien Wissensdatenbank
Es ist tatsächlich möglich 80 Relais, mit der JCUnit anzusteuern, wie auch die Auswertung von außen zu beeinflussen.
Beschreibung (PDF Format - 407KB)
Projekte (*.zip)
Projekte
Code der Variante mit 16 Relais:
(im Projekt SN74154_OS - Ohne Simulation)
import jcontrol.io.GPIO;
import jcontrol.io.ADC;
import jcontrol.lang.ThreadExt;
public class SN74154_16 {
static final int GPIO_5 = 5;
static final int GPIO_6 = 6;
static final int GPIO_7 = 7;
static final int GPIO_8 = 8;
static final int ADC_Port0 = 0;
public int value = 0;
public SN74154_16() {
GPIO.setMode(GPIO_5, GPIO.PUSHPULL);
GPIO.setMode(GPIO_6, GPIO.PUSHPULL);
GPIO.setMode(GPIO_7, GPIO.PUSHPULL);
GPIO.setMode(GPIO_8, GPIO.PUSHPULL);
Poti1_lesen();
}
public void Poti1_lesen() {
for(;;){
value = ADC.getValue(ADC_Port0);
//###### IDE Simulator- Test #######
//value = 80; // Relais 6 Aktivieren
try {
ThreadExt.sleep(100);
} catch (InterruptedException e) {}
if(value <=15){
// 1
GPIO.setState(GPIO_5, GPIO.LOW); //SN74154 A
GPIO.setState(GPIO_6, GPIO.LOW); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
}
if(value >15 && value <= 30){
// 2
GPIO.setState(GPIO_5, GPIO.HIGH); //SN74154 A
GPIO.setState(GPIO_6, GPIO.LOW); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
}
if(value >30 && value <= 45){
// 3
GPIO.setState(GPIO_5, GPIO.LOW); //SN74154 A
GPIO.setState(GPIO_6, GPIO.HIGH); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
}
if(value >45 && value <= 60){
// 4
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.LOW);
}
if(value >60 && value <= 75){
// 5
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
if(value >75 && value <= 90){
// 6
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
if(value >90 && value <= 105){
// 7
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
if(value >105 && value <= 120){
// 8
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
if(value >120 && value <= 135){
// 9
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >135 && value <= 150){
// 10
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >150 && value <= 165){
// 11
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >165 && value <=180){
// 12
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >180 && value <=195){
// 13
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >195 && value <=210){
// 14
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >210 && value <=225){
// 15
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
if(value >225){
// 16
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
} // end: for
}
// ------------ MAIN --------------------
public static void main(String[] args)
{
new SN74154_16();
}
}
Simulationsvariante mit 16 Relais:
Code der Simulationsvariante mit 16 Relais:
(im Projekt SN74154)
import jcontrol.io.GPIO;
import jcontrol.lang.ThreadExt;
import jcontrol.io.Display;
public class SN74154_16 {
static final int GPIO_5 = 5;
static final int GPIO_6 = 6;
static final int GPIO_7 = 7;
static final int GPIO_8 = 8;
int value = 0;
Simulator sim;
Display lcd;
//SN74154 sn;
//#########################
//Nur! fur Simulation
int a1_8 = 68; //(X) Anzeigen- Koordinaten
int a9_16 = 98; //(X) Anzeigen- Koordinaten
int a1_8_Punkt = a1_8 + 13; //(X) Anzeigen- Koordinaten
int a9_16_Punkt = a9_16 + 19; //(X) Anzeigen- Koordinaten
String zeichen = "<>";
//#########################
public SN74154_16() {
GPIO.setMode(GPIO_5, GPIO.PUSHPULL);
GPIO.setMode(GPIO_6, GPIO.PUSHPULL);
GPIO.setMode(GPIO_7, GPIO.PUSHPULL);
GPIO.setMode(GPIO_8, GPIO.PUSHPULL);
lcd = new Display();
//sn = new SN74154();
//#########################
// Info
lcd.drawString("SN 74154",3,10);
lcd.drawString("Ausgangs-",3,20);
lcd.drawString("Simulation.",3,30);
lcd.drawString("=>",52,24);
lcd.drawString("( 16 Relais )",3,43);
lcd.drawRect(0,0,50,63);
//lcd.drawRect(63,0,65,63);
lcd.fillRect(63,0,65,63);
lcd.setDrawMode(Display.INVERSE);
//#########################
Poti1_lesen();
}
public void Poti1_lesen() {
sim = new Simulator();
for(;;){
value = sim.get_simValue();
lcd.drawString("A 1",a1_8,3);
lcd.drawString("A 2",a1_8,10);
lcd.drawString("A 3",a1_8,17);
lcd.drawString("A 4",a1_8,24);
lcd.drawString("A 5",a1_8,31);
lcd.drawString("A 6",a1_8,38);
lcd.drawString("A 7",a1_8,45);
lcd.drawString("A 8",a1_8,52);
lcd.drawString("A 9",a9_16,3);
lcd.drawString("A 10",a9_16,10);
lcd.drawString("A 11",a9_16,17);
lcd.drawString("A 12",a9_16,24);
lcd.drawString("A 13",a9_16,31);
lcd.drawString("A 14",a9_16,38);
lcd.drawString("A 15",a9_16,45);
lcd.drawString("A 16",a9_16,52);
try {
ThreadExt.sleep(100);
} catch (InterruptedException e) {}
if(value <=15){
// 1
GPIO.setState(GPIO_5, GPIO.LOW); //SN74154 A
GPIO.setState(GPIO_6, GPIO.LOW); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
//################################################
//####### oder einfach (siehe Beschreibung) ######
//sn.schaltePin(0,1);
lcd.drawString(" ",a9_16_Punkt,52);
lcd.drawString(zeichen,a1_8_Punkt,3);
}
if(value >15 && value <= 30){
// 2
GPIO.setState(GPIO_5, GPIO.HIGH); //SN74154 A
GPIO.setState(GPIO_6, GPIO.LOW); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
lcd.drawString(" ",a1_8_Punkt,3);
lcd.drawString(zeichen,a1_8_Punkt,10);
}
if(value >30 && value <= 45){
// 3
GPIO.setState(GPIO_5, GPIO.LOW); //SN74154 A
GPIO.setState(GPIO_6, GPIO.HIGH); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
lcd.drawString(" ",a1_8_Punkt,10);
lcd.drawString(zeichen,a1_8_Punkt,17);
}
if(value >45 && value <= 60){
// 4
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.LOW);
lcd.drawString(" ",a1_8_Punkt,17);
lcd.drawString(zeichen,a1_8_Punkt,24);
}
if(value >60 && value <= 75){
// 5
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
lcd.drawString(" ",a1_8_Punkt,24);
lcd.drawString(zeichen,a1_8_Punkt,31);
}
if(value >75 && value <= 90){
// 6
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
lcd.drawString(" ",a1_8_Punkt,31);
lcd.drawString(zeichen,a1_8_Punkt,38);
}
if(value >90 && value <= 105){
// 7
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
lcd.drawString(" ",a1_8_Punkt,38);
lcd.drawString(zeichen,a1_8_Punkt,45);
}
if(value >105 && value <= 120){
// 8
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
lcd.drawString(" ",a1_8_Punkt,45);
lcd.drawString(zeichen,a1_8_Punkt,52);
}
if(value >120 && value <= 135){
// 9
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a1_8_Punkt,52);
lcd.drawString(zeichen,a9_16_Punkt,3);
}
if(value >135 && value <= 150){
// 10
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,3);
lcd.drawString(zeichen,a9_16_Punkt,10);
}
if(value >150 && value <= 165){
// 11
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,10);
lcd.drawString(zeichen,a9_16_Punkt,17);
}
if(value >165 && value <=180){
// 12
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,17);
lcd.drawString(zeichen,a9_16_Punkt,24);
}
if(value >180 && value <=195){
// 13
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,24);
lcd.drawString(zeichen,a9_16_Punkt,31);
}
if(value >195 && value <=210){
// 14
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,31);
lcd.drawString(zeichen,a9_16_Punkt,38);
}
if(value >210 && value <=225){
// 15
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,38);
lcd.drawString(zeichen,a9_16_Punkt,45);
}
if(value >225){
// 16
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
lcd.drawString(" ",a9_16_Punkt,45);
lcd.drawString(zeichen,a9_16_Punkt,52);
}
} // end: for
}
// ------------ MAIN --------------------
public static void main(String[] args)
{
new SN74154_16();
}
// ---------- Innere Klasse ---------------------
// ---------- Simulator Thread --------------
class Simulator extends Thread {
public int sim_Value = 0;
public Simulator(){
this.start();
}
public void run() {
for(;;){
for(int i = 0; i<240; i++){
sim_Value = i;
try {
ThreadExt.sleep(50);
} catch (InterruptedException e) {}
if(sim_Value > 240){
sim_Value = 0;
i = 0;
}
}
}
}
public int get_simValue(){
return sim_Value;
}
}
}
SN74154 Klasse
import jcontrol.io.GPIO;
import jcontrol.lang.ThreadExt;
public class SN74154 {
static final int GPIO_4 = 4;
static final int GPIO_5 = 5;
static final int GPIO_6 = 6;
static final int GPIO_7 = 7;
static final int GPIO_8 = 8;
int IC = 0;
int ausgang = 0;
public SN74154() {
GPIO.setMode(GPIO_4, GPIO.PUSHPULL);
GPIO.setMode(GPIO_5, GPIO.PUSHPULL);
GPIO.setMode(GPIO_6, GPIO.PUSHPULL);
GPIO.setMode(GPIO_7, GPIO.PUSHPULL);
GPIO.setMode(GPIO_8, GPIO.PUSHPULL);
}
/**
* Methode schaltePin(int ausgang, int IC)
*
* @ausgang Ausgang (Pin) des 74154 der zu aktivieren ist.
* @IC IC der zu aktivieren ist. Erwartet: 1 oder 2.
* Für Andere eingaben nicht abgesichert!
*
*/
public void schaltePin(int ausgang, int IC){
this.IC = IC;
this.ausgang = ausgang;
if(IC==1){
GPIO.setState(GPIO_4, GPIO.HIGH);
}else if(IC==2){
GPIO.setState(GPIO_4, GPIO.LOW);
}else{
// Falsche Paraametern angabe - MACH WAS!?
}
switch(ausgang){
case 0:{
pin0();
warte();
pin15();
break;
}case 1:{
pin1();
warte();
pin15();
break;
}case 2:{
pin2();
warte();
pin15();
break;
}case 3:{
pin3();
warte();
pin15();
break;
}case 4:{
pin4();
warte();
pin15();
break;
}case 5:{
pin5();
warte();
pin15();
break;
}case 6:{
pin6();
warte();
pin15();
break;
}case 7:{
pin7();
warte();
pin15();
break;
}case 8:{
pin8();
warte();
pin15();
break;
}case 9:{
pin9();
warte();
pin15();
break;
}case 10:{
pin10();
warte();
pin15();
break;
}case 11:{
pin11();
warte();
pin15();
break;
}case 12:{
pin12();
warte();
pin15();
break;
}case 13:{
pin13();
warte();
pin15();
break;
}case 14:{
pin14();
warte();
pin15();
break;
}case 15:{
pin15();
break;
}default:{
pin15();
}
}//end: switch
}
public void warte(){
try {
ThreadExt.sleep(100);
} catch (InterruptedException e) {}
}
//####################################################
//########### Ausgang Steuerungs- Methoden ##########
//####################################################
public void pin0(){
GPIO.setState(GPIO_5, GPIO.LOW); //SN74154 A
GPIO.setState(GPIO_6, GPIO.LOW); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
}
public void pin1(){
GPIO.setState(GPIO_5, GPIO.HIGH); //SN74154 A
GPIO.setState(GPIO_6, GPIO.LOW); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
}
public void pin2(){
GPIO.setState(GPIO_5, GPIO.LOW); //SN74154 A
GPIO.setState(GPIO_6, GPIO.HIGH); //SN74154 B
GPIO.setState(GPIO_7, GPIO.LOW); //SN74154 C
GPIO.setState(GPIO_8, GPIO.LOW); //SN74154 D
}
public void pin3(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.LOW);
}
public void pin4(){
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
public void pin5(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
public void pin6(){
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
public void pin7(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.LOW);
}
public void pin8(){
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin9(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin10(){
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin11(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.LOW);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin12(){
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin13(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.LOW);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin14(){
GPIO.setState(GPIO_5, GPIO.LOW);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
public void pin15(){
GPIO.setState(GPIO_5, GPIO.HIGH);
GPIO.setState(GPIO_6, GPIO.HIGH);
GPIO.setState(GPIO_7, GPIO.HIGH);
GPIO.setState(GPIO_8, GPIO.HIGH);
}
}

