kramann.info
© Guido Kramann

Login: Passwort:










EmbSyst
1 day_by_day
2 Eingebettete_Systeme
..2.1 Softwareentwicklung
....2.1.1 AgileSoftwareentwicklung
....2.1.2 Verhalten
....2.1.3 Entwurfsmuster
....2.1.4 FuzzyRegler
....2.1.5 Uebung
..2.2 Arduino
....2.2.1 Uebung1
..2.3 Android
....2.3.1 UML
......2.3.1.1 Volumenberechnung
......2.3.1.2 UML_Klassendiagramm
......2.3.1.3 Konstruktor
......2.3.1.4 Statische_Variable
....2.3.2 bluej
....2.3.3 Threads
....2.3.4 Interfacedesign
....2.3.5 Android
......2.3.5.1 Getting_Started
......2.3.5.2 App
......2.3.5.3 Beispielprojekt
........2.3.5.3.1 Richtlinien
........2.3.5.3.2 Anforderungen
........2.3.5.3.3 Layout
........2.3.5.3.4 Projekt_einrichten
........2.3.5.3.5 Refactoring
........2.3.5.3.6 Icon
........2.3.5.3.7 Icon2
........2.3.5.3.8 Kurzanleitung
........2.3.5.3.9 Architektur
........2.3.5.3.10 Anwendungsklasse
......2.3.5.4 Threads
......2.3.5.5 Activities
......2.3.5.6 Was_ist_wo
......2.3.5.7 Regelungssysteme
........2.3.5.7.1 Servo
........2.3.5.7.2 Fahrzeug
......2.3.5.8 ADB_Apps
......2.3.5.9 Veroeffentlichen
......2.3.5.10 Einzelheiten
........2.3.5.10.1 Bildschirmaufloesung
........2.3.5.10.2 Parameter
........2.3.5.10.3 Permission
........2.3.5.10.4 Latenzzeit
......2.3.5.11 Tonerkennung
........2.3.5.11.1 Wahrscheinlichkeitsrechnung
........2.3.5.11.2 Kovarianz_Scilab
........2.3.5.11.3 Java_Threads
........2.3.5.11.4 Java_Reflection
....2.3.6 Processing
......2.3.6.1 Installation
......2.3.6.2 Erste_Schritte
......2.3.6.3 Mechatronik
......2.3.6.4 Bibliotheken
......2.3.6.5 Uebung
......2.3.6.6 Snippets
........2.3.6.6.1 Dateioperationen
........2.3.6.6.2 Bilder
........2.3.6.6.3 GUI
........2.3.6.6.4 Text
........2.3.6.6.5 PDF
........2.3.6.6.8 Maus
........2.3.6.6.10 Zeit
........2.3.6.6.13 Animation
........2.3.6.6.15 Simulation
......2.3.6.7 Referenzen
....2.3.7 Android_Processing
......2.3.7.1 Basics
......2.3.7.2 Einrichten
......2.3.7.3 Crossplattform
......2.3.7.4 sinus
......2.3.7.5 sample
......2.3.7.6 analyse
......2.3.7.7 synthese
......2.3.7.8 Hilfsapps
......2.3.7.9 Eigene_Library
....2.3.8 Processing_VR
....2.3.9 Shapes3D
....2.3.10 TextToSpeech
....2.3.11 Internetprogrammierung
......2.3.11.1 Codegenerierung
......2.3.11.2 PHP_Programmierung
......2.3.11.3 PHP_OOP
......2.3.11.4 Java
......2.3.11.5 UDP
......2.3.11.6 Internetkontrolle
........2.3.11.6.1 Kamerabild
....2.3.12 OSC
......2.3.12.1 Datenaustausch
......2.3.12.2 i2audiolab
......2.3.12.3 Ardour
....2.3.13 Netzwerkprogrammierung
....2.3.14 JNI
....2.3.15 Erweitern
......2.3.15.1 sprich
......2.3.15.2 spiel
....2.3.16 thbvr
....2.3.17 Reflection
....2.3.18 Script
....2.3.19 Java3D
3 Echtzeitprogrammierung
..3.1 Echtzeit
..3.2 Korrektheit
..3.2 Semaphoren
..3.3 Hardware
..3.5 Synchronprogramm
..3.6 Zustandsmaschine
..3.7 Arduino
....3.7.1 Uebung
....3.7.2 RTOS
....3.7.3 Scheduler
....3.7.4 Semaphor
......3.7.4.1 Laufkatze
......3.7.4.2 Java
......3.7.4.3 Semaphor
....3.7.5 Messages
..3.8 Android
....3.8.2 Threads
......3.8.2.1 Java
......3.8.2.2 Synchronisierung
..3.9 Petrinetze
....3.9.1 Installation
....3.9.2 Test
4 KI
..4.1 Unueberwachtes_Lernen
..4.2 Agentensysteme
....4.2.1 Architekturen
......4.2.1.1 Verhalten
......4.2.1.2 Entwurfsmuster
....4.2.2 SUMO
......4.2.2.1 GettingStarted
......4.2.2.2 Antrieb
......4.2.2.3 Sensoren
......4.2.2.4 Zeitbasis
......4.2.2.5 Fernsteuerung
......4.2.2.6 Umsetzung_Fernst
......4.2.2.7 Fernsteuerung3
......4.2.2.10 Umsetzung
......4.2.2.11 Sockelsoftware
......4.2.2.12 Plan
......4.2.2.13 Lernen
........4.2.2.13.1 Parameter
........4.2.2.13.2 Identifikation
........4.2.2.13.3 Java
..4.3 Genetische_Algorithmen
....4.3.1 Heuristiken
....4.3.2 Genalgorithmus
..4.4 Kalmanfilter
....4.4.1 Vorarbeit
....4.4.2 Minimalversion
....4.4.3 Beispiel
5 Bildverarbeitung
..5.1 Gestalttheorie
..5.2 Bildverarbeitung
6 Technische_Systeme
..6.1 Kulturgeschichte
..6.2 Technikphilosophie
..6.3 Anthropozaen
7 Literatur
kramann.info
© Guido Kramann

