Bonjour, j'ai une autre question, concernant le code ci-dessous, je voudrais que les led restent allumées, ce code vient de chez Adafruit, mais j'ai un peu de mal à le comprendre.
Auriez-vous une idée?
source : https://learn.adafru...eopixel-goggles
// Bluetooth Goggles Sketch -- shows the Adafruit Bluefruit LE UART Friend
// can be used even with Trinket or Gemma!
// https://www.adafruit.com/products/2479
// Works in conjunction with Bluefruit LE Connect app on iOS or Android --
// pick colors or use '1' and '2' buttons to select pinwheel or sparkle modes.
// You can try adding more, but space is VERY tight...helps to use Arduino IDE
// 1.6.4 or later; produces slightly smaller code than the 1.0.X releases.
// BLUEFRUIT LE UART FRIEND MUST BE SWITCHED TO 'UART' MODE
#include <SoftwareSerial.h>
#include <Adafruit_NeoPixel.h>
#ifdef __AVR_ATtiny85__ // Trinket, Gemma, etc.
#include <avr/power.h>
#endif
#define RX_PIN 4 // Connect this Trinket pin to BLE 'TXO' pin
#define CTS_PIN 3 // Connect this Trinket pin to BLE 'CTS' pin
#define LED_PIN 2 // Connect NeoPixels to this Trinket pin
#define NUM_LEDS 32 // Two 16-LED NeoPixel rings
#define FPS 30 // Animation frames/second (ish)
SoftwareSerial ser(RX_PIN, 4);
Adafruit_NeoPixel pixels(NUM_LEDS, LED_PIN);
void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000L)
// MUST do this on 16 MHz Trinket for serial & NeoPixels!
clock_prescale_set(clock_div_1);
#endif
// Stop incoming data & init software serial
pinMode(CTS_PIN, OUTPUT); digitalWrite(CTS_PIN, HIGH);
ser.begin(9600);
pixels.begin(); // NeoPixel init
// Flash space is tight on Trinket/Gemma, so setBrightness() is avoided --
// it adds ~200 bytes. Instead the color picker input is 'manually' scaled.
}
uint8_t buf[3], // Enough for RGB parse; expand if using sensors
animMode = 0, // Current animation mode
animPos = 0; // Current animation position
uint32_t color = 0x400000, // Current animation color (red by default)
prevTime = 0L; // For animation timing
void loop(void) {
int c;
uint32_t t;
// Animation happens at about 30 frames/sec. Rendering frames takes less
// than that, so the idle time is used to monitor incoming serial data.
digitalWrite(CTS_PIN, LOW); // Signal to BLE, OK to send data!
for(; {
t = micros(); // Current time
if((t - prevTime) >= (1000000L / FPS)) { // 1/30 sec elapsed?
prevTime = t;
break; // Yes, go update LEDs
} // otherwise...
if((c = ser.read()) == '!') { // Received UART app input?
while((c = ser.read()) < 0); // Yes, wait for command byte
switch(c) {
case 'B': // Button (Control Pad)
if(readAndCheckCRC(255-'!'-'B', buf, 2) & (buf[1] == '1')) {
buttonPress(buf[0]); // Handle button-press message
}
break;
case 'C': // Color Picker
if(readAndCheckCRC(255-'!'-'C', buf, 3)) {
// As mentioned earlier, setBrightness() was avoided to save space.
// Instead, results from the color picker (in buf[]) are divided
// by 4; essentially equivalent to setBrightness(64). This is to
// improve battery run time (NeoPixels are still plenty bright).
color = pixels.Color(buf[0]/4, buf[1]/4, buf[2]/4);
}
break;
case 'Q': // Quaternion
skipBytes(17); // 4 floats + CRC (see note below re: parsing)
break;
case 'A': // Accelerometer
#if 0
// The phone sensors are NOT used by this sketch, but this shows how
// they might be read. First, buf[] must be delared large enough for
// the expected data packet (minus header & CRC) -- that's 16 bytes
// for quaternions (above), or 12 bytes for most of the others.
// Second, the first arg to readAndCheckCRC() must be modified to
// match the data type (e.g. 'A' here for accelerometer). Finally,
// values can be directly type-converted to float by using a suitable
// offset into buf[] (e.g. 0, 4, 8, 12) ... it's not used in this
// example because floating-point math uses lots of RAM and code
// space, not suitable for the space-constrained Trinket/Gemma, but
// maybe you're using a Pro Trinket, Teensy, etc.
if(readAndCheckCRC(255-'!'-'A', buf, 12)) {
float x = *(float *)(&buf[0]),
y = *(float *)(&buf[4]),
z = *(float *)(&buf[8]);
}
// In all likelihood, updates from the buttons and color picker
// alone are infrequent enough that you could do without any mention
// of the CTS pin in this code. It's the extra sensors that really
// start the firehose of data.
break;
#endif
case 'G': // Gyroscope
case 'M': // Magnetometer
case 'L': // Location
skipBytes(13); // 3 floats + CRC
}
}
}
digitalWrite(CTS_PIN, HIGH); // BLE STOP!
// Show pixels calculated on *prior* pass; this ensures more uniform timing
pixels.show();
boolean readAndCheckCRC(uint8_t sum, uint8_t *buf, uint8_t n) {
for(int c; {
while((c = ser.read()) < 0); // Wait for next byte
if(!n--) return (c == sum); // If CRC byte, we're done
*buf++ = c; // Else store in buffer
sum -= c; // and accumulate sum
}
}
void skipBytes(uint8_t n) {
while(n--) {
while(ser.read() < 0);
}
}
void buttonPress(char c) {
pixels.clear(); // Clear pixel data when switching modes (else residue)
switch(c) {
case '1':
animMode = 0; // Switch to pinwheel mode
break;
case '2':
animMode = 1; // Switch to sparkle mode
break;
case '3':
break;
case '4':
break;
case '5': // Up
break;
case '6': // Down
break;
case '7': // Left
break;
case '8': // Right
break;
}
}
je ne sais pas trop oû remplacer ce code par :
// NeoPixel Ring simple sketch (c) 2013 Shae Erisson
// released under the GPLv3 license to match the rest of the AdaFruit NeoPixel library
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1
#define PIN 6
// How many NeoPixels are attached to the Arduino?
#define NUMPIXELS 16
// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals.
// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest
// example for more information on possible values.
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 500; // delay for half a second
void setup() {
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code
pixels.begin(); // This initializes the NeoPixel library.
}
void loop() {
// For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one.
for(int i=0;i<NUMPIXELS;i++){
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(0,150,0)); // Moderately bright green color.
pixels.show(); // This sends the updated pixel color to the hardware.
delay(delayval); // Delay for a period of time (in milliseconds).
}
}