Page 3 sur 3

Re: Débuguage et optimisation code.

Posté : jeu. 26 mars 2015 22:56
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 !!!

Re: Débuguage et optimisation code.

Posté : ven. 27 mars 2015 07:04
par Dehas
Alors pourquoi tu te casse la tête ??
Le code est pas mal, mais je l'aimerais en SBUS converti pour ATtiny.

Re: Débuguage et optimisation code.

Posté : ven. 27 mars 2015 07:18
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+

Re: Débuguage et optimisation code.

Posté : ven. 27 mars 2015 07:31
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)

Re: Débuguage et optimisation code.

Posté : ven. 27 mars 2015 20:30
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+

Re: Débuguage et optimisation code.

Posté : ven. 27 mars 2015 20:51
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.

Re: Débuguage et optimisation code.

Posté : ven. 27 mars 2015 23:27
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;

Re: Débuguage et optimisation code.

Posté : sam. 28 mars 2015 05:40
par Dehas
Oui, c'est ça, je suis en PWM juste sur les gaz.
Merci pour la librairie.

Re: Débuguage et optimisation code.

Posté : sam. 28 mars 2015 07:12
par Dehas
Et voila une librairie Sbus !!
https://github.com/zendes/SBUS

Re: Débuguage et optimisation code.

Posté : mar. 7 avr. 2015 12:21
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!

Re: Débuguage et optimisation code.

Posté : mar. 7 avr. 2015 16:56
par Dehas
poste ton code et une photo du montage stp

Re: Débuguage et optimisation code.

Posté : mer. 8 avr. 2015 00:09
par lamenace
j'ai revu mon cablage et là miracle ça marche, j'ai le flux mavlink sur putty :)