====== Le 14 avril : comptage d'impulsions ; réceptions des tubes GSTubes ======
===== Comptage d'impulsions =====
#include
int count = 0;
int pwmValue = 0;
int isCo = 0;
long precTime;
int countCallback(uint32_t ulPin) {
count++;
return 0;
}
void setup() {
pinMode(2, OUTPUT); // Les pins 2 et 3 sont utilisées pour
pinMode(3, OUTPUT); // controler la haute tension
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é
}
void RFduinoBLE_onDisconnect() {
isCo = 0; // Un smartphone s'est déconnecté
}
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);
}
Il se trouve qu'un bug dans le code source même de rfduino empêche nos 2 PWM de s'executer correctement. Heureusement, c'est assez simple a réparer : Dans Rfduino/cores/arduino/wiring_analog.c il faut remplacer les lignes
void turn_On_PPI_to_GPIO_for_PWM(uint32_t ulPin, uint32_t gpiote_channel, NRF_TIMER_Type* Timer, uint32_t CC_channel)
{
// Initialize Programmable Peripheral Interconnect
int chan_0 = find_free_PPI_channel(255);
int chan_1 = find_free_PPI_channel(chan_1);
...
par :
void turn_On_PPI_to_GPIO_for_PWM(uint32_t ulPin, uint32_t gpiote_channel, NRF_TIMER_Type* Timer, uint32_t CC_channel)
{
// Initialize Programmable Peripheral Interconnect
int chan_0 = find_free_PPI_channel(255);
int chan_1 = find_free_PPI_channel(chan_0);
...
Explication : la méthode find_free_PPI_channel à pour rôle de trouver les canaux PPI disponibles (ie pas utilisées par les stacks GZLL et BLE) en excluant le canal passé en argument. Pour le canal 0 on ne veut exclure aucun canaux donc on donne un id dont on est sur que s'en est pas un (les canaux sont numérotés de 0 à 16). Par contre pour le canal 1 on ne veut pas du canal 0 (sinon on a les mêmes). De plus l'auteur s'est clairement trompé car il n'est fait aucune référence de la variable chan_1 auparavant, ce qui signifie qu'elle n'a pas été initialisée.
===== Réception des tubes GSTubes =====
Les tubes sont arrivés par courrier ordinaire. Le délai est finalement raisonnable. Les tubes sont correctement emballés. Un seul certificat accompagne les trois tubes de la série Si-xx. Il est daté de …. 1981.
{{ :wiki:projets:smartphone-geiger:photo_gstubes.jpg?direct&200}}
* [[:wiki:projets:smartphone-geiger:jquerymobile|Article suivant: Design avec JQuery mobile]]
* [[:wiki:projets:smartphone-geiger:accueil|Retour à l'accueil]]
* [[:wiki:projets:smartphone-geiger:chronologie|Retour à la chronologie du projet]]
* [[:wiki:projets:smartphone-geiger:control-pwm|Article précédent : contrôle du PWM]]