//GILZEEBROEK
#include "TM1651.h"
#define CLK 5//pins definitions for TM1651 and can be changed to other ports
#define DIO 4
TM1651 batteryDisplay(CLK,DIO);
const int analogInput = A0;
/*const float TMaxA0 = 5.0;
float R1 = 20000.0;
float R2 = 13000.0;*/
#include <avr/sleep.h>//this AVR library contains the methods that controls the sleep modes
#define inter 3 //A5-6
const int led = 7;
byte etat; //1 ou 0
boolean boutonRelache; //Vrai ou faux (true/false)
//------------------
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 5000;
//____________________
const int nEchantillons = 400; // correspond au nbr indice total et mets 23 sec approxi pour faire 1 cycle
int echantillon[nEchantillons];
int i = 0;
int minVal ;
//----------------------
#include <VirtualWire.h>
char *controller;
//#define Joystick1 A2
const char* CMD_BUTTON_A = "Av1-PONTX" ;
const char* CMD_BUTTON_B = "Av2-PONTX" ;
const char* CMD_BUTTON_C = "Av3-PONTX" ;
const char* CMD_BUTTON_D = "Av4-PONTX" ;
const char* CMD_BUTTON_E = "Ar1PONTX" ;
const char* CMD_BUTTON_F = "Arr3-PONTX" ;
const char* CMD_BUTTON_G = "FreinPONTX" ;
const char* CMD_BUTTON_NUL = "NUL" ;
const int Frein = 9;
const int Arr3 = 8;
const int Arr1 = 11; // PROBLEME avec digital 11
const int Av1 = A2;
const int Av2 = A3;
const int Av3 = A4;
const int Av4 = A5;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
int buttonState6 = 0;
int buttonState7 = 0;
void setup()
{
Serial.begin(9600);//Start Serial Comunication
//pinMode(LED_BUILTIN,OUTPUT);//We use the led on pin 13 to indecate when Arduino is A sleep
pinMode(inter, INPUT_PULLUP); //entree interrupteur, en Pull up afin d'avoir un signale claire (et car il est integre a l'arduino contrairement au pull down <-- necessite un circuit en plus)
//digitalWrite(LED_BUILTIN,HIGH);//turning LED on
pinMode(led, OUTPUT);
// on verifie l'etat du bouton au cas ou il est deja enfonce quand on commence
boutonRelache = (digitalRead(inter) == HIGH); //Initialisation de la variable "boutonRelache", on teste la variable inter pour savoir si elle = HIGH, si oui boutonRelache = 0, si non boutonRelache = 1
etat = boutonRelache ? LOW : HIGH; //if(), si boutonRelache = true (valeur boolean), etat = LOW, sinon etat = HIGH
// on allume la LED en fonction de l'etat (etat = LOW ou a HIGH, a 1 ou a 0)
//-----------------------
pinMode(analogInput, INPUT);
batteryDisplay.init();
batteryDisplay.set(BRIGHTEST);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
batteryDisplay.frame(FRAME_ON);//light the frame of the battery display
for (int i = 0; i < nEchantillons; i++) {
echantillon[i] = 0;
}
minVal = 1023; // ou mettre 1023
//--------------------------
pinMode(Frein, INPUT);
pinMode(Arr3, INPUT);
pinMode(Arr1, INPUT);
pinMode(Av1, INPUT);
pinMode(Av2, INPUT);
pinMode(Av3, INPUT);
pinMode(Av4, INPUT);
pinMode(13,OUTPUT);
vw_set_ptt_inverted(true); //
vw_set_tx_pin(12);
vw_setup(4500);
}
void loop()
{
//----------------------------------------------------------------------
echantillon[i] = analogRead(analogInput);
/*Serial.print("A0 :");
Serial.print(echantillon[i]);*/
if(minVal > echantillon[i]){
minVal = echantillon[i];
}
//float Vout = ((minVal * (TMaxA0 / 1024))/(R2/(R1+R2)));
float Vout = ((minVal * (5.0 / 1024))/(13000.0/(20000.0+13000.0)));
Serial.print("Vout :");
Serial.println(Vout);
i++;
if (Vout > 12.6) // max est 100%
{
Vout = 12.6;
}
else if (Vout < 9.0) //min est 0%
{
Vout = 9.0;
}
if(Vout<=12.6 && Vout>12.04)
{
batteryDisplay.displayLevel(5);
batteryDisplay.frame(FRAME_ON);
}
else{
if(Vout<=12.04 && Vout>11.71)
{
batteryDisplay.displayLevel(4);
batteryDisplay.frame(FRAME_ON);
}
else{
if(Vout<=11.71 && Vout>11.49){
batteryDisplay.displayLevel(3);
batteryDisplay.frame(FRAME_ON);
}
else{
if(Vout<=11.49 && Vout>11.29){
batteryDisplay.displayLevel(2);
batteryDisplay.frame(FRAME_ON);
}
else{
if(Vout<=11.29 && Vout>11){
//blinkfaible();
batteryDisplay.displayLevel(1);
batteryDisplay.frame(FRAME_ON);
}
else{
if(Vout<=11 && Vout>9){
//blinkTresfaible();
batteryDisplay.displayLevel(0);
batteryDisplay.frame(FRAME_ON);
}
}
}
}
}
}
if (i >= nEchantillons) {
i = 0;
minVal = echantillon[nEchantillons-1];
}
//----------------------------------------------------------------------
int reading = digitalRead(inter);
if (reading != lastButtonState){
lastDebounceTime = millis();
}
if (digitalRead(inter) == HIGH) { // PULLUP = logique inversee, le bouton est relache en HIGH
if (!boutonRelache) { // on vient de relacher, on debounce et memorise
//delay(20); // debounce
boutonRelache = true;
}
}
else {
// le bouton est appuye. est-ce un nouvel appui?
if (boutonRelache) {
// le bouton n'etait pas appuye avant donc c'est un nouvel appui, on inverse l'etat de la lampe
boutonRelache = false;
etat = (etat == HIGH) ? LOW : HIGH; // ou de facon pas tres propre etat = 1 - etat <-- Inverser l'etat (qui vaut 0 ou 1);
//delay(20); // debounce
}
}
//--------------------------------------------------
//------------------------------------------
digitalWrite(led, etat); // allume led
lastButtonState = reading;
unsigned long diff = millis() - lastDebounceTime;
/*if(abs(diff) > debounceDelay){
Going_To_Sleep();
}*/
//--------------------------------------------------------------------------------
buttonState1 = digitalRead(Arr1);
buttonState2 = digitalRead(Arr3);
buttonState3 = digitalRead(Frein);
buttonState4 = digitalRead(Av1);
buttonState5 = digitalRead(Av2);
buttonState6 = digitalRead(Av3);
buttonState7 = digitalRead(Av4);
//Serial.println(value);
Serial.println(controller); // affiche la valeur controle associe au bouton si
// si appyué
if (buttonState4 == HIGH)
{
controller="1" ;
vw_send((byte*) CMD_BUTTON_A, strlen(CMD_BUTTON_A) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else if (buttonState5 == HIGH)
{
controller="2" ;
vw_send((byte*) CMD_BUTTON_B, strlen(CMD_BUTTON_B) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else if (buttonState6 == HIGH)
{
controller="3" ;
vw_send((byte*) CMD_BUTTON_C, strlen(CMD_BUTTON_C) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else if (buttonState7 == HIGH)
{
controller="4" ;
vw_send((byte*) CMD_BUTTON_D, strlen(CMD_BUTTON_D) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else if (buttonState1 == HIGH)
{
controller="5" ;
vw_send((byte*) CMD_BUTTON_E, strlen(CMD_BUTTON_E) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else if (buttonState2 == HIGH)
{
controller="6" ;
vw_send((byte*) CMD_BUTTON_F, strlen(CMD_BUTTON_F) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else if (buttonState3 == HIGH)
{
controller="7" ;
vw_send((byte*) CMD_BUTTON_G, strlen(CMD_BUTTON_G) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13,LOW);
}
else
{
controller="0" ;
vw_send((byte*) CMD_BUTTON_NUL, strlen(CMD_BUTTON_NUL) + 1);
//vw_wait_tx(); // Wait until the whole message is gone
digitalWrite(13, HIGH);
}
}