[résolu]utilisation de "if" en C

Salut à tous.

Mon C se rouillant avec les années sans en pratiquer, je me suis donc commander un petit kit avec un arduino MEGA 2560.

Pour commancer je veux m'amuser avec la led sur la carte pour me refaire une santé en C.... et là bin je bloque déjà sur l'utilisation des "if".

Le montage:
un signal carré généré par un NE555 arrive sur la pin12. Le led est sur la pin13. Faire une simple copie sortie=entrée s'est bien passé (ouais bon juste une ligne de code ça va).

Maintenant je veux jouer avec la période du signal d'entrée:

  • utiliser une variable et l'incrémenter sur chaque front montant par exemple:
    si pin12 = front montant, alors toto++.
    si toto=2, alors on inverse l'état de la diode puis toto=0. ainsi de suite.
    Déjà là, c'est plus simple en VHDL, la fonction pour lire sur front montant ça se fait bien, mais en C, comment on fait?

2)Mon programme à l'état actuel, pouvez me dire ce qui cloche:
Pour reprndre l'idée ci-dessus, je fais un compteur avec une variable, puis je vais lire le n bit suivant la fréquence voulu. Et ça impossible à faire. M'emmêle avec les if. Je n'ai pas trouvé sur le net si on peut faire ce genre de chose en C: toto[3] pour lire le 3eme bit de toto. Visiblement non.
Mais ceci marche comment exactement: toto<<3 ? Ca fait un décalage de 3bits. Si oui je ne voudrais pas ce genre de chose (ou alors à faire via une autre variable). Je veux lire le n bit mais sans toucher à la variable.

int input12, titi=0, out=0;
unsigned short int toto = 0x0000;

// initialisation
void setup()
{ //input pins
pinMode(12, INPUT);
// output pins
pinMode(13, OUTPUT);
}
// no ended loop
void loop()
{
//the pin 12 is connected to an output of a NE555, period= 1s
// with a duty cycle of about 50%
input12 = digitalRead(12);
if (input12=='1'&& titi=='0'){
toto++;
titi='1';
}
if (input12=='0'&& titi=='1'){
titi='0';
}
if(toto==0x0002){
out++;
}
if(toto>0x0002){
toto=0x0000;
out=0;
}

digitalWrite(13,out);
}

Merci et désolé si je ne suis pas clair.

Ta variable input12 est le résultat de ce que renvoie la fonction digitalRead
Cette fonction retourne soit HIGH soit LOW
Si tu compares input12 et '1' dans la ligne
if (input12=='1'&& titi=='0'){
tu n'auras jamais d'égalité
il te faut écrire
if (input12==HIGH && titi=='0'){

d'autre part tu compares titi et '0'
la notation '0' est en fait la valeur ascii du caractère '0' (soit 48 en décimal ou 0x30 en héxadécimal)
comme tu as initialisé la variable titi avec la valeur 0 (décimal)
tu ne peu pas avoir d'égalité dans ton test
c'est comme si tu écrivais
if (input12=='1'&& titi==48){
il te faut érire
if (input12==HIGH&& titi==0){

dans ce contexte, la remise à 0 de la variable titi se fera de la façon suivante
titi=0;

il en va de même pour le test
if (input12=='0'&& titi=='1'){

si tu as bien compris, tu trouveras tout seul la correction à apporter

Hello, je me trompe en disant qu'avec arduino HIGH==1==true et ainsi LOW==0==false?

Merci pour vos réponses.

Ca se débloque. Une fois que je me serai bien amusé avec cette led, je passe sur le LCD puis écran tactile.