Здравствуйте, Купил китайскую плату и по примеру из интернета (Счетчик Гейгера для 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; } } все работает нормально, данные выводятся на монитор порта. Но мне нужно запустить его на 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; } } Но выводятся одни нули. Пробовал подключать к другим пинам, но ничего не получается. Не пойму почему не приходят данные. Помогите плиз.
D1, D2, D6, D7 заняты. Пробовал подключать и к D3, D4, D5 результат тот же. К какому пину правильнее подключить?
Я не силен в программировании этой железки, но ваше направление - найти ответ на вопрос "прерывания ESP-8266 в среде Ардуино". Код (C++): attachInterrupt(0, tube_impulse, FALLING); //define external interrupts Вот эта часть кода определяет прерывание "0", к какой ноге модуля оно присоединено, есть ли оно вообще, я не знаю - поищите сами.
подсказка - оператор attachInterrupt(....) задает совершенно конкретный пин и на других работать не будет. какой именно - смотрите в документации на NodeMCU, я не в курсе