Contrôler leds Neopixels (WS2812b) avec un bouton poussoir

Modérateur : Dehas

Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

@Dehas : Merci beaucoup Dehas. De mon côté j'ai toujours une fenêtre blanche à la place des vidéos, j'ai pourtant mis à jour adobe.
Les vidéos youtube ne posent quant à, elles pas de probléme... Un problème avec Viméo ???

Sinon, je mets à disposition le code que j'ai injecté dans l'attiny85 avec un bouton poussoir.
Le code est configuré pour 4 modes, 3 modes de flash de couleurs différentes et un mode OFF.
Vous pouvez sans problème augmenter / diminuer le nombre de modes.

Concernant le montage :
- la Pin 0 de l'attiny est connectée au Gnd lorsque l'on appuie sur le bouton poussoir (Je n'ai pas mis de résistance, je vais voir si à la longue ça pose problème, mais pour l'instant c'est okey)

- la Pin 1 de l'attiny est la pin pour le contrôle des leds.

Pour faciliter le montage, j'ai utilisé les pins des 2 bords des neopixels : cf la vidéo.

Pour la programmation de L'attiny, j'ai suivi ce tuto :

http://www.kobakant.at/DIY/?p=3742" onclick="window.open(this.href);return false;

qui explique le même process que le tuto trouvé par willmodelisme.

Voici le code en utilisant la bibliothèque Adafruit.

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>


#define DATA_PIN 1 //output pin on ATTiny85
#define NUMPIXELS      8 // How many NeoPixels are attached to the Arduino?
#define BTN_PIN 0 //input pin on ATTiny85

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, DATA_PIN, NEO_GRB + NEO_KHZ800);

// PushButton Stat
boolean PushButtonStat = false;

// PushbuttonPin
const int  PushbuttonPin = 0; // 0 For Attiny

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button
int NumberOfMode = 4;        // 3 + 1 mode OFF

long PushButtonpreviousMillis = 0; 

unsigned long currentMillis = 0;

long Pushinterval = 750;

long blinkMillis = 200; // Blinker delay

// Color Set Mode 1
int R = 0;
int G = 250;
int B = 0;

// Color Set Mode 2
int R_2 = 250;
int G_2 = 0;
int B_2 = 0;

// Color Set Mode 3
int R_3 = 0;
int G_3 = 0;
int B_3 = 250;

long FirstcurrentMillis = 0;
long FirstpreviousMillis = 0;

int ledState = LOW;

// Program Start //

void setup() {
    
  pinMode(PushbuttonPin, INPUT_PULLUP);  // initialize the button pin as a input:
//  Serial.begin(9600);         // initialize serial communication:
  pixels.begin();             // This initializes the NeoPixel library.
}

