Salut à tous, je reviens en force ! 
J'ai fait des animations, qui utilisent un delay. Cependant, je voudrai changer la vitesse avec la variable qui se trouve dans le delay. Cependant, je ne vois pas comment changer cette variable sans casser mon animation. Ma variable est changée quand quelque chose arrive sur le port série de mon module bluetooth.
Ce qu'il m'intéresse, ce sont les 4 dernières fonctions, sur les animations fondus et anim2 et sur l'augmentation ou la diminution de la vitesse.
Avez-vous une idée ?
Merci !
Voici le code du côté de l'arduino :
#include <SoftwareSerial.h>
#include <avr/interrupt.h>
#define led_rouge 10
#define led_vert 9
#define led_bleu 6
SoftwareSerial bluetooth(3, 4); // Broche Tx - 11 et Rx - 10
volatile byte rouge_int = 0;
volatile byte vert_int = 0;
volatile byte bleu_int = 0;
volatile byte luminosite_int = 0;
volatile boolean allume = false;
volatile byte timer = 0;
void setup() {
// put your setup code here, to run once:
pinMode(led_rouge, OUTPUT);
digitalWrite(led_rouge, LOW);
pinMode(led_vert, OUTPUT);
digitalWrite(led_vert, LOW);
pinMode(led_bleu, OUTPUT);
digitalWrite(led_bleu, LOW);
bluetooth.begin(9600);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
static byte luminosite = 255;
static boolean on_off = true;
static boolean cligno = false;
static byte rouge = 255;
static byte vert = 255;
static byte bleu = 255;
static unsigned int tempo = 500;
if (bluetooth.available())
{
String donnees = "";
donnees = lecture_bluetooth();
//Serial.println(donnees);
traitement_donnees(donnees, &luminosite, &on_off, &rouge, &vert, &bleu, &cligno, &tempo);
rouge_int = rouge;
vert_int = vert;
bleu_int = bleu;
luminosite_int = luminosite;
}
}
String lecture_bluetooth()
{
String s = "";
char c = ' ';
while (bluetooth.available())
{
c = bluetooth.read();
s = s + c;
}
return s;
}
long stringToLong(String value) {
long outLong = 0;
long inLong = 1;
int c = 0;
int idx = value.length() - 1;
for (int i = 0; i <= idx; i++) {
c = (int)value[idx - i];
outLong += inLong * (c - 48);
inLong *= 10;
}
return outLong;
}
void traitement_donnees(String s, byte* luminosite, boolean* on_off, byte* rouge, byte* vert, byte* bleu, boolean* cligno, unsigned int* tempo)
{
byte c_rouge = (*rouge); // Variables pour ne pas changer les vraies valeurs pendant le map
byte c_vert = (*vert);
byte c_bleu = (*bleu);
if (s.equals("fondu"))
{
TCCR2B &= 0xF8; // Stop timer
digitalWrite(led_rouge, LOW);
digitalWrite(led_vert, LOW);
digitalWrite(led_bleu, LOW);
(*cligno) = false;
int i = 0;
int r = 0, v = 0, b = 0;
(*rouge) = 0;
(*vert) = 0;
(*bleu) = 0;
while (!bluetooth.available())
{
for (r = 0; r < 255; r++)
{
Serial.println("Rouge");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (v = 0; v < 255; v++)
{
Serial.println("Vert");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (b = 0; b < 255; b++)
{
Serial.println("Bleu");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (r = 255; r > 0; r--)
{
Serial.println("Rouge");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (v = 255; v > 0; v--)
{
Serial.println("Vert");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (b = 255; b > 0; b--)
{
Serial.println("Bleu");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
}
}
else if (s.equals("anim2"))
{
TCCR2B &= 0xF8; // Stop timer
digitalWrite(led_rouge, LOW);
digitalWrite(led_vert, LOW);
digitalWrite(led_bleu, LOW);
(*cligno) = false;
int i = 0;
int r = 0, v = 0, b = 0;
(*rouge) = 0;
(*vert) = 0;
(*bleu) = 0;
while (!bluetooth.available())
{
for (r = 0; r < 255; r++)
{
Serial.println("Rouge");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (r = 255; r > 0; r--)
{
Serial.println("Rouge");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (v = 0; v < 255; v++)
{
Serial.println("Vert");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (v = 255; v > 0; v--)
{
Serial.println("Vert");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (b = 0; b < 255; b++)
{
Serial.println("Bleu");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
for (b = 255; b > 0; b--)
{
Serial.println("Bleu");
analogWrite(led_rouge, r);
analogWrite(led_vert, v);
analogWrite(led_bleu, b);
delay((int)((*tempo) / 100));
if (bluetooth.available()) break;
}
}
}
else if (s.equals("vitesse_moins"))
{
if ((*tempo) + 250 < 3000) (*tempo) += 250;
else (*tempo) = 3000;
}
else if (s.equals("vitesse_plus"))
{
if ((*tempo) - 250 > 250) (*tempo) -= 250;
else (*tempo) = 250;
}
}