Minor changes

This commit is contained in:
grouch 2017-04-15 16:14:58 +02:00
parent 698d32e8ff
commit afe804c178
1 changed files with 80 additions and 69 deletions

View File

@ -1,7 +1,7 @@
//Stroboduino
char Ver[] = "cg140417";
#include "TimerOne.h"
#include <TimerOne.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
@ -16,6 +16,7 @@ LiquidCrystal lcd( 9, 17, 15, 16, 14, 10);
const int deg_Initial = 10; //Affiché au demarrage
byte Ncyl = 2;
byte Refresh = 100;
bool att_tour = 0; // true si on attend un tour supplémentaire avant le Flash
//-----------------------------------------------------------
// CONSTANTES
@ -26,9 +27,6 @@ const int deg_Initial = 10; //Affiché au demarrage
#define Flash 11 //Flash
#define Codeur_A 3 //D2 pour entrée codeur A sous interruption
#define Codeur_B 4 //D3 pour entrée codeur B
#define LED13 13
const int degT = 720 / Ncyl; // Degrés entre 2 étincelles
//------------------------------------------------------------
// VARIABLES
@ -43,11 +41,11 @@ int unsigned long Nc = 0; //Pour le calcul de N
volatile int signed deg_dem = deg_Initial; //Compteur des degrés demandés,affiché au LCD, <=0 possible
unsigned long pm = 0; //Previous millis pour Refresh LCD
byte modconfig = 0; //Flag pour savoir si on est en mode config
int degT = 720 / Ncyl; // Degrés entre 2 étincelles
int debug = 0; //Variable pour debug, optionelle
//-------------------------------------------------------------
// FONCTIONS
// ISR
//-------------------------------------------------------------
void isrEtincelle() {
@ -60,19 +58,32 @@ void isrFlash(){
Timer1.stop();
//Flash et flash sur LED13
digitalWrite (Flash, 1); delayMicroseconds(D_Flash); digitalWrite (Flash, 0);
digitalWrite (LED13, 1); delayMicroseconds(10 * D_Flash); digitalWrite (LED13, 0);
digitalWrite (LED_BUILTIN, 1); delayMicroseconds(20 * D_Flash); digitalWrite (LED_BUILTIN, 0);
//Délai en µs pour les degrés demandés, periode suivante
D_deg = float(T * deg_dem) / float(degT);
}
void Affic_N_et_deg_dem() //Fond d'ecran inchangé,durée environ 7.5ms
{ N = Nc / T; //Calculer N en t/mn
lcd.setCursor(0, 0); lcd.print(" "); //Nettoyer
lcd.setCursor(0, 0); lcd.print(N);
lcd.setCursor(0, 1); lcd.print(" "); //Nettoyer
lcd.setCursor(0, 1); lcd.print(deg_dem);
//-------------------------------------------------------------
// FONCTIONS
//-------------------------------------------------------------
void Affic_N_et_deg_dem(){
N = Nc / T; //Calculer N en t/mn
lcd.setCursor(0, 0); lcd.print(" ");
lcd.setCursor(0, 0); lcd.print(N); //Régime tr/min
lcd.setCursor(0, 1); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(deg_dem); lcd.write(223); //Avance °
}
void Affich_fond_ecran(){ //Affiche le fond d'écran au début ou après la config.
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("tpm");
lcd.setCursor(5, 1);
lcd.print(Ncyl);
lcd.print("c");
}
void Regl(byte &var, String titre){
lcd.clear();
lcd.print(titre);
@ -86,19 +97,36 @@ void Regl(byte &var, String titre){
while (digitalRead(Inter) == 0); // Si on a appuyé, on attend le relachement
}
void ConfiG()
{
while (digitalRead(Inter) == 0); //toujours appuyé ? on attend
void Regl(bool &var, String titre){
lcd.clear();
lcd.print(titre);
lcd.setCursor(3, 1);
lcd.print(var);
lcd.print(" ");
long flag = 0;
Enco.write(0);
while (digitalRead(Inter) == 1){ // tant qu'on appuie pas on régle
if (flag != Enco.read()/4) {
var = !var;
flag = Enco.read()/4;
lcd.setCursor(3, 1);
lcd.print(var);
lcd.print(" ");
}
}
while (digitalRead(Inter) == 0); // Si on a appuyé, on attend le relachement
}
void ConfiG() {
lcd.clear();
lcd.print("CONFIG");
lcd.setCursor(7, 1);
lcd.print((char)126);
while (digitalRead(Inter) == 1); //Attend un appui
while (digitalRead(Inter) == 0); // et un relachement
lcd.write(126);
while (digitalRead(Inter) == 0); //toujours appuyé ? on attend
Regl(Ncyl, "Nb cyl.");
Regl(D_Flash, "D Flash");
Regl(Refresh, "Refresh");
Regl(att_tour, "Att1tour");
EEPROM.write(0, Ncyl);
EEPROM.write(1, D_Flash);
EEPROM.write(2, Refresh);
@ -106,82 +134,65 @@ void ConfiG()
}
void IniT() {
Ncyl = EEPROM.read(0); // on charge les parmaètres stockés en mémoire
D_Flash = EEPROM.read(1);
Refresh = EEPROM.read(2);
attachInterrupt(digitalPinToInterrupt(Etin), isrEtincelle, RISING);
Timer1.attachInterrupt(isrFlash); //Timer entre Etincelle et Flash
Timer1.stop();
Ncyl = EEPROM.read(0);
D_Flash = EEPROM.read(1);
Refresh = EEPROM.read(2);
//Affichage titre
lcd.clear();
lcd.print("Strobo");
lcd.setCursor(3, 1);
lcd.print("duino");
delay(1500);
if (digitalRead(Inter) == 0) {modconfig++;} //si bouton appuyé
lcd.clear();
lcd.print("Version");
lcd.setCursor(0, 1);
lcd.print("Strobo"); lcd.setCursor(3, 1); lcd.print("duino");
delay(1200);
if (digitalRead(Inter) == 0) {modconfig++;} //si bouton appuyé
//Test Flash
digitalWrite (Flash, 1); delayMicroseconds(D_Flash); digitalWrite (Flash, 0);
lcd.print(Ver); //N° de version
//Affichage version
lcd.clear();
lcd.print("Version"); lcd.setCursor(0, 1); lcd.print(Ver); //N° de version
delay(1000);
if (digitalRead(Inter) == 0) {modconfig++;} //si bouton toujours appuyé
if (digitalRead(Inter) == 0) {modconfig++;} //si bouton toujours appuyé
if (modconfig >= 2){ // on entre dans le mode config
lcd.clear();
delay(100);
modconfig=0;
ConfiG();
}
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("tpm");
lcd.setCursor(5, 1);
lcd.print("deg");
}
Affich_fond_ecran();
Enco.write(deg_Initial*4);
Nc = 120000000 / Ncyl;
T = 150000;
D_deg = T / 2; //Pour le premier affichage de N
degT = 720 / Ncyl;
Nc = 120000000 / Ncyl;
T = 150000;
D_deg = float(T * deg_dem) / float(degT); //Pour le premier cycle
Affic_N_et_deg_dem();
}
void setup() {
Serial.begin(9600); //Pour debug
lcd.begin(8, 2);
pinMode(Etin, INPUT);
pinMode(Flash, OUTPUT); // Sortie vers la led
pinMode(Etin, INPUT); // Entrée bobine
pinMode(Flash, OUTPUT); // Sortie FLASH
pinMode(Codeur_A, INPUT_PULLUP);
pinMode(Codeur_B, INPUT_PULLUP);
pinMode(Inter, INPUT_PULLUP); // Le codeur met son inter à la masse quand poussé
IniT();
}
void loop()
{
if (millis() - pm > Refresh) {
void loop(){
if (millis() - pm > Refresh) { // Mise à jour affichage LCD
Affic_N_et_deg_dem();
pm = millis();
deg_dem = Enco.read()/4;
}
if (digitalRead(Inter) == 0) //Si l'inter du codeur est poussé, geler l'affichage
{ delay(1000); while (digitalRead(Inter) == 0); //Encore poussé, attendre
if (digitalRead(Inter) == 0) { //Si l'inter du codeur est poussé, geler l'affichage
delay(1000); while (digitalRead(Inter) == 0); //Encore poussé, attendre
delay(100); //Continuer
}
}
//**********************************************************
//Macro ps(v) de debug pour imprimer le numero de ligne, le nom d'une variable, sa valeur
//puis s'arreter definitivement
#define ps(v) Serial.print("Ligne_") ; Serial.print(__LINE__) ; Serial.print(#v) ; Serial.print(" = ") ;Serial.println((v)) ; Serial.println(" Sketch stop"); while (1);
//Exemple, à la ligne 140, l'instruction ps(var1);
//inprimera "Ligne_140var1 = 18 Sketch stop"
//Macro pc(v)de debug pour imprimer le numero de ligne, le nom d'une variable, sa valeur,
//puis s'arreter et attendre un clic de souris sur le bouton 'Envoyer'en haut de l'ecran seriel pour continuer.
#define pc(v) Serial.print("Ligne_") ; Serial.print(__LINE__) ; Serial.print(#v) ;Serial.print(" = ") ; Serial.println((v)) ; Serial.println(" Clic bouton 'Envoyer' pour continuer") ;while (Serial.available()==0);{ int k_ = Serial.parseInt() ;}
//Exemple, à la ligne 145, l'instruction pc(var2);
// inprimera "Ligne_145var2 = 25.3 Clic bouton 'Envoyer' pour continuer"
//option: debug++;if (debug > 200) { pc(T);pc(Ts2);pc(D_deg);}// Avec une variable debug initialisée à 0
//float gf = 0;//pour boucle d'attente,gf GLOBALE et FLOAT indispensable
// gf = 1; while (gf < 2000)gf++;//10= 100µs,100=1.1ms,2000=21.8ms
}