Android-Android
(EN google-translate)
(PL google-translate)
Nexus7-Tablet mit Fahrwerk aus vier "gehackten" Servos
|
Ansichten des Fahrwerks ohne Tablet
Bild 0-1: Fahrwerk ohne Tablet a)
Bild 0-2: Fahrwerk ohne Tablet b)
Bild 0-3: Fahrwerk ohne Tablet c)
Ansichten des Fahrwerks mit verbundenem Tablet
Bild 0-4: Fahrwerk mit Tablet a)
Bild 0-5: Fahrwerk mit Tablet b)
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.."