Счетчик гейгера на nodemcu

Тема в разделе "ESP8266, ESP32", создана пользователем Alex20280, 24 янв 2020.

Метки:
  1. Alex20280

    Alex20280 Нерд

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

    Купил китайскую плату и по примеру из интернета (Счетчик Гейгера для Arduino) хочу сделать себе счетчик Гейгера.
    Запустил следующий код на ардуино нано:
    Код (C++):
    #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, немного переделал код:
    Код (C++):
    #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
    Пробовал подключать к другим пинам, но ничего не получается. Не пойму почему не приходят данные. Помогите плиз.
     
  2. alp69

    alp69 Форумчанин

    Позвольте полюбопытствовать - что мотивировало Вас выбрать для подключения именно D8?
     
  3. Alex20280

    Alex20280 Нерд

    D1, D2, D6, D7 заняты. Пробовал подключать и к D3, D4, D5 результат тот же. К какому пину правильнее подключить?
     
  4. ИгорьК

    ИгорьК Гуру

    Я не силен в программировании этой железки, но ваше направление - найти ответ на вопрос "прерывания ESP-8266 в среде Ардуино".

    Код (C++):
      attachInterrupt(0, tube_impulse, FALLING); //define external interrupts
    Вот эта часть кода определяет прерывание "0", к какой ноге модуля оно присоединено, есть ли оно вообще, я не знаю - поищите сами.
     
    Alex20280 нравится это.
  5. b707

    b707 Гуру

    подсказка - оператор attachInterrupt(....) задает совершенно конкретный пин и на других работать не будет. какой именно - смотрите в документации на NodeMCU, я не в курсе
     
    Alex20280 нравится это.
  6. Alex20280

    Alex20280 Нерд

    Спасибо Разобрался:)