instruction non prise en compte [RESOLU]

Salut la foule, hé oui, de retour, trop de boulot.
bon la question est simple, mais je ne trouve pas le pourquoi du problème.
pour piloter un canon S110 avec chdk installé, j’utilise un pro mini pour faire passerelle entre le récepteur et le S110.

fonctions simples
zoom et shoot
je scanne les pulse de 2 voies, détermine si high ou low pour le shoot et les valeurs pour le zoom
pour simplifier le code, j’ai un voir interruption sur lequel j’envoie des valeurs
ca fonctionne impec pour le zoom, mais pas pour le shoot
extrait du code qui fonctionne nickel zoom et shoot

void loop() {
  mesure_shoot = pulseIn(shoot, HIGH);
  mesure_voieA3 = pulseIn(bouton_zoom, HIGH);
  niveau_zoom = map(mesure_voieA3, 970, 2040, 1 , 12);

  if (mesure_shoot > 1900) {


    Serial.println("photo");

    photo();
  }
  if (exniveau_zoom  != niveau_zoom) {
    Serial.print("zoom : "); Serial.println(niveau_zoom);

    Serial.print("ancien : "); Serial.println(exniveau_zoom);
    exniveau_zoom = niveau_zoom ;

    zoom();
  }
  delay(500);
}


void photo() {
  digitalWrite (impulsion, HIGH);
  delay (300);
  digitalWrite (impulsion, LOW);
  delay(100);
  Serial.println("photo");


}

void zoom() {
  interruption(200, 100);

  Serial.println("zoom");
  for (i = 0; i < exniveau_zoom; i++) {
    interruption(50, 100);

    Serial.println(i);
  }
  i = 0;

  interruption(120, 100);

}

void interruption(byte haut, byte bas) {
  digitalWrite (impulsion, HIGH);
  delay (haut);
  digitalWrite (impulsion, LOW);
  delay(bas);

}

par contre, si je modifie la partie shoot comme ceci, le shoot n’est pas pris en compte par le S110 alors que dans le serial, j’ai bien photo affiché

void photo() {
  Serial.println("photo");
  interruption(300, 100);
}

une chtite idée?
c’est un peu bordélique, mais ca va se simplifier encore et d’autres options vont se rajouter

le script ubasic qui décode les impulsions

a=0
d=0
shoot
sleep 1000
set_zoom_speed 100
sleep 100
:debut
do
a=get_usb_power 
until a>0

if a>4 then goto "compte"
goto "debut"

:compte
do
a=get_usb_power 
until a>0

if a>5 and a<17 then goto"zoom"
d=d+1
if a>25 then goto"shoot"

goto "compte"

:zoom
let d =d*10
if d>120 then let d=120
if d<0 then let d=0
print"zoom=", d 
set_zoom d
a=0
d=0
goto "debut"

:shoot
print"photo"
shoot
a=0
d=0
goto "debut"

infobarquee:
Salut la foule, hé oui, de retour, trop de boulot.
bon la question est simple, mais je ne trouve pas le pourquoi du problème.
pour piloter un canon S110 avec chdk installé, j’utilise un pro mini pour faire passerelle entre le récepteur et le S110.

fonctions simples
zoom et shoot
je scanne les pulse de 2 voies, détermine si high ou low pour le shoot et les valeurs pour le zoom
pour simplifier le code, j’ai un voir interruption sur lequel j’envoie des valeurs
ca fonctionne impec pour le zoom, mais pas pour le shoot
extrait du code qui fonctionne nickel zoom et shoot

void loop() {

mesure_shoot = pulseIn(shoot, HIGH);
 mesure_voieA3 = pulseIn(bouton_zoom, HIGH);
 niveau_zoom = map(mesure_voieA3, 970, 2040, 1 , 12);

if (mesure_shoot > 1900) {

Serial.println(“photo”);

photo();
 }
 if (exniveau_zoom  != niveau_zoom) {
   Serial.print("zoom : "); Serial.println(niveau_zoom);

Serial.print("ancien : "); Serial.println(exniveau_zoom);
   exniveau_zoom = niveau_zoom ;

zoom();
 }
 delay(500);
}

void photo() {
 digitalWrite (impulsion, HIGH);
 delay (300);
 digitalWrite (impulsion, LOW);
 delay(100);
 Serial.println(“photo”);

}

void zoom() {
 interruption(200, 100);

Serial.println(“zoom”);
 for (i = 0; i < exniveau_zoom; i++) {
   interruption(50, 100);

Serial.println(i);
 }
 i = 0;

interruption(120, 100);

}

void interruption(byte haut, byte bas) {
 digitalWrite (impulsion, HIGH);
 delay (haut);
 digitalWrite (impulsion, LOW);
 delay(bas);

}




par contre, si je modifie la partie shoot comme ceci, le shoot n'est pas pris en compte par le S110 alors que dans le serial, j'ai bien photo affiché



void photo() {
 Serial.println(“photo”);
 interruption(300, 100);
}




une chtite idée?
c'est un peu bordélique, mais ca va se simplifier encore et d'autres options vont se rajouter

le script ubasic qui décode les impulsions


a=0
d=0
shoot
sleep 1000
set_zoom_speed 100
sleep 100
:debut
do
a=get_usb_power
until a>0

if a>4 then goto “compte”
goto “debut”

:compte
do
a=get_usb_power
until a>0

if a>5 and a<17 then goto"zoom"
d=d+1
if a>25 then goto"shoot"

goto “compte”

:zoom
let d =d*10
if d>120 then let d=120
if d<0 then let d=0
print"zoom=", d
set_zoom d
a=0
d=0
goto “debut”

:shoot
print"photo"
shoot
a=0
d=0
goto “debut”

:grin:

Tiens , un revenant

AMHA interruption attend des bytes en arguments et là tu passe 300 , forcement çà deborde ?

salut pépère :slight_smile:
mais quel con, c'est bien sur
maxi 255 pour byte
vais tester ca
merci artouste

pb résolu en remplacant byte par int

void interruption(int haut, int bas) {
  digitalWrite (impulsion, HIGH);
  delay (haut);
  digitalWrite (impulsion, LOW);
  delay(bas);

}

merci phiphi :slight_smile:
mais je ne viens pas souvent poster car un peu trop de boulot depuis plusieurs mois.
je passe comme ca en survolant les topics