AccueilAccueil  MumbleMumble  Évènements  WIPs Team PP  RechercherRechercher  MembresMembres  S'enregistrerS'enregistrer  ConnexionConnexion  Liens  






Partagez | 
 

 [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2, 3 ... 8 ... 14  Suivant
AuteurMessage
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 11:18

Arf, ca fait 10 ans que j'ai pas fait de programme pour windows Smile, mais bon je vais faire un petit truc light en C#.

Je te propose une petite fenetre graphique pour entrée la taille (nombre de leds) pour 4 ledstrips (ca devrait suffire).
Un champs pour choisir le nom du port COM
Et un bouton Save pour l'envoyer en usb a l'arduino/wemos

Ca te va ?

Tu as besoin du code aussi pour le recevoir coté arduino et stocker/lire depuis l'eeprom ?
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 11:47

[Vous devez être inscrit et connecté pour voir ce lien] : pour le petit programme en C++, ça serait top Wink on peut même imaginer l'étendre pour gérer la config du DOF qui reste pas évidente pour le commun des mortels...

bon sinon j'ai tout installé, injecter le code que j'ai modifié et copier ton DOF modifié, mais je n'ai pas de réaction des ledstrips.

Peux-tu m'expliquer comment tu fais pour avoir un fichier log ou debug du DOF pour que je puisse affiner ma recherche.

sinon j'ai un petit soucis à la compilation du code ino, voici le message qu'il me met:

Code:

In file included from sketch\LedStrip.h:18:0,

                from C:\Users\deloa\Desktop\ArduinoStripController\ArduinoStripController.ino:8:

C:\Users\deloa\OneDrive\Documents\Arduino\libraries\FastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.003

 #    pragma message "FastLED version 3.001.003"

                    ^

In file included from C:\Users\deloa\Desktop\ArduinoStripController\ArduinoStripController.ino:8:0:

sketch\LedStrip.h: In member function 'int LedStrip::color(uint8_t, uint8_t, uint8_t)':

sketch\LedStrip.h:40:24: warning: left shift count >= width of type

        return (red << 16) | (green << 8) | blue;

                        ^

In file included from sketch\LedStrip.h:18:0,

                from sketch\LedStrip.cpp:2:

C:\Users\deloa\OneDrive\Documents\Arduino\libraries\FastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.003

 #    pragma message "FastLED version 3.001.003"

                    ^

In file included from sketch\LedStrip.cpp:2:0:

sketch\LedStrip.h: In member function 'int LedStrip::color(uint8_t, uint8_t, uint8_t)':

sketch\LedStrip.h:40:24: warning: left shift count >= width of type

        return (red << 16) | (green << 8) | blue;

                        ^

sketch\LedStrip.cpp: In member function 'void LedStrip::setPixel(uint32_t, int)':

sketch\LedStrip.cpp:58:25: warning: right shift count >= width of type

  leds[num].r=((color >> 16)& 0xFF);  // Shift the integer right 8 bits.

                        ^

Le croquis utilise 8208 octets (3%) de l'espace de stockage de programmes. Le maximum est de 253952 octets.
Les variables globales utilisent 3653 octets (44%) de mémoire dynamique, ce qui laisse 4539 octets pour les variables locales. Le maximum est de 8192 octets.


si tu as une idée d'où vient le problème  scratch
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 12:35

[Vous devez être inscrit et connecté pour voir ce lien], c++ c'est hasbeen, DOF est en C#
 
Pour les warning a la compil, j'ai la même chose, mais c'est pas grave  Smile

Pour le debug, il faut une wemos pour envoyer les traces en wifi, sinon avec une arduyino, faut mettre un deuxieme port serie en softwareserial et le connecter via un adaptateur usb FTDI pour récupérer les traces sur un deuxieme port com

Est-ce que tu as des traces dans le fichier de log de dof ? dans la version que je t'ai filé, j'affiche tous les ordres de DOF dans les logs (il faut activer les logs dans dofconfig, et regarder dans le fichier directoutpout.log)
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 13:11

[Vous devez être inscrit et connecté pour voir ce lien] : non mais déjà j'ai un problème de définition des leds car dans le code je vois qu'il y a un test des leds dans void setup et rien ne s'allume.
j'avoue que je suis un paumé avec les 3 fichiers le ino, le cpp et le h. ça m'embrouille.

Je vais faire des essais tantôt. 

Oui et puis désolé, mais je suis resté bloqué au C++
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 14:55

Pour le PIN, c'est dans LedStrip.cpp

#define DATA_PIN     12 // GPIO12 / D6 on WeMos/NodeMCU ESP8266
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 16:19

[Vous devez être inscrit et connecté pour voir ce lien] : ça je l'avais vu mais j'ai bien le bon PIN DATA mais ça bronche pas. Du coup, je suis reparti de ton code juste en enlevant la partie wifi

par contre j'ai le sentiment que je passe a coté de plein de chose du fait que le code part dans tous les sens lol!
du coup je n'arrive même à allumer une simple LED. Je ne comprends pas pourquoi ce code est si compliqué, avec autant de variable qui porte le même nom ou presque, pour moi y'a un tas de fonction zarbi qu'on pourrait éviter ou regrouper pour en faciliter la lecture, mais j'ose pas parce que je ne maîtrise pas toute la syntaxe.

Exemple choisi : rien que CRGB dans le code, pourquoi il y un * ? c'est même pas dans la doc de la librairie. Normalement c'est
CRGB leds[le_nombre_totale_de_leds)  scratch

Et puis pourquoi éparpiller le code sur 3 fichiers. C'est le code d'origine qui est fait comme ça ?  Suspect

Bref, ça fait 2 heures que j'essaie un peu tout et n'importe quoi et j'arrive même pas à avoir l'effet d'initialisation des leds du void_setup  drunken

Bref kakou, merci d'éclairer ma lanterne  


EDIT je vais tondre ma pelouse, ça va me détendre rire
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 18:12

Oui pour l'instant j'ai juste hacker a la sauvage le code du teensyledcontroller, mais y'a moyen de le purifier et simplifier un max, et surtout mettre dans un seul .ino

CRGB * c'est une référence (pointeur) vers un CRGB[]
du genre, le 
static CRGB *leds;
dans le fichier ledstrip.cpp
c'est une référence vers la déclaration 
CRGB leds[MaxLedsPerStrip];
du fichier aduino....ino

Tu as bien une masse comune ?
Sinon, essaie de brancher un voltmetre pour voir si tu as du jus qui sort du PIN data
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 18:41

[Vous devez être inscrit et connecté pour voir ce lien] : non t'inquiètes, tu penses bien que le premier truc que j'ai fait c'est de mettre un autre code voir si mes leds fonctionnent. C'est le cas, elles fonctionnes toutes parfaitement.

Non, mon soucis vient bien de ce code mais comme je lui enlève tout ce qui utilises le wifi, je me dis qu'il y a peut être une ligne qq part  qui merdouille.

Par contre le DOF envoie bien des requêtes que je trouve dans le log, donc de ce point de vue, je pense que c'est ok.

Faut que je trouve comme allumer ces leds et c'est tout Wink

Je vais lister les différentes variables déjà et je vais voire avec toi laquelle est quoi.

Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Sam 20 Mai 2017 - 19:36

ok pas de soucis
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 14:05

[Vous devez être inscrit et connecté pour voir ce lien] : bon j'ai résolu mon problème d'allumage de LED. J'ai réussi à faire fonctionner le void setup. Je suis en train de regrouper le code dans un seul .ino. j'avance doucement mais surement. Si je bloque je te partage le code ici.

peux tu m'expliquer comment fonctionne le code qui permet de recupérer le code par couleur

Code:

leds[num].b=(color & 0xFF);  // Take just the lowest 8 bits.
leds[num].g=((color >> 8)& 0xFF);  // Shift the integer right 8 bits.
leds[num].r=((color >> 16)& 0xFF);  // Shift the integer right 8 bits.

Pour info, je suis en train de simplifier toutes les fonctions et j'ai viré toutes les fonctions ledstrip.machinchose pour les rempalcer par des fonctions simples directement dans .ino. De plus j'ai dégager les fonctions qui servent à rien comme ledstrip.show, qui est égale à FastLED.show()

Bref plein de petites choses comme ça qui font que j'y vois plus clair

Je te tiens au jus
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 14:17

La couleur est stockée dans un entier de 32 bits
De droite a gauche, les 8 premiers encode le bleu, les 8 suivants le vert, et ensuite le rouge
Les opérations ci-dessous (on appel ça masquage) permettent de récupérer les couleurs (c'est de l'algèbre de boule [Vous devez être inscrit et connecté pour voir ce lien]  Smile

leds[num].b=(color & 0xFF);  // Take just the lowest 8 bits.
on vire les 28 premiers bits en faisant un & (et) entre la couleur et 0--28x0---01--8x1--1, le 1 permet de conserver le bit, le zéro l'efface (le met a zéro) 

leds[num].g=((color >> Cool& 0xFF);  // Shift the integer right 8 bits.
on décale de 8 bit a droite (>>Cool et on ne garde que les 8 dernier bit
 
leds[num].r=((color >> 16)& 0xFF);  // Shift the integer right 8 bits.
on décale de 16 bit a droite (>>Cool et on ne garde que les 8 dernier bit
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 14:38

[Vous devez être inscrit et connecté pour voir ce lien] Merci pour le tuyau, du coup j'ai un peu modifié l'opération...

...mais ça marche pas : voici l'erreur
Code:
2017.05.21 14:29:53.758 EXCEPTION: TeensyStripController LedStripController updater thread  could not connect to the controller. Thread will quit.
2017.05.21 14:29:53.758 EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 14:29:53.758 EXCEPTION: Message: Exception --> Expected a Ack (A) after setting the number of leds per channel, but received no answer or a unexpected answer. Will not send data to the controller.
2017.05.21 14:29:54.044 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.AdressableLedStrip.TeensyStripController.ConnectToController() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\AdressableLedStrip\TeensyStripController.cs:ligne 592
2017.05.21 14:29:54.048 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.OutputControllerCompleteBase.UpdaterThreadDoIt() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\OutputControllerCompleteBase.cs:ligne 333
2017.05.21 14:29:54.066 EXCEPTION: Targetsite: Void ConnectToController()
2017.05.21 14:29:54.079 Debug: Close Port

et voici le code ino :
Code:
/********************************************************************************************************
** Arduino Ledstrip Controller
********************************************************************************************************/
#define SERIAL_BUFFER_SIZE 1024 // Définie la taille du Buffer du port Série
#include <elapsedMillis.h> // Appel de la librairie permettant de gérer le clignotement d'une LED de contrôle
#include <FastLED.h>
//#include "LedStrip.h" // Appel du fichier LedStrip.h joint au présnet code ino.
#include <string.h>

//Definiton of Major and Minor part of the firmware version. This value can be received using the V command.
//If something is changed in the code the number should be increased.
#define FirmwareVersionMajor 1
#define FirmwareVersionMinor 1

//Defines the max number of ledstrip which is allowed per ledstriptrip.
//This number is fine for Teensy 3.2, 3.1. For newer Teensy versions (they dont exists yet) it might be possible to increase this number.
#define NombreLeds 106

//Defines the Pinnumber to which the built in led of the Teensy is connected.
//For Teensy 3.2, 3.1 this is pin 13, if you use a newer Teensy version (not available at the time of writing) you might need to change this number.
#define LedPin 10 // 10
#define DATA_PIN1 2 // ledstrip gauche
#define DATA_PIN2 3 // lestrip droit
#define BRIGHTNESS  150
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB

//Variable used to control the blinking and flickering of the led of the Teensy
elapsedMillis BlinkTimer;
int BlinkMode;
elapsedMillis BlinkModeTimeoutTimer;

#define UPDATES_PER_SECOND 100

CRGBArray<NombreLeds> leds;

//Setup of the system. Is called once on startup.
void setup()
{
        Serial.begin(9600);
        while(Serial.available()) {Serial.read();};
        delay(100);
        Serial.println("");

        //Initialize the lib for the ledstrip
        FastLED.addLeds<LED_TYPE, DATA_PIN1, COLOR_ORDER>(leds, NombreLeds/2).setCorrection( TypicalLEDStrip );
        FastLED.addLeds<LED_TYPE, DATA_PIN2, COLOR_ORDER>(leds, NombreLeds/2, NombreLeds/2).setCorrection( TypicalLEDStrip );
        FastLED.setBrightness(  BRIGHTNESS );
        //Initialize the led pin
        pinMode(LedPin,OUTPUT);

        SetBlinkMode(0);
        
        for(int ledNr=0; ledNr<NombreLeds; ledNr++)
        {
            LedSetPixel(ledNr, 255, 0, 0);
        }
        FastLED.show();
        delay(1000);

        ClearAllLedData();
        FastLED.show();
        delay(1000);

        for(int ledNr=0; ledNr<NombreLeds; ledNr++)
        {
            LedSetPixel(ledNr, 0, 255, 0);
        }
        FastLED.show();
        delay(1000);

        ClearAllLedData();
        FastLED.show();
        delay(1000);
      
        for(int ledNr=0; ledNr<NombreLeds; ledNr++)
        {
            LedSetPixel(ledNr, 0, 0, 255);
        }
        FastLED.show();
        delay(1000);

        ClearAllLedData();
        FastLED.show();
        delay(1000);      
}

static byte receivedByte;

//Main loop of the programm gets called again and again.
void loop()
{
 /*      
  static uint8_t hue;
  for(int i = 0; i < NombreLeds/2; i++)
  {  
    // fade everything out
    leds.fadeToBlackBy(40);

    // let's set an led value
    leds[i] = CHSV(hue++,255,255);

    // now, let's first 20 leds to the top 20 leds,
    leds(NombreLeds/2,NombreLeds-1) = leds(NombreLeds/2 - 1 ,0);
    FastLED.delay(33);
  }*/
        //ArduinoOTA.handle();
        //Check if data is available
    if (Serial.available() > 0)
    {
         receivedByte = Serial.read();
        
         /* #ifdef DEBUG_ON_WIFI
         wifidebug.tcp_receive_debug(receivedByte);
         #endif */
         switch (receivedByte) {
                case 'L': // ne sert à rien, la longueur du LedStrip est géré directement dans le code ino
                        //Set length of strips
                        //SetLedStripLength();
                        break;
                case 'F':
                        //Fill strip area with color
                        Fill();
                        break;
                case 'R':
                        //receive data for strips
                        ReceiveData();
                        break;
                case 'O':
                        //output data on strip
                        OutputData();
                        break;
                case 'C':
                        //Clears all previously received led data
                        ClearAllLedData();
                        break;
                case 'V':
                        //Send the firmware version
                        SendVersion();
                        break;
                case 'M': // ne sert à rien non plus
                        //Get max number of ledstrip per strip
                        SendMaxNumberOfLeds();
                        break;
                default:
                        // no unknown commands allowed. Send NACK (N)
                        Nack();
                        break;
                }
                SetBlinkMode(1);
        }
        Blink();
}

void LedSetPixel(uint32_t num, int red, int green, int blue)
{
    leds[num].b=(blue & 0xFF);  // Take just the lowest 8 bits.
    leds[num].g=(green & 0xFF);  // Shift the integer right 8 bits.
    leds[num].r=(red & 0xFF);  // Shift the integer right 8 bits.
}

//Sets the mode for the blinking of the led
void SetBlinkMode(int Mode)
{
    BlinkMode=Mode;
    BlinkModeTimeoutTimer=0;
}

//Controls the blinking of the led
void Blink() {
        switch(BlinkMode) {
        case 0:
                //Blinkmode 0 is only active after the start of the Teensy until the first command is received.
                if(BlinkTimer<1500) {
                        digitalWrite(LedPin,0);
                } else if(BlinkTimer<1600) {
                        digitalWrite(LedPin,1);
                } else {
                        BlinkTimer=0;
                        digitalWrite(LedPin,0);
                }
                break;
        case 1:
                //Blinkmode 1 is activated when the Teensy receives a command
                //Mode expires 500ms after the last command has been received resp. mode has been set
                if(BlinkTimer>30) {
                        BlinkTimer=0;
                        digitalWrite(LedPin,!digitalRead(LedPin));
                }
                if(BlinkModeTimeoutTimer>500) {
                        SetBlinkMode(2);
                }
                break;
        case 2:
                //Blinkmode 2 is active while the Teensy is waiting for more commands
                if(BlinkTimer<1500) {
                        digitalWrite(LedPin,0);
                } else if(BlinkTimer<1600) {
                        digitalWrite(LedPin,1);
                } else if(BlinkTimer<1700) {
                        digitalWrite(LedPin,0);
                } else if(BlinkTimer<1800) {
                        digitalWrite(LedPin,1);
                }else {
                        BlinkTimer=0;
                        digitalWrite(LedPin,0);
                }
        default:
                //This should never be active
                //The code is only here to make it easier to determine if a wrong Blinkcode has been set
                if(BlinkTimer>2000) {
                        BlinkTimer=0;
                        digitalWrite(LedPin,!digitalRead(LedPin));
                }
                break;
        }
}

//Outputs the data in the ram to the ledstriptrips
void OutputData()
{
        FastLED.show();
        Ack();
}

//Fills the given area of a ledstriptrip with a color
void Fill()
{
        word firstLed=ReceiveWord();
        word numberOfLeds=ReceiveWord();
        int ColorData=ReceiveColorData();

        if( firstLed<=NombreLeds && numberOfLeds>0 && firstLed+numberOfLeds-1<=NombreLeds )
        {
            word endLedNr=firstLed+numberOfLeds;
            for(word ledNr=firstLed; ledNr<endLedNr; ledNr++)
            {
                LedSetPixel(ledNr, (ColorData & 0xFF), ((ColorData >> 8)& 0xFF), ((ColorData >> 16)& 0xFF));
            }
            Ack();
        } else
        {
            //Number of the first led or the number of ledstrip to receive is outside the allowed range
            Nack();
        }
}

//Receives data for the ledstriptrips
void ReceiveData()
{
        word firstLed=ReceiveWord();
        word numberOfLeds=ReceiveWord();
        int ColorData=ReceiveColorData();
        
        if( firstLed<=NombreLeds && numberOfLeds>0 && firstLed+numberOfLeds-1<=NombreLeds ) {
                //FirstLedNr and numberOfLeds are valid.
                //Receive and set color data

                word endLedNr=firstLed+numberOfLeds;
                int i=0;
                for(word ledNr=firstLed; ledNr<endLedNr; ledNr++)
                {
                  i++;
                  LedSetPixel(ledNr,(ColorData & 0xFF), ((ColorData >> 8)& 0xFF), ((ColorData >> 16)& 0xFF));
                }
                Ack();

        } else
        {
                //Number of the first led or the number of ledstrip to receive is outside the allowed range
                Nack();
        }
}

//Clears the data for all configured ledstrip
void  ClearAllLedData()
{
    for(int ledNr=0; ledNr<NombreLeds; ledNr++)
    {
        leds[ledNr]=CRGB::Black;
    }
    Ack();
}

//Sends the firmware version
void SendVersion() {
        Serial.write(FirmwareVersionMajor);
        Serial.write(FirmwareVersionMinor);
        Ack();
}

//Sends the max number of ledstrip per strip
void SendMaxNumberOfLeds() {
        byte B=NombreLeds>>8;
        Serial.write(B);
        B=NombreLeds&255;
        Serial.write(B);
        Ack();
}

//Sends a ack (A)
void Ack() {
        Serial.write('A');
}

//Sends a NACK (N)
void Nack() {
        Serial.write('N');
}

//Receives 3 bytes of color data.
int ReceiveColorData() {
        while(!Serial.available()) {};
        int colorValue=Serial.read();
        while(!Serial.available()) {};
        colorValue=(colorValue<<8)|Serial.read();
        while(!Serial.available()) {};
        colorValue=(colorValue<<8)|Serial.read();
        return colorValue;
}

//Receives a word value. High byte first, low byte second
word ReceiveWord() {
        while(!Serial.available()) {};
        word wordValue=Serial.read()<<8;
        while(!Serial.available()) {};
        wordValue=wordValue|Serial.read();
        return wordValue;
}

on voit que le DOF attend un Ack mais ne le reçoit pas donc ça s'arrête là. Reste à savoir si ça vient de l'ino ou du DOF
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 15:07

a mon avis ca vient de la, DOF envoi la taille, et il attend un A de l'arudino, mais elle envoi rien comme tu as commenté le code.
Faut bien faire attention a ce que la communication soit synchrone (DOF envoi un truc, que l'arduino doit lire, meme si tu t'en sers pas et l'arduino doit repondre) : 
                case 'L': // ne sert à rien, la longueur du LedStrip est géré directement dans le code ino 
                        //Set length of strips
                        //SetLedStripLength();
                        break;
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 15:15

oui j'ai corrigé, j'ai mis ça
Code:
               case 'L': // ne sert à rien, la longueur du LedStrip est géré directement dans le code ino
                        //Set length of strips
                        //SetLedStripLength();
                        Ack();
                        break;

mais du coup maintenant j'ai ça :

Code:
2017.05.21 15:02:28.266 EXCEPTION: TeensyStripController LedStripController updater thread  could not connect to the controller. Thread will quit.
2017.05.21 15:02:28.266 EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 15:02:28.267 EXCEPTION: Message: Exception --> Expected a Ack (A) after clearing the buffer of the TeensyStripController, but received no answer or a unexpected answer. Will not send data to the controller.
2017.05.21 15:02:28.660 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.AdressableLedStrip.TeensyStripController.ConnectToController() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\AdressableLedStrip\TeensyStripController.cs:ligne 612
2017.05.21 15:02:28.661 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.OutputControllerCompleteBase.UpdaterThreadDoIt() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\OutputControllerCompleteBase.cs:ligne 333
2017.05.21 15:02:28.673 EXCEPTION: Targetsite: Void ConnectToController()

Alors là, tout dépend ce que DOF appelle "clearing the buffer of the TeensyStripController". Parce que dans ma fonction ClearAllLedData(), j'ai bien mis le Ack()
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 15:21

tu as mis un ack(), mais t'on arduino a pas lu la valeur de taille ledstrip que DOF lui a envoyé, du coup la communication est désynchronisée Smile
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Dim 21 Mai 2017 - 15:52

[Vous devez être inscrit et connecté pour voir ce lien] : on avance, j'ai remis la fonction SetLedStripLength() et du coup ça communique :

Code:
2017.05.21 15:49:08.972 TeensyStripController LedStripController updater thread  has connected to TeensyStripController LedStripController.
2017.05.21 15:49:09.007 Debug: CommandData (O,firstled,firstled,NBLeds,NBLeds): new byte[] { 82, 0, 0, 0, 106 }
2017.05.21 15:49:09.007 Debug: OutputValues (size) (Color, 3 bytes per color): 106 new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
2017.05.21 15:49:09.213 EXCEPTION: TeensyStripController LedStripController updater thread  could not send update for TeensyStripController LedStripController: Received no answer or a unexpected answer while waiting for the ACK after sending the output command (O) to the TeensyStripController. Will try again.
2017.05.21 15:49:09.214 EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 15:49:09.214 EXCEPTION: Message: Exception --> Received no answer or a unexpected answer while waiting for the ACK after sending the output command (O) to the TeensyStripController
2017.05.21 15:49:09.218 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.AdressableLedStrip.TeensyStripController.UpdateOutputs(Byte[] OutputValues) dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\AdressableLedStrip\TeensyStripController.cs:ligne 335
2017.05.21 15:49:09.218 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.OutputControllerCompleteBase.UpdaterThreadDoIt() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\OutputControllerCompleteBase.cs:ligne 365
2017.05.21 15:49:09.218 EXCEPTION: Targetsite: Void UpdateOutputs(Byte[])
2017.05.21 15:49:09.218 Warning: TeensyStripController LedStripController updater thread  tries to reconnect to TeensyStripController LedStripController.
2017.05.21 15:49:09.218 Debug: Close Port
2017.05.21 15:49:09.354 Debug: Open Port
2017.05.21 15:49:14.747 TeensyStripController LedStripController updater thread  has reconnected to TeensyStripController LedStripController.
2017.05.21 15:49:14.848 Debug: CommandData (O,firstled,firstled,NBLeds,NBLeds): new byte[] { 82, 0, 0, 0, 106 }
2017.05.21 15:49:14.848 Debug: OutputValues (size) (Color, 3 bytes per color): 106 new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
2017.05.21 15:49:15.054 EXCEPTION: TeensyStripController LedStripController updater thread  could still not send update for TeensyStripController LedStripController: Received no answer or a unexpected answer while waiting for the ACK after sending the output command (O) to the TeensyStripController. Thread will quit.
2017.05.21 15:49:15.054 EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 15:49:15.054 EXCEPTION: Message: Exception --> Received no answer or a unexpected answer while waiting for the ACK after sending the output command (O) to the TeensyStripController
2017.05.21 15:49:15.054 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.AdressableLedStrip.TeensyStripController.UpdateOutputs(Byte[] OutputValues) dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\AdressableLedStrip\TeensyStripController.cs:ligne 335
2017.05.21 15:49:15.054 EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.OutputControllerCompleteBase.UpdaterThreadDoIt() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\OutputControllerCompleteBase.cs:ligne 404
2017.05.21 15:49:15.054 EXCEPTION: Targetsite: Void UpdateOutputs(Byte[])
2017.05.21 15:49:15.054 Debug: Close Port

J'ai essayé ton code sans trop de modif et ça bloque presque de la même façon :

Code:
2017.05.21 17:03:34.127   TeensyStripController LedStripController updater thread  has connected to TeensyStripController LedStripController.
2017.05.21 17:03:34.136   Debug: CommandData (O,firstled,firstled,NBLeds,NBLeds): new byte[] { 82, 0, 0, 0, 106 }
2017.05.21 17:03:34.137   Debug: OutputValues (size) (Color, 3 bytes per color): 106 new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
2017.05.21 17:03:34.573   EXCEPTION: TeensyStripController LedStripController updater thread  could not send update for TeensyStripController LedStripController: A exception occured while waiting for the ACK after sending the data for channel 1 of the TeensyStripController.. Will try again.
2017.05.21 17:03:34.573   EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 17:03:34.573   EXCEPTION: Message: Exception --> A exception occured while waiting for the ACK after sending the data for channel 1 of the TeensyStripController.
2017.05.21 17:03:34.826   EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.AdressableLedStrip.TeensyStripController.UpdateOutputs(Byte[] OutputValues) dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\AdressableLedStrip\TeensyStripController.cs:ligne 309
2017.05.21 17:03:34.853   EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.OutputControllerCompleteBase.UpdaterThreadDoIt() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\OutputControllerCompleteBase.cs:ligne 365
2017.05.21 17:03:34.966   EXCEPTION: Targetsite: Void UpdateOutputs(Byte[])
2017.05.21 17:03:35.048   EXCEPTION: InnerException 1: TimeoutException --> Le délai d'attente de l'opération a expiré.
2017.05.21 17:03:35.048   Warning: TeensyStripController LedStripController updater thread  tries to reconnect to TeensyStripController LedStripController.
2017.05.21 17:03:35.048   Debug: Close Port
2017.05.21 17:03:35.155   Debug: Open Port
2017.05.21 17:03:44.480   EXCEPTION: Could not put the controller on com-port COM4 into the commandmode. Will not send data to the controller.
2017.05.21 17:03:44.480   EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 17:03:44.480   Debug: Close Port
2017.05.21 17:03:44.487   TeensyStripController LedStripController updater thread  has reconnected to TeensyStripController LedStripController.
2017.05.21 17:03:44.594   EXCEPTION: TeensyStripController LedStripController updater thread  could still not send update for TeensyStripController LedStripController: Comport is not initialized. Thread will quit.
2017.05.21 17:03:44.594   EXCEPTION: Thread: TeensyStripController LedStripController updater thread
2017.05.21 17:03:44.595   EXCEPTION: Message: Exception --> Comport is not initialized
2017.05.21 17:03:44.595   EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.AdressableLedStrip.TeensyStripController.UpdateOutputs(Byte[] OutputValues) dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\AdressableLedStrip\TeensyStripController.cs:ligne 279
2017.05.21 17:03:44.595   EXCEPTION: Stacktrace:    à DirectOutput.Cab.Out.OutputControllerCompleteBase.UpdaterThreadDoIt() dans C:\Users\arcade\Desktop\DirectOutput-3f16f7ef06b928429aa1bb3a9c3f4a17bc8a50e0\DirectOutput\Cab\Out\OutputControllerCompleteBase.cs:ligne 404
2017.05.21 17:03:44.595   EXCEPTION: Targetsite: Void UpdateOutputs(Byte[])
2017.05.21 17:04:47.716   Finishing framework



Par contre toujours pas d'effet sur les ledstrips. Bizarrement il semble bloqué sur l'envoi de Outputdata() qui ne fait rien d'autre que de lancer FastLedShow(). Toujours un problème de désynchronistaion selon toi ?

EDIT

t'as moyen de tester mon code de ton côté ?
Code:
/********************************************************************************************************
** Arduino Ledstrip Controller
********************************************************************************************************/
#define SERIAL_BUFFER_SIZE 1024 // Définie la taille du Buffer du port Série
#include <elapsedMillis.h> // Appel de la librairie permettant de gérer le clignotement d'une LED de contrôle
#include <FastLED.h>
//#include "LedStrip.h" // Appel du fichier LedStrip.h joint au présnet code ino.
#include <string.h>

//Definiton of Major and Minor part of the firmware version. This value can be received using the V command.
//If something is changed in the code the number should be increased.
#define FirmwareVersionMajor 1
#define FirmwareVersionMinor 1

//Defines the max number of ledstrip which is allowed per ledstriptrip.
//This number is fine for Teensy 3.2, 3.1. For newer Teensy versions (they dont exists yet) it might be possible to increase this number.
#define NombreLeds 106

//Defines the Pinnumber to which the built in led of the Teensy is connected.
//For Teensy 3.2, 3.1 this is pin 13, if you use a newer Teensy version (not available at the time of writing) you might need to change this number.
#define LedPin 10 // 10
#define DATA_PIN1 2 // ledstrip gauche
#define DATA_PIN2 3 // lestrip droit
#define BRIGHTNESS  150
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB

//Variable used to control the blinking and flickering of the led of the Teensy
elapsedMillis BlinkTimer;
int BlinkMode;
elapsedMillis BlinkModeTimeoutTimer;

#define UPDATES_PER_SECOND 100

CRGBArray<NombreLeds> leds;

//LedStrip ledstrip(NombreLeds,leds);
word configuredStripLength=53; // Nombre de leds par strip

//Setup of the system. Is called once on startup.
void setup()
{
        Serial.begin(9600);
        while(Serial.available()) {Serial.read();};
        delay(100);
        Serial.println("");

        //Initialize the lib for the ledstrip
        FastLED.addLeds<LED_TYPE, DATA_PIN1, COLOR_ORDER>(leds, NombreLeds/2).setCorrection( TypicalLEDStrip );
        FastLED.addLeds<LED_TYPE, DATA_PIN2, COLOR_ORDER>(leds, NombreLeds/2, NombreLeds/2).setCorrection( TypicalLEDStrip );
        FastLED.setBrightness(  BRIGHTNESS );
        //Initialize the led pin
        pinMode(LedPin,OUTPUT);

        SetBlinkMode(0);
        
        for(int ledNr=0; ledNr<NombreLeds; ledNr++)
        {
            LedSetPixel(ledNr, 255, 0, 0);
        }
        FastLED.show();
        delay(1000);

        ClearAllLedData();
        FastLED.show();
        delay(1000);

        for(int ledNr=0; ledNr<NombreLeds; ledNr++)
        {
            LedSetPixel(ledNr, 0, 255, 0);
        }
        FastLED.show();
        delay(1000);

        ClearAllLedData();
        FastLED.show();
        delay(1000);
      
        for(int ledNr=0; ledNr<NombreLeds; ledNr++)
        {
            LedSetPixel(ledNr, 0, 0, 255);
        }
        FastLED.show();
        delay(1000);

        ClearAllLedData();
        FastLED.show();
        delay(1000);      
}

static byte receivedByte;

//Main loop of the programm gets called again and again.
void loop()
{
 /*      
  static uint8_t hue;
  for(int i = 0; i < NombreLeds/2; i++)
  {  
    // fade everything out
    leds.fadeToBlackBy(40);

    // let's set an led value
    leds[i] = CHSV(hue++,255,255);

    // now, let's first 20 leds to the top 20 leds,
    leds(NombreLeds/2,NombreLeds-1) = leds(NombreLeds/2 - 1 ,0);
    FastLED.delay(33);
  }*/
        //ArduinoOTA.handle();
        //Check if data is available
    if (Serial.available() > 0)
    {
         receivedByte = Serial.read();
        
         /* #ifdef DEBUG_ON_WIFI
         wifidebug.tcp_receive_debug(receivedByte);
         #endif */
         switch (receivedByte) {
                case 'L': // ne sert à rien, la longueur du LedStrip est géré directement dans le code ino
                        //Set length of strips
                        SetLedStripLength();
                        break;
                case 'F':
                        //Fill strip area with color
                        Fill();
                        break;
                case 'R':
                        //receive data for strips
                        ReceiveData();
                        break;
                case 'O':
                        //output data on strip
                        OutputData();
                        break;
                case 'C':
                        //Clears all previously received led data
                        ClearAllLedData();
                        break;
                case 'V':
                        //Send the firmware version
                        SendVersion();
                        break;
                case 'M': // ne sert à rien non plus
                        //Get max number of ledstrip per strip
                        SendMaxNumberOfLeds();
                        break;
                default:
                        // no unknown commands allowed. Send NACK (N)
                        Nack();
                        break;
                }
                SetBlinkMode(1);
        }
        Blink();
}

void LedSetPixel(uint32_t num, int red, int green, int blue)
{
    leds[num].b=(blue & 0xFF);  // Take just the lowest 8 bits.
    leds[num].g=(green & 0xFF);  // Shift the integer right 8 bits.
    leds[num].r=(red & 0xFF);  // Shift the integer right 8 bits.
}

//Sets the mode for the blinking of the led
void SetBlinkMode(int Mode)
{
    BlinkMode=Mode;
    BlinkModeTimeoutTimer=0;
}

//Controls the blinking of the led
void Blink() {
        switch(BlinkMode) {
        case 0:
                //Blinkmode 0 is only active after the start of the Teensy until the first command is received.
                if(BlinkTimer<1500) {
                        digitalWrite(LedPin,0);
                } else if(BlinkTimer<1600) {
                        digitalWrite(LedPin,1);
                } else {
                        BlinkTimer=0;
                        digitalWrite(LedPin,0);
                }
                break;
        case 1:
                //Blinkmode 1 is activated when the Teensy receives a command
                //Mode expires 500ms after the last command has been received resp. mode has been set
                if(BlinkTimer>30) {
                        BlinkTimer=0;
                        digitalWrite(LedPin,!digitalRead(LedPin));
                }
                if(BlinkModeTimeoutTimer>500) {
                        SetBlinkMode(2);
                }
                break;
        case 2:
                //Blinkmode 2 is active while the Teensy is waiting for more commands
                if(BlinkTimer<1500) {
                        digitalWrite(LedPin,0);
                } else if(BlinkTimer<1600) {
                        digitalWrite(LedPin,1);
                } else if(BlinkTimer<1700) {
                        digitalWrite(LedPin,0);
                } else if(BlinkTimer<1800) {
                        digitalWrite(LedPin,1);
                }else {
                        BlinkTimer=0;
                        digitalWrite(LedPin,0);
                }
        default:
                //This should never be active
                //The code is only here to make it easier to determine if a wrong Blinkcode has been set
                if(BlinkTimer>2000) {
                        BlinkTimer=0;
                        digitalWrite(LedPin,!digitalRead(LedPin));
                }
                break;
        }
}

//Outputs the data in the ram to the ledstriptrips
void OutputData()
{
        FastLED.show();
        Ack();
}

//Fills the given area of a ledstriptrip with a color
void Fill()
{
        word firstLed=ReceiveWord();
        word numberOfLeds=ReceiveWord();
        int ColorData=ReceiveColorData();

        if( firstLed<=NombreLeds && numberOfLeds>0 && firstLed+numberOfLeds-1<=NombreLeds )
        {
            word endLedNr=firstLed+numberOfLeds;
            for(word ledNr=firstLed; ledNr<endLedNr; ledNr++)
            {
                LedSetPixel(ledNr, (ColorData & 0xFF), ((ColorData >> 8)& 0xFF), ((ColorData >> 16)& 0xFF));
            }
            Ack();
        } else
        {
            //Number of the first led or the number of ledstrip to receive is outside the allowed range
            Nack();
        }
}

//Receives data for the ledstriptrips
void ReceiveData()
{
        word firstLed=ReceiveWord();
        word numberOfLeds=ReceiveWord();
        int ColorData=ReceiveColorData();
        
        if( firstLed<=NombreLeds && numberOfLeds>0 && firstLed+numberOfLeds-1<=NombreLeds ) {
                //FirstLedNr and numberOfLeds are valid.
                //Receive and set color data

                word endLedNr=firstLed+numberOfLeds;
                int i=0;
                for(word ledNr=firstLed; ledNr<endLedNr; ledNr++)
                {
                  i++;
                  LedSetPixel(ledNr,(ColorData & 0xFF), ((ColorData >> 8)& 0xFF), ((ColorData >> 16)& 0xFF));
                }
                Ack();

        } else
        {
                //Number of the first led or the number of ledstrip to receive is outside the allowed range
                Nack();
        }
}

void SetLedStripLength()
{
        word stripLength=ReceiveWord();
        if(stripLength<1 || stripLength>NombreLeds) {
                //stripLength is either to small or above the max number of ledstrip allowed
                Nack();
        } else
        {
                //stripLength is in the valid range
                configuredStripLength=stripLength;
                //ledstrip.setStripLength(stripLength);
                //ledstrip.begin(); //Reinitialize the OctoWS2811 lib (not sure if this is needed)
                Ack();
        }
}
//Clears the data for all configured ledstrip
void  ClearAllLedData()
{
    for(int ledNr=0; ledNr<NombreLeds; ledNr++)
    {
        leds[ledNr]=CRGB::Black;
    }
    Ack();
}

//Sends the firmware version
void SendVersion() {
        Serial.write(FirmwareVersionMajor);
        Serial.write(FirmwareVersionMinor);
        Ack();
}

//Sends the max number of ledstrip per strip
void SendMaxNumberOfLeds() {
        byte B=NombreLeds>>8;
        Serial.write(B);
        B=NombreLeds&255;
        Serial.write(B);
        Ack();
}

//Sends a ack (A)
void Ack() {
        Serial.write('A');
}

//Sends a NACK (N)
void Nack() {
        Serial.write('N');
}

//Receives 3 bytes of color data.
int ReceiveColorData() {
        while(!Serial.available()) {};
        int colorValue=Serial.read();
        while(!Serial.available()) {};
        colorValue=(colorValue<<8)|Serial.read();
        while(!Serial.available()) {};
        colorValue=(colorValue<<8)|Serial.read();
        return colorValue;
}

//Receives a word value. High byte first, low byte second
word ReceiveWord() {
        while(!Serial.available()) {};
        word wordValue=Serial.read()<<8;
        while(!Serial.available()) {};
        wordValue=wordValue|Serial.read();
        return wordValue;
}
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
manples

avatar

Messages : 244
Département : Texas

MessageSujet: [INFO] Wemos D1   Jeu 22 Juin 2017 - 23:41

Oui j'en suis convaincu, ça doit claquer.

La lumière est justement au coeur des 3 toys qui me manquent: Pin2DMD, lightbar, RGB undercab.

Bientôt un tuto "Rayban ou Oakley pour VPX 10.4?" ;-)
Revenir en haut Aller en bas
ced

avatar

Messages : 6224
Département : caen

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 0:52

je te conseille aussi le teensy controller par rapport a la lightbar  Cool Cool Cool Shocked Shocked Shocked mème si une lightbar c'est déja sympa , le teensy controller c'est encore un cran au dessus niveau animation
Revenir en haut Aller en bas
http://www.youtube.com/user/pezima77 En ligne
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 8:14

Oui ca change carrément de la lightbar.
On a fait une version pas cher avec [Vous devez être inscrit et connecté pour voir ce lien] du controller avec une carte a 5€ au lieu de la teensy qui coute un max a importer.
Regarde les videos à la fin de mon WIP si tu veux voir ce que ca donne.
Moi ca m'a couté 2x17€ pour les ledstrip + 5€ la carte
Revenir en haut Aller en bas
Aetios

avatar

Messages : 1334
Département : 50

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 8:19

Oui faut que je fasse le tuto d'ailleurs, pas trop le temps en ce moment. Razz
Revenir en haut Aller en bas
https://www.facebook.com/TheFrenchclanclan/
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 8:27

[Vous devez être inscrit et connecté pour voir ce lien], si quelqu'un veux tester ca fera une bonne motivation pour le faire Smile
Revenir en haut Aller en bas
ced

avatar

Messages : 6224
Département : caen

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 10:56

ça m'intéresse énormément ta solution kakou   (il y a des infos sur ton wip je crois...)

il faut que je commande le matos et c'est parti 
Revenir en haut Aller en bas
http://www.youtube.com/user/pezima77 En ligne
kakou

avatar

Messages : 545
Département : 18

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 10:59

[Vous devez être inscrit et connecté pour voir ce lien] super, ca fonctionne sans problème chez [Vous devez être inscrit et connecté pour voir ce lien] et moi.
Prends bien une "wemos D1 mini pro" comme carte surtout, toutes les infos sont sur mon WIP pour l'instant, un tuto viendra par la suite Smile
Revenir en haut Aller en bas
ced

avatar

Messages : 6224
Département : caen

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 11:32

c'est cool , merci kakou 

tu l'as acheté sur aliexpress la carte ?
Revenir en haut Aller en bas
http://www.youtube.com/user/pezima77 En ligne
peskopat
Admin
avatar

Messages : 6645
Département : 54

MessageSujet: Re: [TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO   Ven 23 Juin 2017 - 12:30

Sur ebay même pas 5€ [Vous devez être inscrit et connecté pour voir ce lien] [Vous devez être inscrit et connecté pour voir ce lien] j'en ai pris 2 .


Mes tutos : [Vous devez être inscrit et connecté pour voir ce lien][Vous devez être inscrit et connecté pour voir ce lien][Vous devez être inscrit et connecté pour voir ce lien][Vous devez être inscrit et connecté pour voir ce lien]
Mes ventes : [Vous devez être inscrit et connecté pour voir ce lien]
Mes liens : [Vous devez être inscrit et connecté pour voir ce lien][Vous devez être inscrit et connecté pour voir ce lien][Vous devez être inscrit et connecté pour voir ce lien]
Mon pincab : [Vous devez être inscrit et connecté pour voir ce lien]
Revenir en haut Aller en bas
https://www.youtube.com/channel/UCYIgslcMXdZ194XWO8JEfjQ
 
[TUTO] Pilotage de Ledstrip adressable style "Teensy" via WEMOS D1 PRO
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 14Aller à la page : Précédent  1, 2, 3 ... 8 ... 14  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
 :: Pincab :: Tutoriels :: [TUTOS] Toys & accessoires-
Sauter vers: