Bonjour j'ai créé un code pour une installation dont j'ai 1 bouton poussoir et j'aimerais pourvoir stoppé mon code en appuyant une 2eme fois sur le bouton. Je m'explique j'ai mon programme qui se lance quand j'appuie sur le bunton et j'aimerais pouvoir le stopper en r'appuyant sur ce même bouton après la boucle redémarre... Est ce que quelqu'un peut m'aider ?
il vous faut juste une variable de type bool qui vous dit si le programme tourne ou pas; à chaque appui sur le bouton vous inversez sa valeur. ensuite vous testez cette valeur
void loop()
{
si (bouton vient d'être appuyé) Alors programmeActif = inverse programmeActif;
si (programmeActif) alors {
ici le code du programme
}
}
Pour simplifier votre gestion des boutons, éventuellement utilisez la librairie de @bricoleau ou alors la librairie OneButton de Matthias Hertel.
Merci je v essayer mais en Francais ça va pas marcher ? Le code Arduino c en anglais ?
Le code C n'est ni en anglais, ni en français. C'est du code C.
Je vous ai laissé du boulot / c’est du pseudo code
À vous de jouer !
Ha d'accord bah merci
Peut être que j'ai mal fait mais en tout cas sa a pas l'air de vouloir marché si vous pouvez me donner un peut plus d'indice svp
Enfaite g compris le fait de si le bouton == a Low... Après si programme actif et programme éteint mais je voie pas comme nommé le programme pour que Arduino comprenne
pour bien débuter avec l’arduino, un bon point de départ c’est de lire les tutos d’eskimon
Faites des tutos sur les bases
Et postez votre code si vous voulez des commentaires
je vous met mon code pour vous expliquez :
#include <talkietz.h>
long portPotentiometre = A0;
float valeurPotentiometre;
long pinReset2 = 12; //reset automatique
long pinReset = 2; //bonton reset
long portPushButton_jaune = 8;
long portLED_vert = 7;
long portLED_orange2 = 6;
long portLED_orange1 = 5;
long portLED_rouge = 4;
long portRelais_aimant = 11;
char DIO_Buzzer = 3; //enceinte
long etatPushButton_jaune = HIGH;
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Talkie voice;
//ok
const uint8_t spW089587 [] PROGMEM ={0xA3,0x74,0xBA,0xD7,0x95,0xF3,0xAD,0xD2,0xE9,0x2F,0xE2,0x5C,0x77,0x32,0xCF,0xAF,0x99,0x33,0xDD,0x48,0x5D,0x1A,0x86,0xEC,0xD6,0xAE,0xF4,0x9D,0xC1,0x27,0x94,0xB2,0x4A,0xEA,0x30,0x8E,0xB2,0x03,0xC3,0xDB,0xCD,0x2D,0x4C,0x1D,0x9F,0x62,0x72,0x56,0xEB,0xAA,0x73,0xA6,0xA5,0x99,0x75,0x6A,0xD6,0x99,0x86,0x61,0xD1,0xEE,0x5B,0x67,0xE9,0x0A,0x2D,0x7B,0x6A,0x9F,0xB5,0x09,0x96,0x9C,0xA9,0x5C,0xA8,0x4C,0x39,0x77,0x2A,0xB0,0xA3,0x12,0x95,0xBC,0x0D,0x41,0x0F};
//attention
const uint8_t spW010458 [] PROGMEM ={0xA7,0x2C,0xAE,0xBA,0xD4,0x27,0x9F,0x32,0xD7,0x4A,0xB3,0x8E,0x7C,0x8A,0x66,0xA2,0x82,0x2B,0xD1,0xC9,0xBB,0x95,0x34,0x8F,0xD8,0x27,0x6B,0x5A,0x5C,0xDD,0x66,0x9B,0x2A,0x63,0xB1,0x48,0x4B,0x0C,0x0E,0x18,0xDC,0xF4,0x44,0x93,0x9B,0xB9,0x86,0x95,0x13,0x27,0xDE,0x2D,0xA2,0x9D,0x4F,0x9C,0xE8,0x34,0x0B,0x77,0x3E,0x71,0x26,0x5E,0x95,0xD0,0x66,0x25,0x91,0x66,0xA6,0x69,0xE2,0x95,0x0E,0xA8,0xC9,0x22,0x69,0x4E,0xFE,0x9D,0x96,0x92,0xC8,0x59,0xC1,0x6F,0x99,0x13,0x1A,0x79,0x35,0xFF,0x4C,0x4C,0x49,0x92,0xD5,0xFC,0xB7,0x3D,0xE5,0x66,0x56,0xF4,0xC7,0x4D,0x67,0x9A,0x5D,0xD1,0x5F,0x77,0x55,0x61,0x26,0x01,0x77,0x8C,0x25,0x60,0xCF,0xD6,0xD3,0x8E,0x24,0x42,0x1E,0x4D,0xCE,0x58,0x2C,0x4B,0x4C,0xB6,0x3A,0x73,0x32,0x6A,0x96,0xB6,0x78,0xAD,0xD1,0x59,0xB2,0xC6,0x9C,0xB1,0x07,0x6E,0x13,0x22,0x49,0xDB,0x11,0x48,0x4D,0x18,0xDB,0x29,0x57,0x20,0x35,0xE6,0x62,0xBB,0xDC,0x81,0x45,0x7B,0x68,0xE4,0x07};
//prêt
const uint8_t spW101286 [] PROGMEM ={0xAB,0xA8,0xAE,0x3D,0x43,0x2C,0x9D,0xA2,0xAA,0x0B,0x15,0x0B,0x7D,0x8A,0xA6,0x3F,0xD9,0xCC,0xCA,0x29,0x4B,0x1C,0x13,0x09,0x3B,0xA7,0x6B,0x3A,0xDD,0x39,0x6B,0x9F,0xA9,0xB8,0x74,0xE9,0x0C,0x73,0x96,0x12,0x42,0x73,0x22,0xCE,0xD9,0x8A,0x8E,0x88,0x1A,0xB3,0xE7,0x68,0x5A,0x22,0xAA,0x23,0x9D,0xAB,0x6B,0xE7,0xEC,0x32,0xA3,0x00,0xCC,0x2C,0xE1,0x01};
//pilote
const uint8_t spW095753 [] PROGMEM ={0x06,0xB0,0xDA,0x9D,0xD0,0xCE,0xB8,0x55,0x4F,0x93,0x93,0xAC,0x5A,0xA1,0x42,0x72,0x4E,0xB2,0x5B,0x32,0xB0,0x3A,0x39,0xD9,0xC0,0x22,0x56,0x33,0xFB,0xE4,0x1D,0x91,0x67,0x4F,0xA5,0x53,0x0C,0x2E,0xAC,0x55,0x8D,0x4F,0xDF,0x11,0xC5,0x74,0xD6,0x3C,0x53,0xC3,0x1C,0x9E,0x59,0xE7,0xCC,0x45,0x6A,0x78,0xE6,0xCC,0xB3,0x16,0x6D,0xA9,0x96,0xB3,0xCE,0x96,0x55,0x94,0x6A,0xCC,0x3A,0x7B,0x65,0xDA,0xED,0x5C,0xEB,0x94,0x95,0x7A,0x99,0x67,0xA5,0x51,0x36,0x16,0x46,0x12,0x93,0x58,0xE9,0x91,0x8B,0x78,0xD6,0x86,0x07};
//regardez
const uint8_t spW108538 [] PROGMEM ={0x67,0xC8,0x22,0x5A,0xA5,0xD2,0x9C,0x29,0x8B,0x2E,0x65,0x6F,0x77,0xC6,0xA4,0xA6,0x98,0xB3,0xED,0x69,0x93,0xE8,0x32,0xF6,0x34,0xA7,0xCE,0xB2,0xCA,0xD8,0xD2,0x9E,0xB2,0x0A,0xAF,0x50,0xF5,0x76,0xF2,0xCA,0xAC,0xDD,0x3C,0xEB,0xC9,0x32,0xF5,0xB0,0xE8,0x34,0x27,0xAF,0x46,0xC9,0x3A,0x5C,0xB5,0x3C,0x4A,0xB6,0x3E,0xB3,0xBC,0xAA,0xA1,0x45,0x28,0xB2,0xCA,0x69,0xBB,0x12,0xE1,0xEA,0x4A,0xA7,0x6B,0x41,0x85,0xA3,0x6A,0x9F,0xAE,0x05,0x57,0xB5,0x88,0x75,0xBA,0xE6,0xC2,0x55,0x23,0xF2,0xE9,0x87,0x0A,0x77,0x95,0xD8,0x67,0x6C,0xA2,0x5D,0xC4,0x6B,0x9D,0xB1,0x88,0x72,0x55,0xAF,0x7D,0x86,0x2A,0xC3,0x43,0xA4,0xCE,0x19,0x8A,0x2C,0x57,0xF2,0xD9,0x00,0xE0,0x00,0x22,0xCB,0xCE,0x5A,0x89,0xB8,0x4F,0x4D,0x3A,0x7B,0x92,0xEA,0xB9,0x53,0xE9,0x9C,0x9D,0x91,0xFB,0xD4,0xAC,0x73,0x35,0xCA,0x9E,0xDB,0x13,0xD7,0xDA,0xB8,0x88,0xDF,0x4C,0x1C,0x7F,0x65,0x22,0xB1,0x5B,0x11,0x1E};
//les
const uint8_t spW076505 [] PROGMEM ={0x6D,0xCC,0x09,0xB8,0x32,0x93,0x8E,0x31,0x17,0xB0,0xD6,0x5A,0x7A,0x86,0x9C,0x91,0xCB,0xB3,0xDD,0x98,0x22,0x71,0xB3,0x9E,0x5A,0x6B,0xC9,0xD4,0xCD,0x27,0x2A,0x9D,0xAD,0x2B,0x11,0xAD,0x9C,0x75,0xB6,0xA1,0x55,0xA4,0x7B,0xD6,0xD9,0x87,0x57,0xC6,0x99,0x5A,0x67,0x1F,0x4E,0x89,0x73,0x66,0xAD,0xA3,0x73,0x66,0xEB,0xAD,0x08,0xF0};
//feu
const uint8_t spW056108 [] PROGMEM ={0x83,0x9B,0x61,0xDA,0xC5,0xEA,0x02,0x04,0xA0,0xDB,0xF0,0x00,0xF4,0xD0,0x06,0x70,0x9A,0x24,0xCD,0x3D,0xA3,0xD1,0x5A,0xAC,0x0B,0xF3,0xAE,0x58,0x67,0x75,0xBA,0xC2,0x3B,0x1B,0x9E,0x2D,0xF0,0xC8,0x28,0x6F,0x05,0xF0};
void setup() {
// put your setup code here, to run once:
pinMode(portPushButton_jaune,INPUT);// met la broche le bouton en entrée
pinMode(portLED_vert,OUTPUT);// met la broche la led en sortie
pinMode(portLED_orange1,OUTPUT);// met la broche la led en sortie
pinMode(portLED_orange2,OUTPUT);// met la broche la led en sortie
pinMode(portLED_rouge,OUTPUT);// met la broche la led en sortie
pinMode(portRelais_aimant, OUTPUT);// met le relai la led en sortie
Serial.begin(9600);
ADCSRA &= ~PS_128;
ADCSRA |= PS_16;
//Réglage des paramêtres de restitution vocale
voice.SetSpeed(810); //entre 0 et 1023 . augmenter la valeur pour augmenter la vitesse. Valeur normal=800
voice.SetPitch(700); //entre 0 et 1023 : Pitch normal=700. Augmenter pour rendre la voix plus aigue
voice.SetBending(50);//entre 0 et 1023 : 0=pas de distortion ; 512=ion maximale ; 1023=pas de distortion
voice.BendingOn();
//voice.BendingOff(); //Pas de distortion du son
pinMode(pinReset, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
int b = 0;
int a = digitalRead(8);
digitalWrite(2, LOW);
valeurPotentiometre = analogRead(portPotentiometre);
valeurPotentiometre = valeurPotentiometre*2700/1023;
Serial.println(valeurPotentiometre);
delay(1);
if (a==b)
{
(digitalWrite(DIO_Buzzer, HIGH));
(digitalWrite(portRelais_aimant, HIGH));
delay(3000);
//Coller ci-dessous les appels à la procedure Say pour prononcer les mots
voice.say(spW089587);
delay(500);
voice.say(spW010458);
delay(30);
voice.say(spW101286);
delay(30);
voice.say(spW095753);
delay(1800);
voice.say(spW108538);
voice.say(spW076505);
voice.say(spW056108);
delay(valeurPotentiometre);
(digitalWrite(portLED_rouge, HIGH));
tone(DIO_Buzzer, 632, 120);
delay(120);
(digitalWrite(portLED_orange1, HIGH));
tone(DIO_Buzzer, 632, 120);
delay(120);
(digitalWrite(portLED_orange2, HIGH));
tone(DIO_Buzzer, 632, 120);
delay(60);
(digitalWrite(portRelais_aimant, LOW));
delay(60);
(digitalWrite(portLED_vert, HIGH));
tone(DIO_Buzzer, 632, 2250);
delay(2250);
(digitalWrite(portLED_rouge,LOW));
(digitalWrite(portLED_orange1,LOW));
(digitalWrite(portLED_orange2,LOW));
(digitalWrite(portLED_vert,LOW));
(digitalWrite(DIO_Buzzer, LOW));
(digitalWrite(2, LOW));
pinMode(pinReset2, OUTPUT);
}else
(digitalWrite(portLED_rouge,LOW));
(digitalWrite(portLED_orange1,LOW));
(digitalWrite(portLED_orange2,LOW));
(digitalWrite(portLED_vert,LOW));
(digitalWrite(portRelais_aimant, HIGH));
(digitalWrite(DIO_Buzzer, LOW));
}
Donc en gros c un système de grille de bmx individuel.
je m'explique:
le pilote appuie sur un bouton qui lance un vocal prêt pilote... (de base en anglais mais j'ai trouvé que un moyen en français) après un délai ce lance que j'ai réglé avec un potentiomètre (normalement c'est un temps aléatoire mais j'ai pas réussi a trouver un moyen de faire aléatoire tout le temps) après ce délai défini des led avec des bip se lance (rouge orange orange vert) et avec un relais et un électroaimant la grille tombe et le pilote part.
En gros c'est comme sa, mais la je voudrais faire en sorte que si le pilote a lancé la boucle et que au final il n'est pas prêt qu'il puisse stop le programme en r'appuyant sur le bouton, et quand il le sent il relance le programme avec le bouton voila merci.
c'est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)
normalement c'est un temps aléatoire mais j'ai pas réussi a trouver un moyen de faire aléatoire tout le temps
regardez les fonctions random() et randomSeed()
J'étudierai votre tuto plus tard mais par rapport au fonction aléatoire j'ai déjà essayé plusieurs chose que ce sois avec vos exemple ou avec autre chose et a chaque fois je trouve que Arduino ne peut pas prendre de nombre aléatoire...
Ou sinon quand je lance le programme un nombre ce met mais il grandit petit a petit en lançant plusieurs fois le programme mais vu que je suis obligé de reset la carte pour pouvoir faire marcher la boucle vocal sinon elle ne marche pas je voie pas où est le problème donc j'ai mis en sorte que l'arduino ce reset après que la grille tombe donc donc j'ai laissé avec un potentiomètre.
quent_r37:
J'étudierai votre tuto plus tard
la machine à état que vous décrivez ressemblerait sans doute à ça
oui voila la boucle ressemble a sa oui
au passage j'ai étudier votre cour et je pense avoir compris et je pense qu les exemple de l'exo 1 m'aiderons je vais essayer et vous tenir au courant. Merci
Pour simplifier votre gestion du bouton, utilisez la librairie de @bricoleau
voici mon nouveau code:
#include <OneButton.h>
#include <talkietz.h>
long portPotentiometre = A0;
float valeurPotentiometre;
long pinReset2 = 12; //reset automatique
long pinReset = 2;
long portButtonDepart = 8;
long portLED_vert = 7;
long portLED_orange2 = 6;
long portLED_orange1 = 5;
long portLED_rouge = 4;
long portRelais_aimant = 11;
char DIO_Buzzer = 3; //enceinte
OneButton button(portButtonDepart, true); // true pour le mettre en INPUT_PULLUP
// la liste des états possible de notre système
// ainsi qu'une variable etatCourant prenant une de ces valeurs
enum {REPOS, ETAT_Marche, ETAT_Arret} etatCourant;
const unsigned char PS_16 = (1 << ADPS2);
const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
Talkie voice;
//ok
const uint8_t spW089587 [] PROGMEM ={0xA3,0x74,0xBA,0xD7,0x95,0xF3,0xAD,0xD2,0xE9,0x2F,0xE2,0x5C,0x77,0x32,0xCF,0xAF,0x99,0x33,0xDD,0x48,0x5D,0x1A,0x86,0xEC,0xD6,0xAE,0xF4,0x9D,0xC1,0x27,0x94,0xB2,0x4A,0xEA,0x30,0x8E,0xB2,0x03,0xC3,0xDB,0xCD,0x2D,0x4C,0x1D,0x9F,0x62,0x72,0x56,0xEB,0xAA,0x73,0xA6,0xA5,0x99,0x75,0x6A,0xD6,0x99,0x86,0x61,0xD1,0xEE,0x5B,0x67,0xE9,0x0A,0x2D,0x7B,0x6A,0x9F,0xB5,0x09,0x96,0x9C,0xA9,0x5C,0xA8,0x4C,0x39,0x77,0x2A,0xB0,0xA3,0x12,0x95,0xBC,0x0D,0x41,0x0F};
//attention
const uint8_t spW010458 [] PROGMEM ={0xA7,0x2C,0xAE,0xBA,0xD4,0x27,0x9F,0x32,0xD7,0x4A,0xB3,0x8E,0x7C,0x8A,0x66,0xA2,0x82,0x2B,0xD1,0xC9,0xBB,0x95,0x34,0x8F,0xD8,0x27,0x6B,0x5A,0x5C,0xDD,0x66,0x9B,0x2A,0x63,0xB1,0x48,0x4B,0x0C,0x0E,0x18,0xDC,0xF4,0x44,0x93,0x9B,0xB9,0x86,0x95,0x13,0x27,0xDE,0x2D,0xA2,0x9D,0x4F,0x9C,0xE8,0x34,0x0B,0x77,0x3E,0x71,0x26,0x5E,0x95,0xD0,0x66,0x25,0x91,0x66,0xA6,0x69,0xE2,0x95,0x0E,0xA8,0xC9,0x22,0x69,0x4E,0xFE,0x9D,0x96,0x92,0xC8,0x59,0xC1,0x6F,0x99,0x13,0x1A,0x79,0x35,0xFF,0x4C,0x4C,0x49,0x92,0xD5,0xFC,0xB7,0x3D,0xE5,0x66,0x56,0xF4,0xC7,0x4D,0x67,0x9A,0x5D,0xD1,0x5F,0x77,0x55,0x61,0x26,0x01,0x77,0x8C,0x25,0x60,0xCF,0xD6,0xD3,0x8E,0x24,0x42,0x1E,0x4D,0xCE,0x58,0x2C,0x4B,0x4C,0xB6,0x3A,0x73,0x32,0x6A,0x96,0xB6,0x78,0xAD,0xD1,0x59,0xB2,0xC6,0x9C,0xB1,0x07,0x6E,0x13,0x22,0x49,0xDB,0x11,0x48,0x4D,0x18,0xDB,0x29,0x57,0x20,0x35,0xE6,0x62,0xBB,0xDC,0x81,0x45,0x7B,0x68,0xE4,0x07};
//prêt
const uint8_t spW101286 [] PROGMEM ={0xAB,0xA8,0xAE,0x3D,0x43,0x2C,0x9D,0xA2,0xAA,0x0B,0x15,0x0B,0x7D,0x8A,0xA6,0x3F,0xD9,0xCC,0xCA,0x29,0x4B,0x1C,0x13,0x09,0x3B,0xA7,0x6B,0x3A,0xDD,0x39,0x6B,0x9F,0xA9,0xB8,0x74,0xE9,0x0C,0x73,0x96,0x12,0x42,0x73,0x22,0xCE,0xD9,0x8A,0x8E,0x88,0x1A,0xB3,0xE7,0x68,0x5A,0x22,0xAA,0x23,0x9D,0xAB,0x6B,0xE7,0xEC,0x32,0xA3,0x00,0xCC,0x2C,0xE1,0x01};
//pilote
const uint8_t spW095753 [] PROGMEM ={0x06,0xB0,0xDA,0x9D,0xD0,0xCE,0xB8,0x55,0x4F,0x93,0x93,0xAC,0x5A,0xA1,0x42,0x72,0x4E,0xB2,0x5B,0x32,0xB0,0x3A,0x39,0xD9,0xC0,0x22,0x56,0x33,0xFB,0xE4,0x1D,0x91,0x67,0x4F,0xA5,0x53,0x0C,0x2E,0xAC,0x55,0x8D,0x4F,0xDF,0x11,0xC5,0x74,0xD6,0x3C,0x53,0xC3,0x1C,0x9E,0x59,0xE7,0xCC,0x45,0x6A,0x78,0xE6,0xCC,0xB3,0x16,0x6D,0xA9,0x96,0xB3,0xCE,0x96,0x55,0x94,0x6A,0xCC,0x3A,0x7B,0x65,0xDA,0xED,0x5C,0xEB,0x94,0x95,0x7A,0x99,0x67,0xA5,0x51,0x36,0x16,0x46,0x12,0x93,0x58,0xE9,0x91,0x8B,0x78,0xD6,0x86,0x07};
//regardez
const uint8_t spW108538 [] PROGMEM ={0x67,0xC8,0x22,0x5A,0xA5,0xD2,0x9C,0x29,0x8B,0x2E,0x65,0x6F,0x77,0xC6,0xA4,0xA6,0x98,0xB3,0xED,0x69,0x93,0xE8,0x32,0xF6,0x34,0xA7,0xCE,0xB2,0xCA,0xD8,0xD2,0x9E,0xB2,0x0A,0xAF,0x50,0xF5,0x76,0xF2,0xCA,0xAC,0xDD,0x3C,0xEB,0xC9,0x32,0xF5,0xB0,0xE8,0x34,0x27,0xAF,0x46,0xC9,0x3A,0x5C,0xB5,0x3C,0x4A,0xB6,0x3E,0xB3,0xBC,0xAA,0xA1,0x45,0x28,0xB2,0xCA,0x69,0xBB,0x12,0xE1,0xEA,0x4A,0xA7,0x6B,0x41,0x85,0xA3,0x6A,0x9F,0xAE,0x05,0x57,0xB5,0x88,0x75,0xBA,0xE6,0xC2,0x55,0x23,0xF2,0xE9,0x87,0x0A,0x77,0x95,0xD8,0x67,0x6C,0xA2,0x5D,0xC4,0x6B,0x9D,0xB1,0x88,0x72,0x55,0xAF,0x7D,0x86,0x2A,0xC3,0x43,0xA4,0xCE,0x19,0x8A,0x2C,0x57,0xF2,0xD9,0x00,0xE0,0x00,0x22,0xCB,0xCE,0x5A,0x89,0xB8,0x4F,0x4D,0x3A,0x7B,0x92,0xEA,0xB9,0x53,0xE9,0x9C,0x9D,0x91,0xFB,0xD4,0xAC,0x73,0x35,0xCA,0x9E,0xDB,0x13,0xD7,0xDA,0xB8,0x88,0xDF,0x4C,0x1C,0x7F,0x65,0x22,0xB1,0x5B,0x11,0x1E};
//les
const uint8_t spW076505 [] PROGMEM ={0x6D,0xCC,0x09,0xB8,0x32,0x93,0x8E,0x31,0x17,0xB0,0xD6,0x5A,0x7A,0x86,0x9C,0x91,0xCB,0xB3,0xDD,0x98,0x22,0x71,0xB3,0x9E,0x5A,0x6B,0xC9,0xD4,0xCD,0x27,0x2A,0x9D,0xAD,0x2B,0x11,0xAD,0x9C,0x75,0xB6,0xA1,0x55,0xA4,0x7B,0xD6,0xD9,0x87,0x57,0xC6,0x99,0x5A,0x67,0x1F,0x4E,0x89,0x73,0x66,0xAD,0xA3,0x73,0x66,0xEB,0xAD,0x08,0xF0};
//feu
const uint8_t spW056108 [] PROGMEM ={0x83,0x9B,0x61,0xDA,0xC5,0xEA,0x02,0x04,0xA0,0xDB,0xF0,0x00,0xF4,0xD0,0x06,0x70,0x9A,0x24,0xCD,0x3D,0xA3,0xD1,0x5A,0xAC,0x0B,0xF3,0xAE,0x58,0x67,0x75,0xBA,0xC2,0x3B,0x1B,0x9E,0x2D,0xF0,0xC8,0x28,0x6F,0x05,0xF0};
// ------------------------------------------------------
// Cette fonction installe l'état initial
// ------------------------------------------------------
void mettreAuRepos()
{
(digitalWrite(portLED_rouge,LOW));
(digitalWrite(portLED_orange1,LOW));
(digitalWrite(portLED_orange2,LOW));
(digitalWrite(portLED_vert,LOW));
(digitalWrite(portRelais_aimant, HIGH));
(digitalWrite(DIO_Buzzer, LOW));
etatCourant = REPOS;
}
// La fonction de call back, appellée automatiquement quand on clique
void simpleclick()
{
switch (etatCourant) {
case REPOS: // on était au repos et on a un appui, on lance le programme
(digitalWrite(DIO_Buzzer, HIGH));
(digitalWrite(portRelais_aimant, HIGH));
delay(3000);
//Coller ci-dessous les appels à la procedure Say pour prononcer les mots
voice.say(spW089587);
delay(500);
voice.say(spW010458);
delay(30);
voice.say(spW101286);
delay(30);
voice.say(spW095753);
delay(1800);
voice.say(spW108538);
voice.say(spW076505);
voice.say(spW056108);
delay(valeurPotentiometre);
(digitalWrite(portLED_rouge, HIGH));
tone(DIO_Buzzer, 632, 120);
delay(120);
(digitalWrite(portLED_orange1, HIGH));
tone(DIO_Buzzer, 632, 120);
delay(120);
(digitalWrite(portLED_orange2, HIGH));
tone(DIO_Buzzer, 632, 120);
delay(60);
(digitalWrite(portRelais_aimant, LOW));
delay(60);
(digitalWrite(portLED_vert, HIGH));
tone(DIO_Buzzer, 632, 2250);
delay(2250);
(digitalWrite(portLED_rouge,LOW));
(digitalWrite(portLED_orange1,LOW));
(digitalWrite(portLED_orange2,LOW));
(digitalWrite(portLED_vert,LOW));
(digitalWrite(DIO_Buzzer, LOW));
(digitalWrite(2, LOW));
pinMode(pinReset2, OUTPUT);
etatCourant = ETAT_Marche; // on note le nouvel état de notre système
break;
case ETAT_Arret: // tout était allumé, on a un appui, on arrete le programme
mettreAuRepos(); // on retourne à l'état initial
break;
}
}
// On initialise notre système dans le setup
void setup() {
pinMode(portButtonDepart,INPUT);// met la broche le bouton en entrée
pinMode(portLED_vert,OUTPUT);// met la broche la led en sortie
pinMode(portLED_orange1,OUTPUT);// met la broche la led en sortie
pinMode(portLED_orange2,OUTPUT);// met la broche la led en sortie
pinMode(portLED_rouge,OUTPUT);// met la broche la led en sortie
pinMode(portRelais_aimant, OUTPUT);// met le relai la led en sortie
pinMode(pinReset, OUTPUT);
Serial.begin(9600);
ADCSRA &= ~PS_128;
ADCSRA |= PS_16;
//Réglage des paramêtres de restitution vocale
voice.SetSpeed(810); //entre 0 et 1023 . augmenter la valeur pour augmenter la vitesse. Valeur normal=800
voice.SetPitch(700); //entre 0 et 1023 : Pitch normal=700. Augmenter pour rendre la voix plus aigue
voice.SetBending(50);//entre 0 et 1023 : 0=pas de distortion ; 512=ion maximale ; 1023=pas de distortion
voice.BendingOn();
//voice.BendingOff(); //Pas de distortion du son
//conditions Initiales
mettreAuRepos();
// On attache la fonction simpleClick() comme callBack
button.attachClick(simpleclick);
}
void loop() {
// On vérifie l'état des boutons, ce qui déclenche l'appel de la fonction callBack si nécessaire
button.tick();
// ici on peut faire autre chose du moment que ça ne prend pas trop longtemps
digitalWrite(2, LOW);
valeurPotentiometre = analogRead(portPotentiometre);
valeurPotentiometre = valeurPotentiometre*2700/1023;
Serial.println(valeurPotentiometre);
delay(1);
}
donc tout marche... mais quand je veux r'appuyer sur le bouton pour stop le programme il ce passe rien je pense que cela vient de case ETAT_Arret: qui doit être mal défini ou mal positionner ou peut être pas du tout sa voila.
C’est plein de délais !!! Relisez le tuto
Sinon des pins ce sont des const byte, pas des long (jamais vu un arduino avec plus de 255 pins et encore moins avec des milliards)
les délais c'est par rapport a mon code c'est normale nan ??
sinon j'ai remplacé les long par const byte.
Mais du coup j'arrive pas a trouver pour stopper le programme n'importe quand
votre machine à états ne traite pas de tous les cas qui sont dessinés sur mon petit graphe
switch (etatCourant) {
case REPOS: // on était au repos et on a un appui, on lance le programme
...
etatCourant = ETAT_Marche; // on note le nouvel état de notre système
break;
case ETAT_Arret: // tout était allumé, on a un appui, on arrete le programme
mettreAuRepos(); // on retourne à l'état initial
break;
}
la première fois que vous appuyez vous passez en ETAT_Marche (après avoir fait un certain nombre de trucs) mais la seconde fois que vous appuyez, plus aucun état dans le switch() ne traite de ETAT_Marche... donc le second click ne fait rien.