void loop() {
 
currentMillis = millis();

 // Push Button Counter
 if(currentMillis - PushButtonpreviousMillis > Pushinterval) 
  {
     buttonState = digitalRead(PushbuttonPin);
                     
    // compare the buttonState to its previous state
     if (buttonState != lastButtonState) 
     {
       // if the state has changed, increment the counter
        if (buttonState == HIGH) 
        {
           // if the current state is HIGH then the button
           // wend from off to on:
          buttonPushCounter++;
       //   Serial.println("on");
         // Serial.print("number of button pushes:  ");
          //Serial.println(buttonPushCounter);
        } 
        
         else
         {
         // if the current state is LOW then the button
         // wend from on to off:
       //   Serial.println("off"); 
         }
     }
       // save the current state as the last state, 
        //for next time through the loop
        lastButtonState = buttonState;
                            
       if (buttonPushCounter == NumberOfMode)
        {
          buttonPushCounter = 0; // reset buttonPushCounter
        }
  }  // Push Button Counter
             

//***************** Start Modes **********************//

  switch (buttonPushCounter)
  {
    case 0:
    
           for (int i = 0; i<NUMPIXELS; i++)
            {
                   pixels.setPixelColor(i, pixels.Color(0,0,0));  // All Leds OFF.
                   pixels.show(); // This sends the updated pixel color to the hardware.
            }
    
    break;

    case 1 : // Blink Mode Green

      FirstcurrentMillis = millis();
       
       if(FirstcurrentMillis - FirstpreviousMillis > blinkMillis)     
          {
             FirstpreviousMillis = FirstcurrentMillis;        
               if (ledState == LOW)
               {
                     for (int i = 0; i<NUMPIXELS; i++)
                     {
                     pixels.setPixelColor(i, pixels.Color(R,G,B)); 
                     pixels.show(); // This sends the updated pixel color to the hardware. 
                     ledState = HIGH;
                     }
             }
               else
               {
                     for (int i = 0; i<NUMPIXELS; i++)
                     {
                     pixels.setPixelColor(i, pixels.Color(0,0,0)); 
                     pixels.show(); // This sends the updated pixel color to the hardware.
                     ledState = LOW;
                   }
               }
                   }
    break;
    
    case 2 : // Blink Mode Red

      FirstcurrentMillis = millis();
       
       if(FirstcurrentMillis - FirstpreviousMillis > blinkMillis)     
          {
             FirstpreviousMillis = FirstcurrentMillis;        
               if (ledState == LOW)
               {
                     for (int i = 0; i<NUMPIXELS; i++)
                     {
                     pixels.setPixelColor(i, pixels.Color(R_2,G_2,B_2)); 
                     pixels.show(); // This sends the updated pixel color to the hardware. 
                     ledState = HIGH;
                     }
             }
               else
               {
                     for (int i = 0; i<NUMPIXELS; i++)
                     {
                     pixels.setPixelColor(i, pixels.Color(0,0,0)); 
                     pixels.show(); // This sends the updated pixel color to the hardware.
                     ledState = LOW;
                   }
               }
                   }
    break;
    
     case 3 : // Blink Mode Blu

      FirstcurrentMillis = millis();
       
       if(FirstcurrentMillis - FirstpreviousMillis > blinkMillis)     
          {
             FirstpreviousMillis = FirstcurrentMillis;        
               if (ledState == LOW)
               {
                     for (int i = 0; i<NUMPIXELS; i++)
                     {
                     pixels.setPixelColor(i, pixels.Color(R_3,G_3,B_3)); 
                     pixels.show(); // This sends the updated pixel color to the hardware. 
                     ledState = HIGH;
                     }
             }
               else
               {
                     for (int i = 0; i<NUMPIXELS; i++)
                     {
                     pixels.setPixelColor(i, pixels.Color(0,0,0)); 
                     pixels.show(); // This sends the updated pixel color to the hardware.
                     ledState = LOW;
                   }
               }
                   }
    break;
   
 } // end of loop
}
En espérant avoir donné envie de faire "blinker" vos zinzins dans le ciel.

Tom
Modifié en dernier par Tomdu38 le lun. 16 mars 2015 20:29, modifié 1 fois.


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

@Tomdu38: je pense que c'est Viméo qui merdouille, c'est déjà arrivé et c'est pénible.
Merci pour le code.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Salut,

Pour finir un petit schéma du montage.
Pour les connections entre l'attiny85 et le dos de la barre de led, j'ai utilisé des pattes de résistance (épaisses) avec de la petite gaine thermo autour pour avoir un "fils" rigide.

J'ai volontairement alimenté en +5V sur les pins restantes (en haut à gauche) pour éviter de souder plusieurs choses sur le même point.

Enjoy :
Montage.PNG
Tom
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Coucou, c'est encore moi avec mes problèmes !!
Alors, je teste un petit code pour une barrette adafruit sur une attiny85 20mhz, j'ai bien installé la librairie adafruit neopixel dans arduino 1.0.5 et j'ai des erreur en compilation
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp:674:3: error: #error "CPU SPEED NOT SUPPORTED"
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\/Adafruit_NeoPixel.h: In constructor 'Adafruit_NeoPixel::Adafruit_NeoPixel(uint16_t, uint8_t, uint8_t)':
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\/Adafruit_NeoPixel.h:85: warning: 'Adafruit_NeoPixel::type' will be initialized after
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\/Adafruit_NeoPixel.h:79: warning: 'uint8_t Adafruit_NeoPixel::brightness'
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp:36: warning: when initialized here
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp: In member function 'void Adafruit_NeoPixel::show()':
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp:102: warning: unused variable 'i'
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp:105: warning: unused variable 'b'
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp:106: warning: unused variable 'hi'
C:\Users\Dehas\Documents\Arduino\libraries\Adafruit_NeoPixel\Adafruit_NeoPixel.cpp:107: warning: unused variable 'lo'
Et voici le code

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h>

