16
Vos projets / Re : block auto 1 carte par canton et wifi
« le: janvier 09, 2018, 10:09:21 pm »
Il fonctionne en 3,3v mais dispose d'une entrée 5v + usb
Le forum LOCODUINO est consacré aux discussions ayant trait à l'utilisation de l'Arduino dans les automatismes et les animations pour le train miniature. Nous avons eu récemment quelques inscriptions de personnes ayant des projets plus généraux mais surtout inapplicables au train miniature. Si votre projet ou vos questions ne concernent pas le modélisme ferroviaire, ne vous inscrivez pas, vous perdriez votre temps et nous aussi.
Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.
il est demandé de convertir les fichier en WAV avec Itunes, je te conseil de passer par Audacity, menu fichier, exporter, autres formats non compressés, options... , WAV, unsigned 8 bits PCM.
#define Version 2
#define NumeroLoco 1
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Paramètre WiFi, MQTT - WiFi, MQTT parameters
const char* ssid = "Bbox-maxou"; // WiFi SSID
const char* password = "cessnacessna"; // WiFi Password
const char* mqtt_server = "192.168.1.44"; // IP Broker MQTT
const char* Vitesse = "Loco1/Vitesse";
const char* Sens1 = "Loco1/Sens1";
const char* Sens2 = "Loco1/Sens2";
const char* Lumiere = "Loco1/Lumiere";
const char* Fumigene = "Loco1/Fumigene";
const char* Nom = "Loco1/Nom";
unsigned long TempsGlobal = 0;
///////////////// Moteur ///////////////////////
#define PinMoteurPWM D4
#define PinMoteurSens1 D3
#define PinMoteurSens2 D2
///////////////// Fumigene ///////////////////////
#define PinFumigenePWM D7
#define PinLumiere D8
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
char msg[50];
int value = 0;
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PinLumiere, OUTPUT);
pinMode(PinMoteurSens1, OUTPUT);
pinMode(PinMoteurSens2, OUTPUT);
pinMode(PinMoteurPWM, OUTPUT);
pinMode(PinFumigenePWM, OUTPUT);
}
void setup_wifi() {
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
String string;
// Affiche le topic entrant
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
// décode le message
for (int i = 0; i < length; i++) {
string += ((char)payload[i]);
}
// Affiche le message entrant
Serial.print(" Valeur brut : ");
Serial.print(string);
Serial.print(" en ");
// Conversion de Valeur en entier
int Valeur = string.toInt();
Serial.println(Valeur);
// Détermine quoi faire
if ( strcmp(topic, Vitesse) == 0 )
{
Serial.print(" Vitesse :");
Serial.println(Valeur);
analogWrite(PinMoteurPWM, Valeur);
}
if ( strcmp(topic, Sens1) == 0 )
{
Serial.print(" Sens 1 :");
Serial.println(Valeur);
digitalWrite(PinMoteurSens1, Valeur);
}
if ( strcmp(topic, Sens2) == 0 )
{
Serial.print(" Sens 2 :");
Serial.println(Valeur);
digitalWrite(PinMoteurSens2, Valeur);
}
if ( strcmp(topic, Lumiere) == 0 )
{
Serial.print("Lumiere :");
Serial.println(Valeur);
digitalWrite(PinLumiere, Valeur);
}
if ( strcmp(topic, Fumigene) == 0 )
{
Serial.print("Fumigene :");
Serial.println(Valeur);
analogWrite(PinFumigenePWM, Valeur);
}
delay(15);
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attente connection MQTT...");
// Attempt to connect
if (client.connect("ESP8266Client")) {
Serial.println("connected");
client.subscribe(Vitesse);
client.subscribe(Sens1);
client.subscribe(Sens2);
client.subscribe(Lumiere);
client.subscribe(Fumigene);
} else {
Serial.print("Erreur, rc=");
Serial.print(client.state());
Serial.println(" recommence dans 5 secondes");
delay(5000);
}
}
}
void loop()
{
if (!client.connected())
{
reconnect();
}
client.loop();
if ((millis() - TempsGlobal) > 3000)
{
client.publish(Nom, "BR81");
TempsGlobal = millis();
}
delay(10);
}
Bon, donc il y a trois Timers (UNO ou MEGA) :
Le Timer 0 correspond aux broches 5 et 6
Le Timer 1 correspond aux broches 9 et 10
Le Timer 2 correspond aux broches 3 et 11.
#include "UniversalAccessoryDecoder.h"
#define kDCC_INTERRUPT 3
#define AccessoryServoNumber 2
#define SERVO1 0
#define SERVO2 1
#define AccessoryMotorLightNumber 3
#define LIGHT1 2
#define LIGHT2 3
#define LIGHT3 4
#define LIGHT1_PORT 0
#define LIGHT2_PORT 1
#define LIGHT3_PORT 2
// Accessories
Accessories accessories;
DccCommander dccCommander;
AccessoryGroup groupServos;
AccessoryGroup groupLights;
// Drivers
DriverArduino *arduino;
//////////////////////////////////
//
// Setup
//
void setup()
{
UAD_StartSetup();
// Setup of Dcc commander
dccCommander.Setup(0x00, 0x00, kDCC_INTERRUPT);
dccCommander.SetStatusLedPin(13);
// Drivers setups
arduino = new DriverArduino(AccessoryMotorLightNumber, AccessoryServoNumber);
arduino->Setup();
arduino->SetupPortServo(SERVO1, 2); //sortie arduino
arduino->SetupPortServo(SERVO2, 3); //sortie arduino
arduino->SetupPortMotor(LIGHT1_PORT, 9, ANALOG); //sortie arduino
arduino->SetupPortMotor(LIGHT2_PORT, 10, ANALOG); //sortie arduino
arduino->SetupPortMotor(LIGHT3_PORT, 11, ANALOG); //sortie arduino
// Accessories setups
accessories.Setup(
AccessoryMotorLightNumber + AccessoryServoNumber,
new AccessoryServo(999, 0, 0), // (address DCC, sous address, durée activation )
new AccessoryServo(999, 0, 0), // (address DCC, sous address, durée activation )
new AccessoryLight(1, 0), //(address DCC, sous address, durée activation )
new AccessoryLight(1, 1), //(address DCC, sous address, durée activation )
new AccessoryLight(2, 0) //(address DCC, sous address, durée activation )
);
SERVO(accessories, SERVO1)->Setup(arduino, SERVO1, 10, 150); // Définition du servo: ( drivers, port de sortie, angle1 , angle 2)
SERVO(accessories, SERVO2)->Setup(arduino, SERVO2, 10, 150); // Définition du servo: ( drivers, port de sortie, angle1 , angle 2)
LIGHT(accessories, LIGHT1)->Setup(arduino, LIGHT1_PORT);
LIGHT(accessories, LIGHT2)->Setup(arduino, LIGHT2_PORT);
LIGHT(accessories, LIGHT3)->Setup(arduino, LIGHT3_PORT);
//Servo1
GroupState *pServo1_1 = new GroupState(320, 0, true); //(Addresse DCC, sous addresse, activation simultané)
pServo1_1->Setup(1, new GroupStateItem(accessories[SERVO1], MINIMUM)); //(port arduino, choix angle mini ou maxi, délai entre 2 action))
GroupState *pServo1_2 = new GroupState(320, 1, true);
pServo1_2->Setup(1, new GroupStateItem(accessories[SERVO1], MAXIMUM));
//Servo2
GroupState *pServo2_1 = new GroupState(319, 0, true); //(Addresse DCC, sous addresse, activation simultané)
pServo2_1->Setup(1, new GroupStateItem(accessories[SERVO2], MINIMUM)); //(port arduino, choix angle mini ou maxi, délai entre 2 action))
GroupState *pServo2_2 = new GroupState(319, 1, true);
pServo2_2->Setup(1, new GroupStateItem(accessories[SERVO2], MAXIMUM));
//Liste des actions servo
groupServos.Setup(4, pServo2_1, pServo2_2, pServo1_1, pServo1_2); // fusion des 2 actions
// LIGHT 1
GroupState *pLight1_1 = new GroupState(318, 0, true);
pLight1_1->Setup(1,new GroupStateItem(accessories[LIGHT1], LIGHTON));
GroupState *pLight1_2 = new GroupState(318, 1, true);
pLight1_2->Setup(1,new GroupStateItem(accessories[LIGHT1], LIGHTOFF));
// LIGHT 2
GroupState *pLight2_1 = new GroupState(317, 0, true);
pLight2_1->Setup(1,new GroupStateItem(accessories[LIGHT2], LIGHTON));
GroupState *pLight2_2 = new GroupState(317, 1, true);
pLight2_2->Setup(1,new GroupStateItem(accessories[LIGHT2], LIGHTOFF));
// LIGHT 3
GroupState *pLight3_1 = new GroupState(316, 0, true);
pLight3_1->Setup(1,new GroupStateItem(accessories[LIGHT3], LIGHTON));
GroupState *pLight3_2 = new GroupState(316, 1, true);
pLight3_2->Setup(1,new GroupStateItem(accessories[LIGHT3], LIGHTOFF));
// One group state with lights on/off/on, for Dcc code 319/0.
groupLights.Setup(6, pLight1_1, pLight1_2, pLight2_1, pLight2_2, pLight3_1, pLight3_2);
UAD_EndSetup();
}
void loop()
{
if (dccCommander.Loop())
{
accessories.Loop();
groupServos.Loop();
groupLights.Loop();
}
}