Salut, je suis en terminale et je bosse sur un projet, je dois en gros faire une maison avec des capteurs pour les fenêtres, le Co2 etc...
Le problème est survenu quand j'ai ajouté le capteur de Co2 ; plus rien ne s’affichait sur l'interface Processing ![]()
ARDUINO :
#include "AirQuality.h"
#include "Arduino.h"
AirQuality airqualitysensor;
int current_quality =-1;
int PinCuisine = 7;
int PinSDB = 10; // choose the input pin (for PIR sensor)
int CapteurSDB = LOW; // we start, assuming no motion detected
int CapteurCuisine = LOW;
int val = 0; // variable for reading the pin status
String monString = "";
String monString1= "";
String monString2 = "";
void setup() {
airqualitysensor.init(14);
pinMode(PinSDB, INPUT); // declare sensor as input
pinMode(PinCuisine, INPUT);
Serial.begin(9600);
}
void loop(){
current_quality=airqualitysensor.slope();
if (current_quality >= 0)// if a valid data returned.
{
if (current_quality==0)
monString2 = ("High pollution! Force signal active");
else if (current_quality==1)
monString2 = ("High pollution!");
else if (current_quality==2)
monString2 = ("Low pollution!");
else if (current_quality ==3)
monString2 = ("Fresh air");
}
val = digitalRead(PinSDB); // read input value
if (val == HIGH) { // check if the input is HIGH
delay(150);
// we have just turned on
monString = "FENETRE SDB OUVERTE ";
// We only want to print on the output change, not state
CapteurSDB = HIGH;
} else {
delay(300);
// we have just turned of
monString = "FENETRE SDB FERMEE ";
// We only want to print on the output change, not state
CapteurSDB = LOW;
}
val = digitalRead(PinCuisine); // read input value
if (val == HIGH) { // check if the input is HIGH
delay(150);
// we have just turned on
monString1 = "FENETRE Cuisine OUVERTE ";
// We only want to print on the output change, not state
CapteurSDB = HIGH;
} else {
delay(300);
// we have just turned of
monString1 = "FENETRE Cuisine FERMEE ";
// We only want to print on the output change, not state
CapteurSDB = LOW;
}
Serial.println(monString+" "+monString1 + " "+monString2);
}
ISR(TIMER2_OVF_vect)
{
if(airqualitysensor.counter==122)//set 2 seconds as a detected duty
{
airqualitysensor.last_vol=airqualitysensor.first_vol;
airqualitysensor.first_vol=analogRead(A0);
airqualitysensor.counter=0;
airqualitysensor.timer_index=1;
PORTB=PORTB^0x20;
}
else
{
airqualitysensor.counter++;
}
}
PROCESSING :
import processing.serial.*;
/* Ce programme permet de récupérer l'état des entrées-sorties numériques et analogiques d'une carte arduino. Le tableau de variable "E_S" contient les données;
de la variable E_S[0] à E_S[13] se trouvent les états 0 ou 1 des E/S numériques de 0 à 13, de la variable E_S[14] à E_S[19] se trouvent les valeurs numériques des E/S analogiques de A0 à A5 */
boolean FenetreSDB = false;
boolean FenetreCuisine = false;
boolean FenetreChambre = false;
Serial arduino;/*déclaration d'une variable de communication sur le port série
pour commuiquer avec la carte arduino*/
String[]E_S;// tableau de variables contenant les états des entrées-sorties de la carte arduino en valeurs entières
int lf = 10; // code ascii du "saut de ligne" (line feed) pour détecter la fin du message
void setup() {
println(Serial.list());
arduino = new Serial(this, Serial.list()[2], 9600); /*démarrage d'une communication
sur le port série avec la carte arduino; changer le n° du port si nécessaire (0 ou 1 ou 2...)*/
arduino.bufferUntil(lf);
background(0,0,0);
size (1000, 1000);
fill(200, 173, 127);
rect(200, 500, 500, 250);
fill (115, 8, 0);
triangle(200, 500, 700, 500, 450, 250);
fill (126, 51, 0);
rect(620, 550, 80, 200);
fill (255, 255, 0);
rect(620, 650, 25, 25);
fill(0,101,0);
ellipse(535,580,25,25);
fill(101,0,0);
ellipse(535,620,25,25);
fill(0, 0, 0);
textSize(15);
text("Salle de bain", 220, 700);
textSize(15);
text("Cuisine", 375, 700);
textSize(15);
text("CO2",520,700);
fill(0,200,0);
textSize(15);
text("",555,585);
fill(200,0,0);
textSize(15);
text("Danger",555,627);
}
void draw() {
textSize(18);
fill(255, 255, 255);
text("Indice de CO2 : ", 50, 50);
fill (116, 208, 241);
rect(225, 550, 100, 100);
rect(350, 550, 100, 100);
if (FenetreSDB==true) {
textSize(18);
fill(255, 0, 0);
text("Ouverte", 250, 605);
}
else if (FenetreSDB == false)
{
textSize(18);
fill(0, 200, 0);
text("Fermée", 250, 605);
}
if (FenetreCuisine==true) {
textSize(18);
fill(255, 0, 0);
text("Ouverte", 375, 605);
}
if (FenetreCuisine==false) {
textSize(18);
fill(0, 200, 0);
text("Fermée", 375, 605);
}
}
void serialEvent(Serial arduino) { // sous programme qui s'exécute lorsqu'un "saut de ligne" est détecté(line feed)
String com = arduino.readString(); // chargement de la chaîne de caractère reçue dans une variable
test(com);
println ("réception arduino: "+ com);
println("Args 2 = "+args[2]+" Args 5 = "+args[5]+" args 6 = "+args[6]);
}
void test(String com)
{
String args[] = com.split(" ");
if (args[1].equalsIgnoreCase("SDB"))
{
if (args[2].equalsIgnoreCase("OUVERTE"))
{
FenetreSDB = true;
println("Fenetre SDB vaut "+FenetreSDB);
}
if (args[2].equalsIgnoreCase("FERMEE"))
{
FenetreSDB = false;
println("Fenetre SDB vaut "+FenetreSDB);
}
}
if (args[5].equalsIgnoreCase("Cuisine"))
{
if (args[6].equalsIgnoreCase("OUVERTE"))
{
FenetreCuisine = true;
println("Fenetre Cuisine vaut "+FenetreCuisine);
}
if (args[6].equalsIgnoreCase("FERMEE"))
{
FenetreCuisine = false;
println("Fenetre Cuisine vaut "+FenetreCuisine);
}
}
println();
}
Je ne sais pas comment faire ! J'ai ce message d’erreur ![]()
error, disabling serialEvent() for //./COM37
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at processing.serial.Serial.serialEvent(Unknown Source)
at gnu.io.RXTXPort.sendEvent(RXTXPort.java:732)
at gnu.io.RXTXPort.eventLoop(Native Method)
at gnu.io.RXTXPort$MonitorThread.run(RXTXPort.java:1575)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1
at IHM_Processing.test(IHM_Processing.java:110)
at IHM_Processing.serialEvent(IHM_Processing.java:102)
... 8 more
Merci d'anvance ![]()