#define N_LEDS 8
#define PIN     4

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
}

int pos = 0, dir = 1; 

void loop() {
  int j;

  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 2, 0x100000); // Dark red
  strip.setPixelColor(pos - 1, 0x800000); // Medium red
  strip.setPixelColor(pos    , 0xFF3000); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x800000); // Medium red
  strip.setPixelColor(pos + 2, 0x100000); // Dark red

  strip.show();
  delay(30);

  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);

  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}
J'ai supprimé, remis 3 fois la librairie, changé de version d'arduino et toujours les même erreurs.
Si vous avez une idée je suis preneur.
Merci.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Salut, tu as suivi la procédure sur site pour le téléverser ? http://www.kobakant.at/DIY/?p=3742" onclick="window.open(this.href);return false;

Je regarde ton code. ;-)

A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Hello, voici le code qui doit marcher (je viens de le téléverser sans problème).

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h>

#define N_LEDS 8
#define DATA_PIN 4 // modif

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800); // modif DATA_PIN à la place de PIN

void setup() {
  strip.begin();
}

int pos = 0, dir = 1; 

void loop() {
  int j;

  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 2, 0x100000); // Dark red
  strip.setPixelColor(pos - 1, 0x800000); // Medium red
  strip.setPixelColor(pos    , 0xFF3000); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x800000); // Medium red
  strip.setPixelColor(pos + 2, 0x100000); // Dark red

  strip.show();
  delay(30);

  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);

  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}
Tu dois selectionner :

Pour la carte, dans le cas d'un Attiny85 : Attiny85 (internal 8 MHz clock ),
Pour le programmeur : Arduino as ISP, dans le cas où tu passes par un arduino pour programmer ton Attiny.

AVANT de téléverser : tu dois faire : dans outils :"Graver la séquence d'initialisation" (Burn Bootloader)

Ensuite tu peux téléverser.

Si ça marche tu devrais avoir 2 lignes rouges :

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85

N'en prends pas compte ! ;-)

Voilà !

Bon weekend


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

C'est bon, mon erreur venait que j'avais sélectionné attiny85 20mhz au lieu de 8mhz.
Sur pro mini mon code fonctionne, mais je n'arrive pas sur l'attiny, , je n'ai qu'une led d'allumée fixe en blanc.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Ok, tu as uploader ton code ??? ou celui que je t'ai envoyé ???

Tu veux faire quoi comme effet d'éclairage ?

A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Je fais des test sur une barrette adafruit de 8 leds.
Quand je fais "Graver la séquence d'initialisation", tout se passe bien et ensuite l'attiny ne répond plus, ça fait 2 qui qont HS :rougefaché:
Tu prends l'attiny85 20mhz ou la 8mhz pour le bootloader ??


Avatar du membre
Lunasix
Tricopter
Messages : 85
Enregistré le : mer. 18 mars 2015 19:02
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Lunasix »

Bonjour,

je ne suis pas spécialiste des ces processeurs, je ne les ai jamais utilisés. Mais il me semble avoir lu plusieurs fois qu'une configuration incorrecte des "fusibles" (bits en fait) de configuration, en particulier celle de l'horloge, pouvait rendre le processeur impossible à reprogrammer avec certains programmateurs, s'il n'y a plus d'horloge valide. Il faut alors soit connecter une horloge externe, soit utiliser un autre moyen de programmation. Donc, ne pas jeter ces processeurs, probablement pas morts.
Modifié en dernier par Lunasix le sam. 21 mars 2015 14:25, modifié 1 fois.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Attiny HS ?? je ne pense pas, essaie de leur envoyer un simple "blink" avec une led et une resistance ça devrait marché... De mon côté je l'ai fait plusieurs fois, pas de souci, je peux envoyer un programme en 20Mhz et 8Mhz.

Pour la carte, je sélectionne Attiny 85 en 8 Mhz, même si mon Attiny85 et en 20Mhz.

Je vais tester ton code.

Précise moi l'effet que tu veux avoir, peut être que je peux t'écrire un autre code qui fera la même chose.

A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Essaie ce code :

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h>

