Débuguage et optimisation code.

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: Débuguage et optimisation code.

Message non lu par Tomdu38 »

Salut,

Pour lire une entrée pwm sur attiny, il faut reprendre un code vu précédemment.

Code : Tout sélectionner

    int channel = 3; 
    const int  PwmInputPin = 0;
    unsigned long duration = 0;
    
    void setup() {

    pinMode(PwmInputPin, INPUT_PULLUP);
   
    }

    void loop() {
     
     duration = pulseIn(channel, HIGH, 25000);
     if (duration < 1500)
     {
       // code 
     }
    }
Dans la boucle du if, il faut mettre le code que l'on veut.

Le truc qui m'échappe, c'est dans la syntaxe du PulseIn... Sur le forum arduino, la première variable pris en compte,dans la fonctionne "PulseIn" est "channel" qui devrait être la pin d'entrée... or dans les tests vus précédemment dans ce même poste, "channel" est une variable qui déclenche la lecture du ppm sur la voie 3 (int channel = 3 ;)

La question que je me pose, puisque dans cette syntaxe, "duration = pulseIn(channel, HIGH, 25000);" on ne déclare à aucun endroit la pin Input, comment l'arduino c'est qu'il faut lire la pin 0....

Pour résumer, je me pose la question de pourquoi ça marche ???? c'est con hein !!!


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: Débuguage et optimisation code.

Message non lu par Dehas »

Alors pourquoi tu te casse la tête ??
Le code est pas mal, mais je l'aimerais en SBUS converti pour ATtiny.


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

Re: Débuguage et optimisation code.

Message non lu par Tomdu38 »

Pour le montage que tu as fait précédemment, tu as connecté quelle voie sur quelle Pin de l'arduino ?
Tu est bien en PPM ??? et pas en Pwm avec la voie 3 de ton rx directement sur la Pin 3 de l'Attiny ???

Dac pour le Sbus, je vais regarder.

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: Débuguage et optimisation code.

Message non lu par Dehas »

J'ai même pas pu le compiler, donc pas essayé, dans l’entête du code il y a ça

Code : Tout sélectionner

    /* CPPM2LED
      goebish 2014
      for m328 @ 16 MHz
      Date 01/03/2015 --> attafr
      Date 03/03/2015 --> Jeff
    */
Il est bien prévu pour un 328 (promini, micro etc)


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

Re: Débuguage et optimisation code.

Message non lu par Tomdu38 »

Pour le ppm, je ne vois pas de problème particulier, tu l'as déjà fait avec ta barre led non ? Je me souvient d'un montage avec un Attiny...

Pour le Sbus, je suppose que tu veux le faire sans converter ppm ? je suis en train de regarder comme ça se passe.

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: Débuguage et optimisation code.

Message non lu par Dehas »

Bon, je me suis fais un petit truc avec des bout de code trouvé sur le net et commandable avec les gza, comme notre code, mais là avec une barrette neopixel

Code : Tout sélectionner

#include <Adafruit_NeoPixel.h>

#define RADIO_PIN   2    

#define PIXEL_PIN    4    

#define PIXEL_COUNT 8

Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);

bool oldState = HIGH;
int showType = 0;
int newState = 0;
int pos = 0, dir = 1; 
void setup() {
  pinMode(RADIO_PIN, INPUT);
  strip.begin();
  strip.show(); 
}


void loop() {
   newState = pulseIn(RADIO_PIN, HIGH,25000);

    if (newState < 900) {
      delay(20);
      showType=5;
      startShow(showType);
    }

    if ((newState >1000) && (newState <1250)) {
      delay(20); 
      showType=6;
      startShow(showType);
    }
    
    if ((newState >1250) && (newState <1500)) {
      delay(20);
      showType=4;
      startShow(showType);
    }    
    
    if ((newState >1500) && (newState <1750)) {
      delay(20);
      showType=11;
      startShow(showType);
    } 
    
    if ((newState >1750)) {
      delay(20);
      showType=10;
      startShow(showType);
    } 
   }

void startShow(int i) {
  switch(i){

    case 4: theaterChase(strip.Color(0, 0, 127), 50); // blue
            break;
            
    case 5: theaterChase(strip.Color(127,   0,   0), 50); // Red
            break;

    case 6: colorbyte(50);
            break;
            
    case 8: rainbowCycle(20);
            break;
    
    case 10: k2000(10);
            break;
            
    case 11: cligno(20);
            break;
  }
}