Login: Passwort:




Android-Android

(EN google-translate)

(PL google-translate)

Nexus7-Tablet mit Fahrwerk aus vier "gehackten" Servos

  • Die Stereokanäle des Audioausgangs liefern zwei verschiedene PWM-Signale: linke Fahrzeugseite / rechte Fahrzeugseite
  • Die Eingänge beider Servos einer Seite sind miteinander verbunden.
  • Die Stromversorgung erfolgt über eine geregelte 5 Volt Quelle.

Ansichten des Fahrwerks ohne Tablet

Fahrwerk ohne Tablet a)

Bild 0-1: Fahrwerk ohne Tablet a)

Fahrwerk ohne Tablet b)

Bild 0-2: Fahrwerk ohne Tablet b)

Fahrwerk ohne Tablet c)

Bild 0-3: Fahrwerk ohne Tablet c)

Ansichten des Fahrwerks mit verbundenem Tablet

Fahrwerk mit Tablet a)

Bild 0-4: Fahrwerk mit Tablet a)

Fahrwerk mit Tablet b)

Bild 0-5: Fahrwerk mit Tablet b)

Fahrwerk mit Tablet c)

Bild 0-6: Fahrwerk mit Tablet c)

package processing.test.avrconnect1;

import processing.core.*; 

import android.media.AudioTrack;
import android.media.AudioFormat;
import android.media.AudioManager;

//Neuerungen:
//STEREO
//Auswahl der PWM-Kombis über Touchscreen:
//
//            1
//
//    3       0       4
//
//            2
//
//            PWM_LINKS      PWM_RECHTS
//
//0  Stopp    66             66
//1  Vor      88             88
//2  Zurück   44             44
//3  links    44             88
//4  rechts   88             44
//

public class avrconnect1 extends PApplet 
{

//NEU:
	
//Aktueller Zustand:	
int ZUSTAND = 0;	
//Zuordnung verschiedener Zustände zu den PWM-Werten
int[][] ZUORDNUNG = {
                        {66,66},
                        {88,88},
                        {44,44},
                        {44,88},
                        {88,44}
                    };
//aktuelle PWM-Werte:
int PWM_LEFT=66;
int PWM_RIGHT=66;

//Hilfsvariablen für rechteckige Taster auf Touchscreen
//Müssen in setup() initialisiert werden, weil dann erst width und height feststehen!
float xraster;
float yraster;
float xrand;
float yrand;
	

boolean aktiv = false; 

int sr;
int buffsize;
long PUFFERZEIT=0;
//create an audiotrack object
AudioTrack audioTrack;

public int PULSE = 400;
public int pulse = 0;

short[] samples;
int amp = 10000;
float twopi = 2.0f*PI;
float fr = 440.0f;
float fr2 = 4.4f;
float fr4 = 1.1f;
float fr3 = 220.0f;
float ph = 0.0f;   
float ph2 = 0.0f;   
float ph3 = 0.0f;   
float ph4 = 0.0f;   
float change=0.0f;
float change2=0.0f;

Tonspieler tonspieler;

int WERT = 0;

public void setup()
{
	sr = 44100;

	xraster = width/3.0f;
	yraster = height/3.0f;
	xrand   = width/15.0f;
	yrand   = height/15.0f;
	
	
	buffsize = AudioTrack.getMinBufferSize(sr, AudioFormat.CHANNEL_OUT_STEREO, 
	        AudioFormat.ENCODING_PCM_16BIT);

	//PUFFERZEIT = (1000*(long)buffsize)/sr;  //MONO
	PUFFERZEIT = (500*(long)buffsize)/sr;     //STEREO
	
	//create an audiotrack object
	audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sr, 
	                                    AudioFormat.CHANNEL_OUT_STEREO, 
	                                    AudioFormat.ENCODING_PCM_16BIT, 
	                                    buffsize, 
	                                    AudioTrack.MODE_STREAM);


	samples= new short[buffsize];
   
	tonspieler = new Tonspieler();
	
	Thread t = new Thread(tonspieler);
	t.start();
	audioTrack.play();
}

public void draw()
{
    clear();
    background(0);

    if(ZUSTAND==0) fill(255,0,0); else fill(0,0,255);
    rect(xraster+xrand,yraster+yrand,xraster-2.0f*xrand,yraster-2.0f*yrand);
    if(ZUSTAND==1) fill(255,0,0); else fill(0,0,255);
    rect(xraster+xrand,yrand,xraster-2.0f*xrand,yraster-2.0f*yrand);
    if(ZUSTAND==2) fill(255,0,0); else fill(0,0,255);
    rect(xraster+xrand,2.0f*yraster+yrand,xraster-2.0f*xrand,yraster-2.0f*yrand);
    if(ZUSTAND==3) fill(255,0,0); else fill(0,0,255);
    rect(xrand,yraster+yrand,xraster-2.0f*xrand,yraster-2.0f*yrand);
    if(ZUSTAND==4) fill(255,0,0); else fill(0,0,255);
    rect(2.0f*xraster+xrand,yraster+yrand,xraster-2.0f*xrand,yraster-2.0f*yrand);
}

public void mousePressed()
{
	WERT++;
	WERT%=3;
	
	if(mouseX>=xraster+xrand && mouseX<=2.0f*xraster-xrand 
    && mouseY>=yraster+yrand && mouseY<=2.0f*yraster-yrand)
				ZUSTAND=0;
			
	if(mouseX>=xraster+xrand && mouseX<=2.0f*xraster-xrand 
    && mouseY>=yrand && mouseY<=yraster-yrand)
				ZUSTAND=1;
			
	if(mouseX>=xraster+xrand && mouseX<=2.0f*xraster-xrand 
	&& mouseY>=2.0f*yraster+yrand && mouseY<=3.0f*yraster-yrand)
				ZUSTAND=2;
			
	if(mouseX>=xrand && mouseX<=xraster-xrand 
	&& mouseY>=yraster+yrand && mouseY<=2.0f*yraster-yrand)
				ZUSTAND=3;
			
	if(mouseX>=2.0f*xraster+xrand && mouseX<=3.0f*xraster-xrand 
	&& mouseY>=yraster+yrand && mouseY<=2.0f*yraster-yrand)
				ZUSTAND=4;

	//Aktualisierung der PWM-Werte:
	PWM_LEFT = ZUORDNUNG[ZUSTAND][0];
	PWM_RIGHT = ZUORDNUNG[ZUSTAND][1];
}

private class Tonspieler implements Runnable
{
	public void run()
	{
		int zaehler = 0;
		long zeit = System.currentTimeMillis();
		while(true)
		{
				  for(int i=0;i<buffsize;i+=2)
				  {  
						 if(zaehler<PWM_LEFT)
						     samples[i] = Short.MAX_VALUE;
						 else
							 samples[i] = Short.MIN_VALUE;
						 if(zaehler<PWM_RIGHT)
						     samples[i+1] = Short.MAX_VALUE;
						 else
							 samples[i+1] = Short.MIN_VALUE;
				     zaehler++;
				     if(zaehler>=500)
				         zaehler=0;
				     
				  } 
				  audioTrack.write(samples, 0, buffsize);
				  
				  long restzeit = PUFFERZEIT-(System.currentTimeMillis()-zeit);
				  zeit=System.currentTimeMillis();
				  if(restzeit>0)
				  {
					  try
					  {
						  Thread.sleep(restzeit);
					  }
					  catch(Exception e)
					  {
						  
					  }
				  }
		}
	}
}


}

Code 0-1: Test-Code: Über Touchscreen Fahrtrichtung bestimmen.

fahrzeugrichtung.zip - Eclipse-Projekt zu "Fahrtrichtung.."