====== 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]]