lundi 12 décembre 2011

communication monde reel -> arduino

Le programme sur l'arduino est le suivant.

CODE
int incomingByte = 0; // for incoming serial data

void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
}

void loop() {

// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();

// say what you got:
Serial.print("I received: ");
Serial.println((int)incomingByte, DEC);
}
}


L'un des problèmes majeur est que via le terminal nous envoyons des caractères ASCII et non pas des valeurs

If input a 1 in it should show 1 right?

Well it instead it says:

I received: 49

For the letter A it says:

I received: 69


OUPS

L'une des idées est d'envoyer des valuers entières via processing sur le port série et de lire les réponses donnée par l'arduino

CODE sous processing
// Example by Tom Igoe

import processing.serial.*;

// The serial port:
Serial myPort;

// 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 Keyspan adaptor, so I open Serial.list()[0].
Open whatever port is the one you're using.
*/
myPort = new Serial(this, Serial.list()[0], 9600);

// Send a capital A out the serial port:
while(keyPressed != true)
{
myPort.write(65);
}




L'une des difficultés est maintenant de faire lire à processing des données rentrées au clavier dans le même programme.


Attention pour rentrer les valeurs il faut selectionner la fenêtre de dessin




Code processing pour rentrer des valeurs
void draw() {
println(key);
}

Autre truc: il faut a chaque fois fermer le terminal avant de lancer une nouvelle utilisation du port série.

code processing

import processing.serial.*;

Serial myPort; // The serial port
int whichKey = -1; // Variable to hold keystoke values
int inByte = -1; // Incoming serial data

void setup() {
size(400, 300);
// create a font with the third font available to the system:


// 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 FTDI adaptor, so I open Serial.list()[0].
// In Windows, this usually opens COM1.
// Open whatever port is the one you're using.



String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}

void draw() {

}


void keyPressed() {
// Send the keystroke out:
myPort.write((int)key);
whichKey = key;
}

meme probleme les caractéres arrivent en ascii


code
import processing.serial.*;

Serial myPort; // The serial port
int whichKey = -1; // Variable to hold keystoke values
int inByte = -1; // Incoming serial data

void setup() {
size(400, 300);
// create a font with the third font available to the system:


// 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 FTDI adaptor, so I open Serial.list()[0].
// In Windows, this usually opens COM1.
// Open whatever port is the one you're using.



String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
}

void draw() {

}


void keyPressed() {
// Send the keystroke out:
int entier;
//char[] ascii;
//ascii=key;
entier=int(key);
myPort.write(entier);
println(key);

}


liens
http://wiki.processing.org/w/Tom_Igoe_Interview

Aucun commentaire:

Enregistrer un commentaire