#define N_LEDS 8
#define DATA_PIN  1 // modif

Adafruit_NeoPixel strip = Adafruit_NeoPixel(N_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800); // modif DATA_PIN à la place de PIN

void setup() {
  strip.begin();
}

int pos = 0, dir = 1; 

void loop() {
  int j;

  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  strip.setPixelColor(pos - 2, 0x100000); // Dark red
  strip.setPixelColor(pos - 1, 0x800000); // Medium red
  strip.setPixelColor(pos    , 0xFF3000); // Center pixel is brightest
  strip.setPixelColor(pos + 1, 0x800000); // Medium red
  strip.setPixelColor(pos + 2, 0x100000); // Dark red

  strip.show();
  delay(30);

  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) strip.setPixelColor(pos+j, 0);

  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= strip.numPixels()) {
    pos = strip.numPixels() - 2;
    dir = -dir;
  }
}
Je viens de le tester sur un Attiny avec les Neopix fraichement reçu, ça marche !!! ça un fait un effet K2000 rapide ! lol


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Ton problème vient surement de la pin que tu utilises, si je ne dis pas de bétises les leds fonctionnent en "pwm", sur l'Attiny ce sont les PIN 0 et 1 qui permette le pwm.

Dans ton programme, tu souhaites utiliser la PIN 4 ... bref, c'est une hypothèse, en tout cas chez moi ça fonctionne.

A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Alors, les 2 attiny avec boot loader ne répondent plus, ni avec le programmeur, ni avec l'usbasp sur le soft avrdudess.
La 3eme avec le bootloader 8mhz et mon code fonctionne nickel, et c'est bien l'effet k2000 :mdr1:
Ce que je veux faire, c'est toujours une animation de led commandée par la voie des gaz, un peu plus complexe que ce que j'avais fait.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Tu as essayé de leur injecter un autre code, juste une led qui clignote, cette fois en sélectionnant Attiny85 20Mhz sans faire le burnbootloader ???
Sinon , peut être qu'un eeprom clear peu leur faire du bien !

A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Voila l'erreur que j'ai avec avrdudess
avrdude.exe: error: programm enable: target doesn't answer. 1
avrdude.exe: initialization failed, rc=-1
avrdude.exe: AVR device initialized and ready to accept instructions
avrdude.exe: Device signature = 0xffff75
avrdude.exe: Expected signature for ATtiny85 is 1E 93 0B
j'ai déjà essayé d'injecté un code mais rien, toujours la même erreur.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

D'accord, je vois... en tapant l'ensemble des erreurs sur Google, il y a d'autres personnes qui ont le même problème ... à voir.
Après, je ne pense pas que pour 1.25 dollars il faille se prendre trop la tête... Je peux te dépanner si besoin.

Bon dimanche !


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

N e t'en fais pas, je ne me prends pas la tête, mais j'aimerais comprendre pourquoi.
Tu as vus que dans le code, les couleur sont affichées par l'adresse, je ne trouve pas les autres couleurs, je persiste a chercher.
Bon dimanche a toi aussi.


Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Salut,

J'ai pris 5min pour modifier le code, pour que ce soit plus parlant au niveau des couleurs et de la luminosité :

Je l'ai testé sur un arduino Nano ça fonctionne (PIN D6)
J'ai laissé les couleurs dans la même partie du code, mais tu peux faire des variables en début de code par exemple.
Pour la luminosité tu fais varier la valeur de 0 à 255.

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h>
#include <avr/power.h>

#define DATA_PIN  6 // modif
#define NUMPIXELS 8

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, DATA_PIN  , NEO_GRB + NEO_KHZ800);

void setup() {
 pixels.begin(); // This initializes the NeoPixel library.
}

int pos = 0, dir = 1; 

