Bonjour à tous,
J’ai actuellement pour projet de remplacer mes vieilles guirlandes guinguette à ampoule par une guirlande fabriquée maison avec des cabochons de 60mm avec Leds et puce UCS2903.
L’idée est d’avoir 8 guirlandes de 40 led. ( chaque guirlande a son arduino Uno qui sert de contrôlleur) et que ces 8 guirlandes soient synchronysées bien qu’espacées de 100m.
Pour le moment, chaque guirlande fonctionne individuellement avec le programme joint (programme avec librairie Fastled et 8 animations qui changent à chaque impulsion de bouton).
La partie qui me bloque est au niveau de la synchronisaition de ces guirlandes entre elles. Je doit utiliser un autre arduino qui possède un bouton qui switchera le programme sur les guirlandes (pour remplacer la pression du bouton sur la guirlande elle même). Pour cela, chaque arduino est montée avec le NRF24L01.
Mes antennes fonctionnent bien avec l’exemple de base pour la communication WIFI :
Voici mon code pour l’emetteur (avec bouton ou délai pour changement automatique des programmes)
/*
* Arduino Wireless Communication Tutorial
* Example 1 - Transmitter Code
*
* by Dejan Nedelkovski, www.HowToMechatronics.com
*
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#define button 2
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean buttonState = LOW;
void setup() {
pinMode(button, INPUT);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
pinMode(5,OUTPUT); // LED output
}
void loop() {
static unsigned char ledState = LOW;
static unsigned char buttonState = LOW;
static unsigned char lastButtonState = LOW;
static unsigned long ledCameOn = 0;
// If the LED has been on for at least 5 seconds then turn it off.
if(millis()-ledCameOn > 2000)
{
digitalWrite(5,LOW);
ledState = LOW;
}
// If the button's state has changed, then turn the LED on IF it is not on already.
buttonState = digitalRead(2);
if(buttonState != lastButtonState || millis()-ledCameOn > 2000)
{
lastButtonState = buttonState;
if((buttonState == HIGH) && (ledState == HIGH)|| millis()-ledCameOn > 2000)
{
digitalWrite(5,HIGH);
ledState = LOW;
radio.write(&ledState, sizeof(ledState));
delay(15);
ledState = HIGH;
digitalWrite(5,LOW);
ledCameOn = millis();
}
}
radio.write(&ledState, sizeof(ledState));
delay(100);
}
Côté recepteur,c 'est plus la galère, j’ai essayé de rajouter dans le programme"test complet" les elements dans le setup et le loop MAIS rien n’y fait, l’arduino lit pendant une fraction de secondes les infos envoyées puis plus rien.
A mon niveau et vu ce que j’ai lu sur les arduino, rien ne me choque vu que celle-ci n’est pas multitâche, elle peut soit lire, soit donner les infos pour allumer les LEDs.
Or j’ai vu des vidéos, notamment celle-ci, ou le principe que je souhaite mettre en place fonctionne
Ansi je me tourne vers la communauté pour me débloquer là dessus
test_complet.ino (13.2 KB)