#include "lib7seg.h"
#include "CStateMachineRotary.h"
CStateMachineRotaryWithSpeedWithReset encoder(A0,A1,A2);
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
Clib7Seg aff7seg(4,digitPins,8,segmentPins); //Objet en variable globale car utilisé dans l'interruption
void setup() {
Serial.begin(115200);
Serial.println("debut");
setupTimer2();
}
void loop() {
/*
unsigned int periodiciteTache1=200; //100ms entre chaque incrémentation de la valeur à afficher
unsigned int periodiciteTache2=2000; //2s pour l'affichage entre chaque valeur de potar
static unsigned long timerTache1 = millis();
static unsigned long timerTache2 = millis();
if (millis() - timerTache1 >= periodiciteTache1) {
timerTache1 += periodiciteTache1;
tache1bis();
}
if (millis() - timerTache2 >= periodiciteTache2) {
timerTache2 += periodiciteTache2;
tache2();
}
tache3();
*/
unsigned int periodiciteTache4=200; //200ms entre chaque actualisation de l'afficheur
static unsigned long timerTache4 = millis();
encoder.clock();
if (millis() - timerTache4 >= periodiciteTache4) {
timerTache4 += periodiciteTache4;
tache4();
}
}
void tache4 (void)
{
if(analogRead(A4)==1023) //affichage de la position angulaire
{
aff7seg.setDots(4);
int position = encoder.getPosition();
if(position<0)
{
analogWrite(A5, 0);
position=~(position+1);
aff7seg.setNumber(position);
}
else
{
analogWrite(A5, 255);
aff7seg.setNumber(position);
}
}
else
{
float speed = encoder.getSpeed();
aff7seg.setDots(2);
if ((speed>=0)&&(speed<999.9))
{
unsigned int uintvalue = (unsigned int)(speed*10);
aff7seg.setNumber(uintvalue);
}
else
{
aff7seg.setNumber(0xEEEE);
}
}
}
//Timer 2 : https://www.aranacorp.com/fr/utilisation-des-timers-de-larduino/
// timer2 (8 bits) qui est utilisé par la fonction Tone() et la génération de la PWM sur les broches 3 et 11.
void setupTimer2(){
cli(); // disable all interrupts
TCCR2A = (1<<WGM21)|(0<<WGM20); // Mode CTC
TIMSK2 = (1<<OCIE2A); // Local interruption OCIE2A
TCCR2B = (0<<WGM22)|(1<<CS22)|(1<<CS21); // prediviser /256
OCR2A = 250; //250*256*1/16000000 = 4ms
sei(); // enable all interrupts
}
//appelée toutes les 4ms:
ISR(TIMER2_COMPA_vect){ // timer compare interrupt service routine
aff7seg.refresh();
}