Bonjour à tous et happy coding ![]()
J'essaie actuellement de faire une interface de contrôle d'envoie de signaux radios, j'utilise donc pour ça un arduino avec virtualWire et pour choisir ce que j'envoie, une interface processing classique faite avec la librairy controlP5, ainsi que d'une console (plus pratique pour lire les dernières commandes envoyée ou reçue).
Hors, lorsque je lance processing -sur le bon com je précise que j'ai vérifié ceux-ci-... La communication se bloque au bout d'un moment. En cause, ceci :
StringIndexOutOfBoundsException: String index out of range: -1
Comment faire pour ne plus avoir cette erreur, ou pouvez vous me l'expliquer? Je crois ne pas avoir très bien compris les sites et solutions proposées. Je sèche complètement là.
![]()
Je vous joint le code processing (arduino à la suite) :
/// cmd programme
int TEST = 0;
import processing.serial.*;
import controlP5.*;
Serial myPort; // Create object from Serial class
String val = "_"; // Data received from the serial port
String message; // Data received from the serial port
ControlP5 cp5;
Println console;
Textarea myTextarea;
void setup() {
size(1920, 1080);
cp5 = new ControlP5(this);
frameRate(30);
cp5.addBang("bang")
.setPosition(250, 50)
.setSize(20, 20)
.setTriggerEvent(Bang.RELEASE)
.setLabel("test")
;
cp5.addBang("ClearConsole")
.setPosition(20, 1010)
.setSize(20, 20)
.setTriggerEvent(Bang.RELEASE)
.setLabel("Clear console")
;
console();
if (TEST == 0) {
String portName = Serial.list()[1]; //change the 0 to a 1 or 2 etc. to match your port
myPort = new Serial(this, portName, 9600);
myPort.bufferUntil('\n');
}
}
void draw() {
if (TEST == 0) {
if ( myPort.available() > 0) { // If data is available,
val = myPort.readStringUntil('\n'); // read it and store it in val
println("Mariner = " + val + " ");
} else {
//println("Not connected");
}
}
}
public void bang() {
println("boum");
send("bonjour");
}
public void ClearConsole() {
console.clear();
}
void send(String sending) {
if (TEST == 0) {
myPort.write(sending);
}
println("Cmd == "+ sending);
}
// console.clear();
void console() {
cp5 = new ControlP5(this);
cp5.enableShortcuts();
myTextarea = cp5.addTextarea("Transmissions")
.setPosition(0, 0)
.setSize(200, 1000)
.setFont(createFont("Overpass-Regular-14", 14))
.setLineHeight(14)
.setColor(color(200))
.setColorBackground(color(50,50,50, 200))
.setColorForeground(color(255, 100));
console = cp5.addConsole(myTextarea);//
}
Et le code arduino:
#include <VirtualWire.h>
String val = "Radio waiting for orders";
void setup() {
Serial.begin(9600);
Serial.println("Radio connected");
vw_set_rx_pin(3);
vw_set_tx_pin(13);
vw_setup(1000);
vw_rx_start();
}
void loop() {
Serial.println("Radio connected");
byte message[VW_MAX_MESSAGE_LEN];
byte taille_message = VW_MAX_MESSAGE_LEN;
byte paquet[27];
if (Serial.available() > 0) {
val = Serial.read();
strcpy(paquet, Serial.read());
vw_send(paquet, 27);
vw_wait_tx();
Serial.print(val);
Serial.println("....send");
}
vw_wait_rx_max(1000);
if (vw_get_message(message, &taille_message)) {
Serial.println((char*) message); // Affiche le message
}
delay(10);
}
Si vous avez la moindre idée, cela m'aiderait énormément ![]()
Merci à tous et bonne journée.