Voici la dernière version du code:
#include <Servo.h> //on lance la bibliotheque
Servo servo; //on declare le servo
const byte ServoPin = 5; // servo sur pin 5
const byte LedPin = 13; // //on place une led sur D13
const byte RecordPin = 2; //bouton Record sur pin D0
const byte PlayPin = 3; //bouton play sur pin D1
byte Pos = 0; //variable compteur
const byte tailleMax = 10;
unsigned int tableau[tailleMax]; //tableau de stockage des positions
// le signal analogique du servo est lu sur le pinA0
void setup() {
Serial.begin(115200); //demarrage port serie
pinMode (LedPin, OUTPUT); //la led est une sortie
pinMode (RecordPin, INPUT_PULLUP); // bouton
pinMode (PlayPin, INPUT_PULLUP); // bouton
digitalWrite(ServoPin, LOW);
// ça ne sert à rien de l'attacher pour le détacher ensuite..
//servo.attach(ServoPin); //le servo est sur le pin D5
// servo.detach(); //le servo est tout mou
}
void loop() {
//détecter l'utilisation d'un bouton
//bouton RECORD
if (digitalRead(RecordPin) == LOW) { //Si bouton REC appuyé
Flash(5); //fonction Flash, 5 flash, va servir aussi de debounce :-)
PosRec();
}
//bouton PLAY
if (digitalRead(PlayPin) == LOW) { //Si bouton PLAY appuyé
Flash(1); //fonction Flash, une fois, va servir aussi de debounce :-)
PosPlay();
}
}
void Debordement() { //si on deborde du tableau
Flash(10); //on clignote comme des foufous
Pos = tailleMax - 1; //rétablir une valeur max à Pos
Serial.println("Depassement de tableau");
Flash(10);
PosPlay(); //on lance la lecture
}
void PosRec() { //fonction pour enregistrer des positions
digitalWrite(LedPin, HIGH); //allume la led
Serial.println("Record");
tableau[Pos] = analogRead(A0); //stocke le signal dans l'emplacement i du tableau position
Serial.println(Pos);
Serial.println(tableau[Pos]);
Pos++;
if (Pos >= tailleMax) Debordement();
digitalWrite(LedPin, LOW); //eteint la led
}
void PosPlay() { // fonction pour lire les données du tableau
servo.attach(ServoPin); //on attache le servo au pin5
Serial.println("Play");
digitalWrite(LedPin, HIGH); //allume led
delay(50); //pause
digitalWrite(LedPin, LOW); //eteint led
for (byte i = 0; i < Pos; i++) { //boucle pour lire toutes les valeurs existantes du tableau
unsigned int PosEntier = (tableau[i] / 1.993) + 95.133; //on convertir le signal A0 en signal digital
servo.write(PosEntier); //on commande le servo
Serial.print(i);
Serial.print(F("\t"));
Serial.println(PosEntier);
}
// VOULEZ VOUS DETACHEZ LE SERVO ???
// servo.detach();
}
void Flash(int N) { //fait N flashs
for (int i = 0; i < N; i++) {
digitalWrite(LedPin, HIGH);
delay(5);
digitalWrite(LedPin, LOW);
delay(95);
}
}
Il renvoie ces informations:
Record
0
478
Record
1
77
Record
2
477
Record
3
77
Play
0 334
1 133
2 334
3 133
Me lâchez pas, j'offre l'apéro