void loop() {
  int j;

  // Draw 5 pixels centered on pos.  setPixelColor() will clip any
  // pixels off the ends of the strip, we don't need to watch for that.
  
  pixels.setPixelColor(pos - 2, pixels.Color(0,0,100)); // color R/G/B, brightness from 0 to 255
  pixels.show();
  pixels.setPixelColor(pos - 1, pixels.Color(0,0,100)); //  color R/G/B, brightness from 0 to 255
  pixels.show();
  pixels.setPixelColor(pos  , pixels.Color(0,0,100)); //  color R/G/B, brightness from 0 to 255
  pixels.show();
  pixels.setPixelColor(pos +1 , pixels.Color(0,0,100)); //  color R/G/B, brightness from 0 to 255
  pixels.show();
  pixels.setPixelColor(pos +2 , pixels.Color(0,0,100)); // color R/G/B, brightness from 0 to 255
  pixels.show();
  
  delay(30);

  // Rather than being sneaky and erasing just the tail pixel,
  // it's easier to erase it all and draw a new one next time.
  for(j=-2; j<= 2; j++) pixels.setPixelColor(pos+j, 0);

  // Bounce off ends of strip
  pos += dir;
  if(pos < 0) {
    pos = 1;
    dir = -dir;
  } else if(pos >= pixels.numPixels()) {
    pos = pixels.numPixels() - 2;
    dir = -dir;
  }
}
A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
attafr
Octocopter
Messages : 636
Enregistré le : ven. 15 mars 2013 23:25
Réputation : 0
Localisation : Genève (Bernex) CH

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par attafr »

L O,
Bon j'en peut plus... Impossible de programmer (installer le bootloader) sur des ATTiny45 via un arduino UNO !
J'ai suivi plusieurs tuto... qui ce ressemble tous, sur la façon de programmer un ATTiny via un Arduino UNO... Avec/sans condo etc...
Je finis par suspecter que le problème ne vien pas du montage, mais plutôt du modèle de ATTiny !?
Sur le "bidule" c'est écrit (j'ai pas pu faire de photo) :

"logo ATMEL" 1432
attiny45
20 PU

Comment vous les programmez vos ATTiny ? :155:

l'erreur :

Code : Tout sélectionner

Arduino : 1.6.3 (Windows 7), Carte : "ATtiny45 (internal 1 MHz clock)"

Erreur lors de la gravure de la séquence d'initialisation.

java.lang.NullPointerException

	at cc.arduino.packages.uploaders.SerialUploader.burnBootloader(SerialUploader.java:294)

	at processing.app.Editor$52.run(Editor.java:2649)

	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)

	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:749)

	at java.awt.EventQueue.access$500(EventQueue.java:97)

	at java.awt.EventQueue$3.run(EventQueue.java:702)

	at java.awt.EventQueue$3.run(EventQueue.java:696)

	at java.security.AccessController.doPrivileged(Native Method)

	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)

	at java.awt.EventQueue.dispatchEvent(EventQueue.java:719)

	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

  Ce rapport contiendrait plus d'informations si l'option
  "Montrer les informations de sortie pendant la compilation"
  était activée dans Fichier > Préférences.

A+


DJI F550, Radio Spektrum DX8i, Naza-M V2, Nacelle DYS/Alexmos
Carboncore Octo8, FrSky Taranis, Wookong-M, nacelle AV200 Brushless
JPay-K, Spider, 3/4S
Avatar du membre
Tomdu38
Pilote toutes catégories
Messages : 1104
Enregistré le : dim. 19 mai 2013 17:01
Réputation : 0

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Tomdu38 »

Salut, dans les différents liens du post tu trouveras des tutos qui expliquent super bien la méthode.

En version résumée :

Dans l'arduino UNO : tu téléverses le programme ARDUINO ISP, disponible dans "exemple" de l'IDE arduino de mémoire, ou dispo sur la toile.

Ensuite tu connectes ton Attiny sur l'arduino uno, selon les schémas qui vont biens, avec le condo entre reset et Gnd.

- Remarque : bricoler une petite plaque de prototypage qui vient se plugger sur les pins de l'arduino équipée d'un support Attiny c'est bien pratique... une plateforme de prototypage fonctionne aussi...

Puis tu sélectionnes la carte Attiny45, en 8mHz si c'est pour contrôler les néopixels, sinon tu peux laisser 20mHZ
Tu choisis le bon port usb de communication
Puis le bon programmateur : ici "Arduino ISP"

Puis tu fais un burnbootloader : en français : graver la séquence d'initialisation
Clique sur "vérifier" ton programme pour voir si tu n'as pas d'erreur de compilation

Puis téléverser dans l'attiny
Si tu as un Attiny45, fait attention à la taille de tes programmes qui peuvent être trop gros !

