LOCODUINO
Parlons Arduino => Vos projets => Discussion démarrée par: Guillaume le août 31, 2015, 04:12:50 pm
-
Bonjour,
j'ai toujours dans mes petits projets, dans un coin de ma tête, la question de l'ordinateur.
Nous avons déjà parlé avec certains de processing qui a l'avantage de la même interface mais aussi du même langage qu'Arduino (dérive de là) ajouté à cela des trucs de dessins.
Bref, avec une voie série accessible on peut échanger des informations entre les deux trucs, ajouté à cela un adaptateur bluetooth et cela roule.
Je m'y suis remis car Processing est sorti en v3.
Vérification du code tout le temps et interface de gestion des bibliothèques comme Linux et son dépôt ;)
Bref, une GUI pour parfaire du nom de Guido (G4P ne peut être installé). et hop un début de prog. Cela peut bien donner cette affaire :
import de.bezier.guido.*;
//Variables
int i=0; //Placer la liste après en dessous du dessin
int espace= 20; //espace entre les listes
//Objets listes voies
CheckBox voie1 ;
CheckBox voie2 ;
CheckBox voie3 ;
void setup ()
{
size( 300, 300 );
Interactive.make(this);
voie1 = new CheckBox("Voie 1 : garage bâtiment", 30, 30+i, 10, 10 );
voie2 = new CheckBox("Voie 2 : pleine voie", 30, 30+espace+i, 10, 10 );
voie3 = new CheckBox("Voie 3 : garage extension", 30, 30+espace*2+i, 10, 10 );
}
void draw ()
{
background( 0 );
}
public class CheckBox
{
boolean checked = false;
float x, y, width, height;
String label;
float padx = 7;
CheckBox ( String l, float xx, float yy, float ww, float hh )
{
label = l;
x = xx; y = yy; width = ww; height = hh;
Interactive.add( this );
}
void mouseReleased ()
{
checked = !checked;
}
void draw ()
{
noStroke();
fill( #E21919 );
rect( x, y, width, height );
if ( checked )
{
fill( #45EC38 );
rect( x, y, width, height );
}
fill( 255 );
textAlign( LEFT );
text( label, x+width+padx, y+height );
}
// this is a special inside test that includes the label text
boolean isInside ( float mx, float my )
{
return Interactive.insideRect( x,y,width+padx+textWidth(label), height, mx, my );
}
}
-
Bonjour
J'ai regardé Processing, cela ressemble beaucoup plus à du Java qu'a du C++ (par exemple au niveau des objets et de l'héritage). Mais cela peut être intéressant pour dialoguer entre un PC (Mac) et un Arduino, par exemple pour utiliser la souris et l'écran pour un TCO, ou un gros programme de contrôle d'un réseau.
Pierre
-
Je reprends le fil.
Processing marche très bien avec Arduino. Je vais utiliser cela pour mon module HOe.
En tout cas, cela marche bien avec les DEL donc avec les autres trucs aucun souci.
Donc voici les 1ères lignes du code :
/*Programme de gestion du module HOe via le PC*/
//Importation des lib
import processing.serial.*;
import g4p_controls.*;
//Configuration de la voie série
Serial arduino;
boolean serialConnected = false;
//Bouton voie série
GDropList serialPortListMenu;
GButton connectButton;
String[] serialPortList;
//Bouton commande canton
GButton Bcanton1;
GButton Bcanton2;
GButton Bcanton3;
boolean canton1 = false;
boolean canton2 = false;
boolean canton3 = false;
void setup()
{
size(1024, 600);
serialSetup();
cantonSetup();
}
void draw()
{
background(255);
fill(0);
stroke(0);
//Décor des commandes 1
text("Port série", 630, 35);
text("Module HOe", 10, 20);
line(620, 0, 620, 600);//Ligne verticale
line(0, 40, 620, 40);//Ligne Gauche Ht
line(620, 80, 1024, 80);//Ligne Droite Ht
text("Commandes des cantons", 10, 60);
//Dessin du réseau
text("Canton 1", 80, 105);
text("Canton 2", 30, 145);
text("Canton 3", 80, 185);
//Lignes canton 1
if (canton1 == true) {
stroke(#2ECC71);
} else {
stroke(#FF0000);
}
line(150, 100, 250, 100);
line(250, 100, 300, 140);
//Lignes canton 2
if (canton2 == true) {
stroke(#2ECC71);
} else {
stroke(#FF0000);
}
line(100, 140, 300, 140);
//Lignes canton 3
if (canton3 == true) {
stroke(#2ECC71);
} else {
stroke(#FF0000);
}
line(150, 180, 250, 180);
line(250, 180, 300, 140);
//Plaque tournante
fill(255);
stroke(0);
ellipse(300, 140, 70, 70);
//Décor des commandes 2
line(0,240,620,240);
}
// Fonctions pour la voie série
void serialSetup()
{
serialPortList = Serial.list();
serialPortListMenu = new GDropList(this, 700, 20, 300, serialPortList.length*24, serialPortList.length);
serialPortListMenu.setItems(serialPortList, 0);
connectButton = new GButton(this, 900, 50, 100, 22, "Connecter");
}
boolean connectSerial(String serialName)
{
arduino = new Serial(this, serialName, 115200);
serialConnected = true;
return true;
}
void disconnectSerial()
{
serialConnected = false;
arduino.stop();
}
//Handler pour les boutons
void handleButtonEvents(GButton button, GEvent event) {
if (button == connectButton && event == GEvent.CLICKED) {
if (! serialConnected) {
if (connectSerial(serialPortListMenu.getSelectedText())) {
connectButton.setText("Deconnecter");
}
} else {
disconnectSerial();
connectButton.setText("Connecter");
}
}
if (button == Bcanton1 && event == GEvent.CLICKED) {
actionCanton1();
}
if (button == Bcanton2 && event == GEvent.CLICKED) {
actionCanton2();
}
if (button == Bcanton3 && event == GEvent.CLICKED) {
actionCanton3();
}
}
//Commande des cantons
void cantonSetup() {
Bcanton1 = new GButton(this, 400, 89, 100, 22, "Canton 1");
Bcanton2 = new GButton(this, 400, 129, 100, 22, "Canton 2");
Bcanton3 = new GButton(this, 400, 169, 100, 22, "Canton 3");
}
void actionCanton1() {
canton1 = ! canton1;
}
void actionCanton2() {
canton2 = ! canton2;
}
void actionCanton3() {
canton3 = ! canton3;
}
//Fonctions pour les boutons de trains
//Touches de clavier qui définit aussi les actions pour le module HOe
Il me reste à insérer les handlers des touches pour faire des raccourcis et après à envoyer les ordres correspondants à l'Arduino. Il faut simplement faire une table de correspondance.
Ci joint une image, les couleurs des voies changent.
Pour l'essayer, téléchargez Processing3 et installez la lib G4P. Très simple, vous allez dans le gestionnaire de lib la cherchez et l'installez.
-
Maj du screen
-
Bonjour Guillaume,
C'est intéressant et tes premiers essais sont encourageants !
Un choix possible pour l'ordinateur serait un Raspberry Pi, mais c'est une considération purement théorique... L'environnement que tu décris doit certainement tourner sur le Raspberry.
Meilleures salutations.
Marc-Henri
-
Bonjour,
je ne vois pas l'apport d'un Rpi dans le truc. Je n'en vois que des contraintes pour moi.
Un simple ordi portable est amplement suffisant.