Outils pour utilisateurs

Outils du site


wiki:projets:smartphone-geiger:comptage-leds

Mise en oeuvre des LED RGB avec RFduino

L'objectif est ici de disposer de voyants permettant de connaître directement l'état du capteur, sans avoir à consulter l'application sur le smartphone. Un voyant pour l'alimentation (on/off: éteint/vert, batterie faible : rouge, à implémenter après avoir complété le circuit), un voyant pour l'état de connexion bluetooth (bleu), un voyant pour les coups comptés (blanc).

Nous utilisons des LED RGB WS2812 en ruban souple.

Pour que le code fonctionne correctement, il faut patcher la librairie Adafruit comme expliqué dans ce lien.

#include <RFduinoBLE.h>
#include "Adafruit_NeoPixel.h"
 
int count = 0;
int pwmValue = 0;
 
int isCo = 0;
 
long precTime;
 
Adafruit_NeoPixel strip = Adafruit_NeoPixel(3, 6, NEO_GRB + NEO_KHZ800);
 
int countCallback(uint32_t ulPin) {
  count++;
 
  strip.setPixelColor(2, strip.Color(255, 255, 255)); // Flash geiger
  strip.show();
  delay(50);
  strip.setPixelColor(2, strip.Color(0, 0, 0));
  strip.show();
  return 0;
}
 
void setup() {  
  pinMode(2, OUTPUT); // Les pins 2 et 3 sont utilisées pour
  pinMode(3, OUTPUT); // controler la haute tension
 
  strip.begin();
  strip.show();
 
  strip.setPixelColor(0, strip.Color(0, 255, 0)); // Etat de batterie
  strip.show();
 
  pinMode(4, INPUT); // La pin 4 compte les impulsions du tube
  RFduino_pinWakeCallback(4, HIGH, countCallback);
 
  RFduinoBLE.deviceName = "OpenGeiger"; // Le nom et la description doivent faire
  RFduinoBLE.advertisementData = ""; // moins de 18 octets en tout.
 
  RFduinoBLE.begin();
 
  precTime = millis();
}
 
void loop() {
 if (millis() - precTime > 10000) {
   // Toutes les 10 secondes, on envoi le comptage au smartphone
   RFduinoBLE.sendInt(count);
 
   precTime = millis();
   count = 0;
 }
}
 
void RFduinoBLE_onConnect() {
  isCo = 1; // Un smartphone s'est connecté
  strip.setPixelColor(1, strip.Color(0, 0, 255)); // Etat bluetooth
  strip.show();
}
 
void RFduinoBLE_onDisconnect() {
 isCo = 0; // Un smartphone s'est déconnecté
 strip.setPixelColor(1, strip.Color(0, 0, 0));
 strip.show();
}
 
int getInt(char*data, int len) {
  int value=0;
  int p=1;
  for (int i=len-1 ; i>=0 ; i--) {
    value += p*(data[i]-'0');
    p*=10;
  }
  return value;
}
 
void RFduinoBLE_onReceive(char *data, int len) {
  pwmValue = getInt(data, len);
  int v = (int)(pwmValue*2.55);
  analogWrite(2, v);
  analogWrite(3, v);
}
wiki/projets/smartphone-geiger/comptage-leds.txt · Dernière modification: 2016/09/11 13:15 (modification externe)