le but est de connecter juste un inter 2 positions sur l aduino pour commander un servo pour ouvrir une trappe. (envoie de 2 valeurs ppm en fonction de la position de l inter)
pour la librairie servo je l 'ai vu mais je pense que ça ne va pas car je ne connecte pas directement le servo sur l' ardu mais je passe pas un module émission 2.4ghz (lien hobbyking) qui doit recevoir du PPM, le servo lui reçoit du PWM
help help j'arrive à rien... à la compil sur certain code il m indique qu il ne trouve pas un fichier .h pourtant j 'ai placé la librairie dans mes documents/arduino/librairie, je l ai aussi mis dans programme files/arduino, mais rien ni fait il me trouve pas les fichiers.
kiteur76:
help help j'arrive à rien... à la compil sur certain code il m indique qu il ne trouve pas un fichier .h pourtant j 'ai placé la librairie dans mes documents/arduino/librairie, je l ai aussi mis dans programme files/arduino, mais rien ni fait il me trouve pas les fichiers.
bonjour
mets ton dossier où sont le .h et le .cpp
dans le dossier libraries du dossier où est installé l'IDE (exemple)
salut j’avance un peu le code suivant fonctionne c'est à dire que le servo a un mouvement de balayage continue.
Est ce que quelqu’un pourrait m'aider à l épurer, je n'ai pas besoin du balayage continue, il me faut juste pourvoir rentrer une valeur à l initialisation de la carte, puis envoyer une valeur si j active une entrée (présence 5v) et une autre si pas de 5v. Je ne mi retrouve pas dans le code.
merci de votre aide
//this programm will put out a PPM signal
//////////////////////CONFIGURATION///////////////////////////////
#define chanel_number 8 //set the number of chanels
#define default_servo_value 1500 //set the default servo value
#define PPM_FrLen 22500 //set the PPM frame length in microseconds (1ms = 1000µs)
#define PPM_PulseLen 300 //set the pulse length
#define onState 1 //set polarity of the pulses: 1 is positive, 0 is negative
#define sigPin 10 //set PPM signal output pin on the arduino
//////////////////////////////////////////////////////////////////
/*this array holds the servo values for the ppm signal
change theese values in your code (usually servo values move between 1000 and 2000)*/
int ppm[chanel_number];
void setup(){
//initiallize default ppm values
for(int i=0; i<chanel_number; i++){
ppm[i]= default_servo_value;
}
pinMode(sigPin, OUTPUT);
digitalWrite(sigPin, !onState); //set the PPM signal pin to the default state (off)
cli();
TCCR1A = 0; // set entire TCCR1 register to 0
TCCR1B = 0;
OCR1A = 100; // compare match register, change this
TCCR1B |= (1 << WGM12); // turn on CTC mode
TCCR1B |= (1 << CS11); // 8 prescaler: 0,5 microseconds at 16mhz
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
sei();
}
void loop(){
//put main code here
static int val = 1;
ppm[0] = ppm[0] + val;
if(ppm[0] >= 2000){ val = -1; }
if(ppm[0] <= 1000){ val = 1; }
delay(10);
}
ISR(TIMER1_COMPA_vect){ //leave this alone
static boolean state = true;
TCNT1 = 0;
if(state) { //start pulse
digitalWrite(sigPin, onState);
OCR1A = PPM_PulseLen * 2;
state = false;
}
else{ //end pulse and calculate when to start the next pulse
static byte cur_chan_numb;
static unsigned int calc_rest;
digitalWrite(sigPin, !onState);
state = true;
if(cur_chan_numb >= chanel_number){
cur_chan_numb = 0;
calc_rest = calc_rest + PPM_PulseLen;//
OCR1A = (PPM_FrLen - calc_rest) * 2;
calc_rest = 0;
}
else{
OCR1A = (ppm[cur_chan_numb] - PPM_PulseLen) * 2;
calc_rest = calc_rest + ppm[cur_chan_numb];
cur_chan_numb++;
}
}
}