• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Счетчик Гейгера на NodeMCU

Alex20280

New member
Здравствуйте,

Купил китайскую плату и по примеру из интернета (Счетчик Гейгера для Arduino) хочу сделать себе счетчик Гейгера.
Запустил следующий код на ардуино нано:
Код:
#include <SPI.h>

#define LOG_PERIOD 15000  //Logging period in milliseconds, recommended value 15000-60000.
#define MAX_PERIOD 60000  //Maximum logging period without modifying this sketch


unsigned long counts;     //variable for GM Tube events
float cpm;        //variable for CPM
unsigned long multiplier;  //variable for calculation CPM in this sketch
unsigned long previousMillis;  //variable for time measurement
float MSVh;
float MR;
float conversionFactor = 0.0057; //SBM-20
//float conversionFactor = 0.008120; // J305ß

void tube_impulse(){       //subprocedure for capturing events from Geiger Kit
  counts++;
}
void setup()  
              {
  Serial.begin(9600);


        counts = 0;
        cpm = 0;
        multiplier = MAX_PERIOD / LOG_PERIOD;      //calculating multiplier, depend on your log period
        Serial.begin(9600);
        attachInterrupt(0, tube_impulse, FALLING); //define external interrupts
               }


void loop() {
unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > LOG_PERIOD){
    previousMillis = currentMillis;
    cpm = counts * multiplier;
    MSVh = cpm/151;
    MSVh = cpm*conversionFactor;
   
    Serial.print(cpm);
    Serial.println(" CPM");
    Serial.print(MSVh);
    Serial.println (" mSVh");
    
    counts = 0;
  }
}
все работает нормально, данные выводятся на монитор порта.
Screenshot_1.png

Но мне нужно запустить его на NodeMCU, чтобы отправлять данные по wifi. Подключил китайскую плату пину D8 на NodeMCU, немного переделал код:

Код:
#include <SPI.h>

#define LOG_PERIOD 15000  //Logging period in milliseconds, recommended value 15000-60000.
#define MAX_PERIOD 60000  //Maximum logging period without modifying this sketch

#define gaugePin D8

unsigned long counts;     //variable for GM Tube events
float cpm;        //variable for CPM
unsigned long multiplier;  //variable for calculation CPM in this sketch
unsigned long previousMillis;  //variable for time measurement
float MSVh;
float MR;
float conversionFactor = 0.0057; //SBM-20
//float conversionFactor = 0.008120; // J305ß

void ICACHE_RAM_ATTR tube_impulse(){       //subprocedure for capturing events from Geiger Kit
  counts++;
}
void ICACHE_RAM_ATTR setup()  
              {
  Serial.begin(9600);
  counts = 0;
  cpm = 0;
  multiplier = MAX_PERIOD / LOG_PERIOD;      //calculating multiplier, depend on your log period
  Serial.begin(9600);
  pinMode(gaugePin, OUTPUT); //Set gaugePin as output
  attachInterrupt(0, tube_impulse, FALLING); //define external interrupts
               }


void loop() {
unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > LOG_PERIOD){
    previousMillis = currentMillis;
    cpm = counts * multiplier;
    MSVh = cpm*conversionFactor;

    Serial.print(cpm);
    Serial.println(" CPM");
    Serial.print(MSVh);
    Serial.println (" mSVh");
   
    counts = 0;
  }
}
Но выводятся одни нули.
Screenshot_8.png
Пробовал подключать к другим пинам, но ничего не получается. Не пойму почему не приходят данные. Помогите плиз.
 
Сверху Снизу