Et bien maintenant il me reste le plus compliqué à faire ! Là j'ai donc ma télécommande OSC avec 14 boutons pour les cabines. Quand j'appuie sur le 3, ça affiche 3 sur l'aff. led, etc... jusqu'à 9 (pour le moment je n'ai qu'un seul Digit Pin donc je vais jusqu'à 9). Voici mon code pour le moment :
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <OSCBundle.h> // for receiving OSC messages
#include "SevSeg.h"
SevSeg sevseg;
char ssid[] = "***"; // your network SSID (name)
char pass[] = "***"; // your network password
WiFiUDP Udp; // A UDP instance to let us send and receive packets over UDP
const unsigned int localPort = 8000; // local port to listen for UDP packets at the NodeMCU (another device must send OSC messages to this port)
const unsigned int destPort = 9000; // remote port of the target device where the NodeMCU sends OSC to
void setup() {
Serial.begin(115200);
// Specify a static IP address for NodeMCU
// If you erase this line, your ESP8266 will get a dynamic IP address
//WiFi.config(IPAddress(192,168,0,123),IPAddress(192,168,0,1), IPAddress(255,255,255,0));
// Connect to WiFi network
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("Starting UDP");
Udp.begin(localPort);
Serial.print("Local port: ");
Serial.println(Udp.localPort());
// AFF LED sevseg HD1133 O
byte numDigits = 1;
byte digitPins[] = {};
byte segmentPins[] = {5, 4, 0, 2, 14, 12, 13}; // de D1 à D7 sur l'ESP12
bool resistorsOnSegments = true;
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(100);
}
void loop() {
OSCMessage msgIN;
int size;
if((size = Udp.parsePacket())>0){
while(size--)
msgIN.fill(Udp.read());
if(!msgIN.hasError()){
msgIN.route("/1/push1",push1);
msgIN.route("/1/push2",push2);
msgIN.route("/1/push3",push3);
msgIN.route("/1/push4",push4);
msgIN.route("/1/push5",push5);
msgIN.route("/1/push6",push6);
msgIN.route("/1/push7",push7);
msgIN.route("/1/push8",push8);
msgIN.route("/1/push9",push9);
}
}
}
// LES PUSH OSC ALLUMENT LES LEDS
void push1(OSCMessage &msg, int addrOffset){
sevseg.setNumber(1);
sevseg.refreshDisplay();
}
void push2(OSCMessage &msg, int addrOffset){
sevseg.setNumber(2);
sevseg.refreshDisplay();
}
void push3(OSCMessage &msg, int addrOffset){
sevseg.setNumber(3);
sevseg.refreshDisplay();
}
void push4(OSCMessage &msg, int addrOffset){
sevseg.setNumber(4);
sevseg.refreshDisplay();
}
void push5(OSCMessage &msg, int addrOffset){
sevseg.setNumber(5);
sevseg.refreshDisplay();
}
void push6(OSCMessage &msg, int addrOffset){
sevseg.setNumber(6);
sevseg.refreshDisplay();
}
void push7(OSCMessage &msg, int addrOffset){
sevseg.setNumber(7);
sevseg.refreshDisplay();
}
void push8(OSCMessage &msg, int addrOffset){
sevseg.setNumber(8);
sevseg.refreshDisplay();
}
void push9(OSCMessage &msg, int addrOffset){
sevseg.setNumber(9);
sevseg.refreshDisplay();
}
Simple..Maintenant j'aimerais essayer le fameux code "file d'attente" :
- le 1er numéro activé s'affiche sur l'afficher Led
- les numéros activés ensuite sont "stocké" en mémoire mais ne s'affichent pas. Ils s'affichent quand on appuie sur un bouton physique sur le boitier d'Albert.
Albert a un boitier avec 1 aff led (qui affiche les num de cabine de 1 à 14 activés par l'osc) et un bouton pour passer les numéros suivants, comme ça il distribue le numéro de cabine, puis il appuie sur le bouton pour voir les cabines libres au fur et à mesure.
C'est pas gagné, c'est un autre niveau de code, je regarde du coté des QueueArray , FIFO, circular.buffer...