void colorbyte(uint32_t c) {

strip.setPixelColor(0, 255, 0, 0);
strip.show();
delay(125);
strip.setPixelColor(1, 255, 128, 0);
strip.show();
delay(125);
strip.setPixelColor(2, 255, 255, 0);
strip.show();
delay(125);
strip.setPixelColor(3, 128, 255, 0);
strip.show();
delay(125);
strip.setPixelColor(4, 0, 255, 0);
strip.show();
delay(125);
strip.setPixelColor(5, 0, 255, 128);
strip.show();
delay(125);
strip.setPixelColor(6, 0, 255, 255);
strip.show();
delay(125);
strip.setPixelColor(7, 0, 0, 255);
strip.show();
delay(125);
for( int i = 0; i<PIXEL_COUNT; i++){
strip.setPixelColor(i, 0, 0, 0);

strip.show();
delay(125);
}
}

void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

    for(j=0; j<0; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
}

void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  WheelPos = 255 - WheelPos;
  if(WheelPos < 85) {
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(WheelPos < 170) {
    WheelPos -= 85;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
}

void k2000(uint8_t wait) {
  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(10);

  // 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;
  }
}

void cligno(uint32_t c) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
  strip.setPixelColor(2,0,0,255); 
  strip.setPixelColor(3,0,0,255); 
  strip.setPixelColor(4,0,0,255); 
  strip.setPixelColor(5,0,0,255); 
      strip.show();
      delay(20);
 }     

  strip.setPixelColor(0,255,255,0);   
  strip.setPixelColor(1,255,255,0); 
  strip.setPixelColor(6,255,255,0);
  strip.setPixelColor(7,255,255,0);  
      strip.show();
      delay(250); 
  strip.setPixelColor(0,0,0,0);
  strip.setPixelColor(1,0,0,0); 
  strip.setPixelColor(6,0,0,0);
  strip.setPixelColor(7,0,0,0);  
      strip.show();
      delay(250);          
 
  }
C'est un code que j'aimerai faire évoluer en sbus pour pouvoir avoir les autres axes.


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

Re: Débuguage et optimisation code.

Message non lu par Tomdu38 »

Du coup, tu as quoi comme montage.

Tu as ta voie des gaz en pwm directement connectée sur la Pin 2, c'est ça ?
Tu n'est pas en ppm, avec tout les signaux sur le même fils, on est d'accord ?

A+

Edit : une librairie pour lire le ppm, pas encore testée.
https://github.com/kiuz/PPM-Signal-Reader-ARDUINO" onclick="window.open(this.href);return false;


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: Débuguage et optimisation code.

Message non lu par Dehas »

Oui, c'est ça, je suis en PWM juste sur les gaz.
Merci pour la librairie.


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: Débuguage et optimisation code.

Message non lu par Dehas »

Et voila une librairie Sbus !!
https://github.com/zendes/SBUS


Avatar du membre
lamenace
Quadricopter
Messages : 188
Enregistré le : jeu. 10 juil. 2014 14:03
Réputation : 0

Re: Débuguage et optimisation code.

Message non lu par lamenace »

Je suis en train d'écrire un contrôleur de leds utilisant MavLink, le problème c'est que dans les bouts de code que je trouve ils utilisent un port série pour envoyer les infos de debug et que moi quand je me connecte sur mon rx tx de mon arduino je n'ai rien en sortie!
Help!


Tarort FY650, Pixhawk 2.4.5, GPS NEO-7N, ESC ZTW Spider Series 30A, Sunnysky v3508 580kV, Nacelle 3D RCTimer
Reptile 500, Pixhawk Lite 2.4.6, ESC ZTW Spider Series 30A, Sunnysky v2216 800kV
Radio Hitec Aurora 9
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: Débuguage et optimisation code.

Message non lu par Dehas »

poste ton code et une photo du montage stp


Avatar du membre
lamenace
Quadricopter
Messages : 188
Enregistré le : jeu. 10 juil. 2014 14:03
Réputation : 0

Re: Débuguage et optimisation code.

Message non lu par lamenace »

j'ai revu mon cablage et là miracle ça marche, j'ai le flux mavlink sur putty :)


Tarort FY650, Pixhawk 2.4.5, GPS NEO-7N, ESC ZTW Spider Series 30A, Sunnysky v3508 580kV, Nacelle 3D RCTimer
Reptile 500, Pixhawk Lite 2.4.6, ESC ZTW Spider Series 30A, Sunnysky v2216 800kV
Radio Hitec Aurora 9
Répondre

Retourner vers « Codes et Programmations »