Dans la mesure du possible, fait toi peut être un petit montage teste avec une resistance et une led, et tu téléverses un "blink" pour voir si c'est ok !

Bon courage, A+


Service de découpe CNC pour les membres du forum NON DISPO POUR LE MOMENT
FPV Racer 250 (HomeMade)
*** In 4S high trust ***
Avatar du membre
attafr
Octocopter
Messages : 636
Enregistré le : ven. 15 mars 2013 23:25
Réputation : 0
Localisation : Genève (Bernex) CH

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par attafr »

Tomdu38 a écrit :Salut, dans les différents liens du post tu trouveras des tutos qui expliquent super bien la méthode.

En version résumée :

Dans l'arduino UNO : tu téléverses le programme ARDUINO ISP, disponible dans "exemple" de l'IDE arduino de mémoire, ou dispo sur la toile.

Ensuite tu connectes ton Attiny sur l'arduino uno, selon les schémas qui vont biens, avec le condo entre reset et Gnd.

- Remarque : bricoler une petite plaque de prototypage qui vient se plugger sur les pins de l'arduino équipée d'un support Attiny c'est bien pratique... une plateforme de prototypage fonctionne aussi...

Puis tu sélectionnes la carte Attiny45, en 8mHz si c'est pour contrôler les néopixels, sinon tu peux laisser 20mHZ
Tu choisis le bon port usb de communication
Puis le bon programmateur : ici "Arduino ISP"

Puis tu fais un burnbootloader : en français : graver la séquence d'initialisation
Clique sur "vérifier" ton programme pour voir si tu n'as pas d'erreur de compilation

Puis téléverser dans l'attiny
Si tu as un Attiny45, fait attention à la taille de tes programmes qui peuvent être trop gros !

Dans la mesure du possible, fait toi peut être un petit montage teste avec une resistance et une led, et tu téléverses un "blink" pour voir si c'est ok !

Bon courage, A+
Comme expliqué dans ma question... TOUT ce que tu viens de m'expliquer, je l'ai fait et compris !!!
C'est au moment d'envoyer la purée que cela ne fonctionne pas !!!
Au moment ou je clic installer bootloader... J'ai l'erreur (JAVA) comme dans le poste de ma question !
Merci, le principe j'ai compris !
Je pense pas que le problème vienne du sytème de programmation, mais plutôt du TINY ?!
A+


DJI F550, Radio Spektrum DX8i, Naza-M V2, Nacelle DYS/Alexmos
Carboncore Octo8, FrSky Taranis, Wookong-M, nacelle AV200 Brushless
JPay-K, Spider, 3/4S
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Tu as bien installé les attiny dans arduino ide ??
Voir ici http://playground.arduino.cc/Main/Ardui ... AtmelChips" onclick="window.open(this.href);return false;

Edit: arduino 1.6.x ne fonctionne pas ou mal avec les attiny, prends la version 1.0.6 et recommence.


Avatar du membre
attafr
Octocopter
Messages : 636
Enregistré le : ven. 15 mars 2013 23:25
Réputation : 0
Localisation : Genève (Bernex) CH

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par attafr »

Dehas a écrit :Tu as bien installé les attiny dans arduino ide ??
Voir ici http://playground.arduino.cc/Main/Ardui ... AtmelChips" onclick="window.open(this.href);return false;

Edit: arduino 1.6.x ne fonctionne pas ou mal avec les attiny, prends la version 1.0.6 et recommence.
Merci, oui, j'ai installé les attiny dans Arduino, par contre j'ai la 1.6.3 !
Je vais essayer avec une "vieille version" (mais ou va le monde ?!) !
A+


DJI F550, Radio Spektrum DX8i, Naza-M V2, Nacelle DYS/Alexmos
Carboncore Octo8, FrSky Taranis, Wookong-M, nacelle AV200 Brushless
JPay-K, Spider, 3/4S
Avatar du membre
Dehas
Administrateur du site
Messages : 16171
Enregistré le : ven. 3 juin 2011 12:50
Réputation : 5
Localisation : Saint Dié des Vosges
Genre :
Contact :

Re: Contrôler leds Neopixels (WS2812b) avec un bouton pousso

Message non lu par Dehas »

Et mets ta console java a jour !!


Répondre

Retourner vers « Codes et Programmations »