Genomgångar av Arduino och lite elektronik.
I jämförelse med Phidgets tycker jag att Arduino verkar vara en dröm att programmera. Men den har andra problem. Till exempel stötte vi direkt på patrull när vi ville överföra flera data på en gång från Arduinon till datorn. Direkt måste man börja ta hänsyn till vilken datatyp det är etc.
Kanske är Firmata något för oss.
Böjsensorer genom spänningsdelare (1 k motstånd) in i Arduinon. Bara ett av motstånden används!
Böjsensoroutput i processing (utgick från potentionmeter-exempel från Arduinos hemsida)
Arduino inkopplad. Bara ett av motstånden används!
Exempel (med dåligt ljud) som visar det hela in action.
Dagens källkod:
Arduino
/*
Graph
A simple example of communication from the Arduino board to the computer:
the value of analog input 0 is sent out the serial port. We call this "serial"
communication because the connection appears to both the Arduino and the
computer as a serial port, even though it may actually use
a USB cable. Bytes are sent one after another (serially) from the Arduino
to the computer.
You can use the Arduino serial monitor to view the sent data, or it can
be read by Processing, PD, Max/MSP, or any other program capable of reading
data from a serial port. The Processing code below graphs the data received
so you can see the value of the analog input changing over time.
The circuit:
Any analog input sensor is attached to analog in pin 0.
created 2006
by David A. Mellis
modified 14 Apr 2009
by Tom Igoe and Scott Fitzgerald
*/
void setup() {
// initialize the serial communication:
Serial.begin(9600);
}
void loop() {
// send the value of analog input 0:
Serial.println(analogRead(3));
// wait a bit for the analog-to-digital converter
// to stabilize after the last reading:
delay(100);
}
Processing:
Instansierar en sinusoscillator och ritar grafen på skärmen. Vid varje serial-event uppdaterar den kurvhöjd och sätter frekvensen på skärmen.
// Graphing sketch
// This program takes ASCII-encoded strings
// from the serial port at 9600 baud and graphs them. It expects values in the
// range 0 to 1023, followed by a newline, or newline and carriage return
// Created 20 Apr 2005
// Updated 18 Jan 2008
// by Tom Igoe
import processing.serial.*;
Serial myPort; // The serial port
int xPos = 1; // horizontal position of the graph
// SOUND:
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;
AudioOutput out;
SineWave sine;
void setup () {
// set the window size:
size(400, 300);
// List all the available serial ports
println(Serial.list());
// I know that the first port in the serial list on my mac
// is always my Arduino, so I open Serial.list()[0].
// Open whatever port is the one you're using.
myPort = new Serial(this, Serial.list()[0], 9600);
// don't generate a serialEvent() unless you get a newline character:
myPort.bufferUntil('\n');
// set inital background:
background(0);
//sound
minim = new Minim(this);
// get a line out from Minim, default bufferSize is 1024, default sample rate is 44100, bit depth is 16
out = minim.getLineOut(Minim.STEREO);
// create a sine wave Oscillator, set to 440 Hz, at 0.5 amplitude, sample rate from line out
sine = new SineWave(440, 0.5, out.sampleRate());
// set the portamento speed on the oscillator to 200 milliseconds
sine.portamento(200);
// add the oscillator to the line out
out.addSignal(sine);
}
void draw () {
// everything happens in the serialEvent()
}
void serialEvent (Serial myPort) {
// get the ASCII string:
String inString = myPort.readStringUntil('\n');
if (inString != null) {
// trim off any whitespace:
inString = trim(inString);
// convert to an int and map to the screen height:
float inByte = float(inString);
inByte = map(inByte, 0, 1023, 0, height);
// draw the line:
stroke(127,34,255);
line(xPos, height, xPos,map(inByte,9,34,0,height));
//System.out.println(inByte);
float freq = map(inByte, 9,34, 1500, 60);
sine.setFreq(freq);
// at the edge of the screen, go back to the beginning:
if (xPos >= width) {
xPos = 0;
background(0);
}
else {
// increment the horizontal position:
xPos++;
}
}
}
void stop()
{
out.close();
minim.stop();
super.stop();
}



Inga kommentarer:
Skicka en kommentar