• Система автоматизации с открытым исходным кодом на базе 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
Пробовал подключать к другим пинам, но ничего не получается. Не пойму почему не приходят данные. Помогите плиз.
 
Сверху Снизу