Software:Lichtlauf Beilspiel

aus JControlWiki, der freien Wissensdatenbank

In diesem Artikel möchte ich, ein Lichtlauf Beilspiel präsentieren.


Inhaltsverzeichnis

Lichtlauf


Bild:info_lichtlauf.jpg

Download


Projekt (zip)

Beschreibung:


1. Startet den Links – Rechts Lauf.

2. Startet den Rechts – Links Lauf.

3. Startet den Innen – Aussen Lauf.

4. Startet den Aussen – Innen Lauf.

5. Wenn Aktiv, – Dauerlauf (Unendlich)

AHTUNG! Um den Dauerlauf zu beenden und in den „Auswahl Modus“ zurück zu kehren drücken Sie etwas länger auf den Down Button. (’D’)

6. Kurze Info zur Aktuellen Auswahl.

7. Wiederholungsfaktor Anzeige (wie oft soll der Lauf wiederholt werden)

8. Stellt den Wiederholungsfaktor ein.

9. Geschwindigkeit Anzeige.

10. Stellt die Geschwindigkeit ein.


Code Lichtlauf:


import jcontrol.io.GPIO;
import jcontrol.lang.ThreadExt;
//import java.io.IOException; // für Resource - (*.jcif) - Variante
import jcontrol.ui.vole.Label;
//import jcontrol.io.Resource; // für Resource - (*.jcif) - Variante
import jcontrol.ui.vole.event.ActionEvent;
import jcontrol.ui.vole.event.ActionListener;
import jcontrol.ui.vole.Frame;
import jcontrol.ui.vole.Slider;
import jcontrol.ui.vole.CheckBox;
import jcontrol.io.Keyboard; 
import jcontrol.io.Display;

   /**
   	* Lichtlauf 
 	*/
	public class Lichtlauf extends Frame implements ActionListener { 

	Slider s_geschwindigkeit, s_durchlaufszeit;
	CheckBox c_loop;
	Label info, animation, durchlaufszeit;
	// Label hint; // für hint.jcif
	Keyboard keyboard;	
			
	Thread_Lauf tl_RL, tl_LR, tl_IA, tl_AI;
	MyButton lr_button, rl_button, ia_button, ai_button;
    TempoAnimation ta; 
    Focus_Lauscher fl;
    Display lcd;
    
    public static final int GPIO_MIN = 0;
 	public static final int GPIO_MAX = 8;
    
	// Dauerlauf Identifikator	
	public boolean while_benden;
	// Thread (Methodenausfuerung) Identifikator
	public boolean m_Aktiviert = false;


  	// Konstruktor  
    public Lichtlauf() {
    
     	for(int i = GPIO_MIN; i<=GPIO_MAX; i++)
     	GPIO.setMode(i, GPIO.PUSHPULL);
     	    	
     	jcontrol.io.Backlight.setBrightness(250);   	
     	keyboard = new Keyboard();
     	lcd = new Display();
     	
     	// Hintergrund Bild  
     	lcd.drawImage(new String[] {
		"\uFFFF\uFF1F\u0F07\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0F1F\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\u0703\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0103\u07FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFC0\u8000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u80C0\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFEFC\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF838\u1808\u0808\u0808\u0808\u0808\u0808\u0808\u0808\u081C\u3EFF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFF0F\u0703\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u070F\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFF7F\u3F1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1C\u1810\uF010\u1010\uF010\u1010\uF010\u1010\uF010\u1038\u7CFF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFE0\uC080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\uC0E0\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFF00\u0000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u00FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFF07\u0301\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0307\uFFFF\uFFFF\uFFFF\u3F1F\u0F07\u0707\u0707\u0707\u0F1F\u0F07\u0707\u07FF\uFFFF\uFFFF\uFEFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7CFE\uFFFF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFF0\uE0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uE0F0\uFFFF\uFFFF\uFFFF\uF8E0\uC080\u8080\u8080\u80C0\uE0E0\uC080\u8080\uC0FF\uFFFF\uFFFF\uFFFF\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uF160\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u40E0\uF1FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFF03\u0100\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0103\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFF01\u0000\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u01FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFF8\uF0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uF0F8\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFC\uF8F0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F8\uFCFF\uFFFF\uFFFF\uFFFF"},0,0);
		
     	
     	/**
     	 * Resource - (*.jcif) - Variante
     	 * MyButton Klasse, wie auch dementsprechend alle String[] Bilde
     	 * ist / sind bei der Resource Variante überflüssig.
     	 */
     	 
     	/*
     	try {  
      	hint = new Label(new Resource("hint.jcif"),0,0 );
    	} catch (IOException e) {}    	
    	this.add(hint);  	

    	try { 
         lr_button = new Button(new Resource("LR.jcif"), 5, 4, 29, 11);
         rl_button = new Button(new Resource("RL.jcif"), 5, 19, 29, 11);
         ia_button = new Button(new Resource("IA.jcif"), 5, 34, 29, 11);
         ai_button = new Button(new Resource("AI.jcif"), 5, 49, 29, 11);       
        } catch (IOException e) {}
        */
        
        lr_button = new MyButton(new String[] {
	"\u0000\u0082\uC6EE\u7C38\u1000\u0000\u0000\u0000\u0000\u82C6\uEE7C\u3810\u0000\u0000",
	"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"}, 5, 4, 29, 11);
        
        rl_button = new MyButton(new String[] {
	"\u0000\u0010\u387C\uEEC6\u8200\u0000\u0000\u0000\u0000\u1038\u7CEE\uC682\u0000\u0000",
	"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"}, 5, 19, 29, 11);

        ia_button = new MyButton(new String[] {
	"\u0000\u0082\uC6EE\u7C38\u1000\u0000\u0000\u0000\u0000\u1038\u7CEE\uC682\u0000\u0000",
	"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"}, 5, 34, 29, 11);
        
        ai_button = new MyButton(new String[] {
	"\u0000\u0082\uC6EE\u7C38\u1000\u0000\u0000\u0000\u0000\u1038\u7CEE\uC682\u0000\u0000",
	"\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"}, 5, 49, 29, 11); 

        
     	s_geschwindigkeit = new Slider(65, 49, 55, 50, 500, 50);
     	s_geschwindigkeit.setValue(230);
     	s_durchlaufszeit = new Slider(65, 23, 55, 1, 10, 1);
     	c_loop = new CheckBox(">",44,36,0,0);
 
        animation = new Label("",90,39,29,7,Label.ALIGN_CENTER);
     	this.add(animation);
     	durchlaufszeit = new Label("",105,13,13,7,Label.ALIGN_CENTER);
        this.add(durchlaufszeit);       
        info = new Label(" ",54,3,66,8,Label.ALIGN_CENTER);
        this.add(info);

    	this.add(lr_button); 
    	this.add(rl_button);
    	this.add(ia_button);
    	this.add(ai_button);
     	this.add(s_geschwindigkeit);
     	this.add(s_durchlaufszeit);
     	this.add(c_loop);
     	lcd.fillRect(54,35,10,12);
     	

        lr_button.setActionListener(this); 
        rl_button.setActionListener(this);
        ia_button.setActionListener(this);
        ai_button.setActionListener(this);
      
        s_geschwindigkeit.setActionListener(this);  
        s_durchlaufszeit.setActionListener(this); 
          	
     	ta = new TempoAnimation(); 
     	fl = new Focus_Lauscher(lcd); 
     	
     	this.show();
    }


	// ----------- Event handler ------------
	public void onActionEvent(ActionEvent event) {

    if (event.getType() == ActionEvent.BUTTON_PRESSED) {     
      if (event.getSource() == lr_button && m_Aktiviert != true){
      	m_Aktiviert = true;
        tl_RL = new Thread_Lauf(this, 1);
      }if (event.getSource() == rl_button && m_Aktiviert != true){
      	m_Aktiviert = true;
        tl_LR = new Thread_Lauf(this, 2);
      }if (event.getSource() == ia_button && m_Aktiviert != true){
      	m_Aktiviert = true;
      	tl_IA = new Thread_Lauf(this, 3);
      }if (event.getSource() == ai_button && m_Aktiviert != true){
      	m_Aktiviert = true; 
      	tl_AI = new Thread_Lauf(this, 4);
      }}}
      
    
    // ------------ MAIN --------------------
    public static void main(String[] args) 
    { 
    	new Lichtlauf();
    }
    
    // ---------- Innere Klasse -------------------
    // ---------- TempoAnimation Thread -----------
    class TempoAnimation extends Thread {
    
    	public TempoAnimation(){
    	this.start();
    	}
    	
    	public void run() {
    	
    	for(;;){
        animation.setLabel("> > > > >", true);   
    	try 
        { ThreadExt.sleep(s_geschwindigkeit.getValue());
    	} catch (InterruptedException e) {}   	
    	animation.setLabel("  > > > >> ", true);  	
    	try 
        { ThreadExt.sleep(s_geschwindigkeit.getValue());
    	} catch (InterruptedException e) {}
    	 	
    	durchlaufszeit.setLabel(String.valueOf(s_durchlaufszeit.getValue()),true);  	
    	}}}
    
    // ---------- Innere Klasse --------------------- 
    // ---------- FocusLauscher Thread --------------
    class Focus_Lauscher extends Thread {
   
    	public Focus_Lauscher(Display lcd){
    	this.start();
    	} 
    	 
     	public void run() {

     	// Hintergrund Bild (repaint) 
     	lcd.drawImage(new String[] {
		"\uFFFF\uFF1F\u0F07\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0707\u0F1F\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\u0703\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0103\u07FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFC0\u8000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u80C0\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFEFC\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF8F8\uF838\u1808\u0808\u0808\u0808\u0808\u0808\u0808\u0808\u081C\u3EFF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFF0F\u0703\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u0303\u070F\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFF7F\u3F1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1F\u1F1F\uFF1C\u1810\uF010\u1010\uF010\u1010\uF010\u1010\uF010\u1038\u7CFF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFE0\uC080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\u8080\uC0E0\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFF00\u0000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u8000\u0000\u00FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFF07\u0301\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0307\uFFFF\uFFFF\uFFFF\u3F1F\u0F07\u0707\u0707\u0707\u0F1F\u0F07\u0707\u07FF\uFFFF\uFFFF\uFEFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\uFCFC\uFFFC\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7C7C\u7F7C\u7CFE\uFFFF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFF0\uE0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uC0C0\uE0F0\uFFFF\uFFFF\uFFFF\uF8E0\uC080\u8080\u8080\u80C0\uE0E0\uC080\u8080\uC0FF\uFFFF\uFFFF\uFFFF\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uFF7F\u7F7F\uF160\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u4040\uC040\u40E0\uF1FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFF03\u0100\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0103\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFF01\u0000\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u0300\u0000\u01FF\uFFFF\uFFFF\uFFFF",
		"\uFFFF\uFFF8\uF0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uE0E0\uF0F8\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFF\uFFFC\uF8F0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F0\uFEF0\uF0F8\uFCFF\uFFFF\uFFFF\uFFFF"},0,0);

     	synchronized (this) {
    	for(;;){
    		
       	if(focusOwner == lr_button){
       	/*
       	 * Version 1
		 * g.drawRect(6, 5, 28, 10);
		 * g.drawRect(6, 5, 2, 9);
		 * g.drawRect(17, 8, 3, 3);
		 */
		// Version 2 (Rollover Button)
		lr_button.g.drawImage(new String[] {
		"\uFFFF\uFF7D\u3911\u83C7\uEFFF\uFFFF\uFFFF\uFFFF\uFFFF\u7D39\u1183\uC7EF\uFFFF\uFF00",
		"\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0100"}, 5, 4, 29, 10,0,0);	
       	info.setLabel("Links Rechts Start",true);
       	} else if(focusOwner == rl_button){
       	
       	/*
       	 * Version 1
       	 * g.drawRect(6, 20, 28, 10);
       	 * g.drawRect(6, 20, 2, 9);      	
       	 * g.drawRect(17, 23, 3, 3);
       	 */
       	// Version 2 (Rollover Button)
       	rl_button.g.drawImage(new String[] {
		"\uFFFF\uFFEF\uC783\u1139\u7DFF\uFFFF\uFFFF\uFFFF\uFFFF\uEFC7\u8311\u397D\uFFFF\uFF00",
		"\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0100"}, 5, 19, 29, 10,0,0); 
       	info.setLabel("Rechts Links Start",true);
       	} else if(focusOwner == ia_button){
       	
       	/*
       	 * Version 1
       	 * g.drawRect(6, 35, 28, 10);
       	 * g.drawRect(6, 35, 2, 9);
       	 * g.drawRect(17, 38, 3, 3); 
       	 */ 
       	// Version 2 (Rollover Button)
       	ia_button.g.drawImage(new String[] {
		"\uFFFF\uFFEF\uC783\u1139\u7DFF\uFFFF\uFFFF\uFFFF\uFFFF\u7D39\u1183\uC7EF\uFFFF\uFF00",
		"\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0100"}, 5, 34, 29, 10,0,0);    	
       	info.setLabel("Innen Aussen Start",true);
       	} else if(focusOwner == ai_button){
       	
       	/*
       	 * Version 1
       	 * g.drawRect(6, 50, 28, 10);
       	 * g.drawRect(6, 50, 2, 9);    	
       	 * g.drawRect(17, 53, 3, 3); 
       	 */ 
       	// Version 2 (Rollover Button)
       	ai_button.g.drawImage(new String[] {
		"\uFFFF\uFF7D\u3911\u83C7\uEFFF\uFFFF\uFFFF\uFFFF\uFFFF\uEFC7\u8311\u397D\uFFFF\uFF00",
		"\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0101\u0100"}, 5, 49, 29, 10,0,0);
       	info.setLabel("Aussen Innen Start",true);
       	} else if(focusOwner == s_durchlaufszeit){
       	info.setLabel("Durchlaufsfaktor",true);
       	} else if(focusOwner == s_geschwindigkeit){
       	info.setLabel("Geschwindigkeit",true);
       	} else if(focusOwner == c_loop && c_loop.getState()){
       	info.setLabel("Dauerlauf Aktiv !",true);
       	lcd.fillRect(54,35,10,12);
       	} else if(focusOwner == c_loop && !c_loop.getState()){
       	info.setLabel("Dauerlauf Inaktiv",true);
       	lcd.fillRect(54,35,10,12);
       	} else {      	 	
       	info.setLabel("",true);
       	}

       	try 
        { ThreadExt.sleep(100);
    	} catch (InterruptedException e) {} 
       }}}}
           
      
     // ---------- Innere Klasse --------------
     // ---------- Thread_Lauf Thread ---------
     public class Thread_Lauf extends Thread{
 
 		int methode;
 		Lichtlauf parent;

    	public Thread_Lauf(Lichtlauf parent, int methode) {
    	this.parent = parent;  	
    	this.methode = methode;
    	this.start();
    	} 
    	 
    	public void run() {
    	  	
    		switch ( methode ){
    		case 1:{
    		if(m_Aktiviert)
      		lR(s_durchlaufszeit.getValue());
      		break;
      		}case 2:{ 
      		if(m_Aktiviert) 
      		rL(s_durchlaufszeit.getValue());
      		break;
      		}case 3:{
      		if(m_Aktiviert) 
      		iA(s_durchlaufszeit.getValue());
      		break;
      		}case 4:{
      		if(m_Aktiviert) 
      		aI(s_durchlaufszeit.getValue());
      		break; 
    		}}}
    		
 		// ----------- METHODEN ----------   
    	// von links nach rechts 		
    	public void lR(int loop){
		while_benden = false;
    	// Lauflicht LR	
    	if(!c_loop.getState()){ 
    	for(int c =0; c<loop; c++ ) {
     	for(int i=GPIO_MIN; i<=GPIO_MAX; i++)
     	{
     	    GPIO.setState(i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
			Warte();
		}}
		m_Aktiviert = false;
		}else { 
			lr_button.setActionListener(null);
		 	while(!while_benden){	 	
		 	//char c = keyboard.getKey();
		 	//etwas laenger gedrueckt halten
		 	if(break_loop()=='D'){
		 	m_Aktiviert = false;	 	
		 	while_benden = true;
		 	lr_button.setActionListener(parent);
		 	}	 	
		 	for(int i=GPIO_MIN; i<=GPIO_MAX; i++)
     		{
     	    GPIO.setState(i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
			Warte();		 
		 	}}}}
  
     	// von recht nach links    
    	public void rL(int loop){
    	while_benden = false;    	 	
    	// Lauflicht RL
    	if(!c_loop.getState()){
    	for(int c =0; c<loop; c++ ) {     
     	for(int i=GPIO_MAX; i>=GPIO_MIN; i--)
     	   {
     	    GPIO.setState(i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
			Warte(); 
    	}}
    	m_Aktiviert = false;
		 }else {
		 	rl_button.setActionListener(null);
		 	while(!while_benden){
		 	//char c = keyboard.getKey();
		 	//etwas laenger gedrueckt halten
		 	if(break_loop()=='D'){
		 	m_Aktiviert = false;
		 	while_benden = true;
		 	rl_button.setActionListener(parent);
		 	}
		 	for(int i=GPIO_MAX; i>=GPIO_MIN; i--)
     	   {
     	    GPIO.setState(i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
			Warte(); 
    	}}}}

     	// von aussen nach innen
    	public void aI(int loop){
    	while_benden = false; 
    	// Lauflicht AI
    	if(!c_loop.getState()){
    	for(int c =0; c<loop; c++ ) { 
     	for(int i=GPIO_MIN; i<=4; i++)
     	{
     	    GPIO.setState(i, GPIO.HIGH);
     	    GPIO.setState(GPIO_MAX-i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
    	    GPIO.setState(GPIO_MAX-i, GPIO.LOW);
			Warte(); 
    	}}
    	m_Aktiviert = false;
		 }else {
		 	ai_button.setActionListener(null);
		 	while(!while_benden){
		 	//char c = keyboard.getKey();
		 	//etwas laenger gedrueckt halten
		 	if(break_loop()=='D'){
		 	m_Aktiviert = false;
		 	while_benden = true;
		 	ai_button.setActionListener(parent);
		 	}
		 	for(int i=GPIO_MIN; i<=4; i++)
     	   {
     	    GPIO.setState(i, GPIO.HIGH);
     	    GPIO.setState(GPIO_MAX-i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
    	    GPIO.setState(GPIO_MAX-i, GPIO.LOW);
			Warte(); 
    	}}}} 
    	
     	// von innen nach aussen
    	public void iA(int loop){
    	while_benden = false; 
    	// Lauflicht IA
    	if(!c_loop.getState()){
    	for(int c =0; c<loop; c++ ) { 
     	for(int i=4; i>=GPIO_MIN; i--)
     	   {
     	    GPIO.setState(i, GPIO.HIGH);
     	    GPIO.setState(GPIO_MAX-i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
    	    GPIO.setState(GPIO_MAX-i, GPIO.LOW);
			Warte(); 
    	}}
    	m_Aktiviert = false;
		 }else {
		 	ia_button.setActionListener(null);
		 	while(!while_benden){
		 	//char c = keyboard.getKey();
		 	//etwas laenger gedrueckt halten
		 	if(break_loop()=='D'){
		 	m_Aktiviert = false;
		 	while_benden = true;
		 	ia_button.setActionListener(parent);
		 	}
		 	for(int i=4; i>=GPIO_MIN; i--)
     	   {
     	    GPIO.setState(i, GPIO.HIGH);
     	    GPIO.setState(GPIO_MAX-i, GPIO.HIGH);
			Warte();
    	    GPIO.setState(i, GPIO.LOW);
    	    GPIO.setState(GPIO_MAX-i, GPIO.LOW);
			Warte(); 
    	}}}}  	
    	
		// Methode Warte
		void Warte()
		{
        try 
        { ThreadExt.sleep(s_geschwindigkeit.getValue());
    	} catch (InterruptedException e) {}
		}
		
		synchronized char break_loop(){
		char c = keyboard.getKey();
		return c;
		}
		
	   }
	  }

    

Code MyButton:


import jcontrol.ui.vole.Button;
import jcontrol.ui.vole.Container;

	/**
	 * Die Eigene Button Klasse ist eigentlich "nur" für Darstellung
	 * der String [] Bilder gedacht, die als Java im Code integriert sein dürfen.
	 * (Damit das Beispiel auch ohne der *.jcif Resource sofort ausführbar sein kann)
	 *
	 * Hier Vielen Dank an den Autor der MyButton Klasse: 
	 * Thomas Röbbenack 
	 * Software-Entwicklung  / DOMOLOGIC 
	 */

public class MyButton extends Button {
   
    String m_myImage[] = null;

    public MyButton(Object label, int x, int y, int width, int height) {
        super(label, x, y, width, height);
        if ( label instanceof String[] ) {
            m_myImage = (String[])label;
        }
    }
    

    public void paint() {

        // g und visible stammen von der geerbten Klasse "Component"
        if (g == null || !visible)  { return; }
        
        // zeichnet den Button, falls das Label nicht vom Typ "String" oder "Resource"
        // ist, dann wird ein leerer Button gezeichnet
        super.paint();
       
        // Nun folgt die eigene Implementierung!
        synchronized (g) {
             if (g != null && !Container.isCovered(this)) {
                 if (null != m_myImage) {
                     // was auch immer angezeigt werden soll,
                     //    hier folgt Ihr persönlicher Code
                     // ( die Variablen "x, y, width, height" stammen hierbei vom
                     //     geerbtem "Component")
                     g.drawImage( m_myImage, x, y+1, width, height,0,0);
                     super.g.drawRect(x, y, width, height);                               		
                 } // end: if
             } // end: if
        } // end: synchronized
    }
} 

    

Das Lichtlaufsbeispiel, benötig also in seinem „src“ Verzeichnis die beiden:
- Lichtlauf
- MyButton
Klassen.

'Persönliche Werkzeuge