attachInterrupt не работает скетч
- Войдите на сайт для отправки комментариев
Чт, 26/04/2018 - 15:10
Чтобы протестировать датчик радиации отсюда http://geektimes.com/post/281618/ взят код
int pocet; // переменная для подсчета частиц
unsigned long time; // время наблюдения
void setup() {
pinMode(2, INPUT); // pin 2 вход от счетчика Гейгера
attachInterrupt(0, nacti, RISING); // настройка прерывания
Serial.begin(9600); // настройка скорости передачи данных по последовательному интерфейсу
Serial.println(" "); // Новая строка при ресете
}
void nacti() {
pocet = pocet++; // обработка int0
}
void loop() {
pocet = 0; // новое измерение
time = millis() + 60000; // время конца измерения
while (time > millis()) {} // ожидание 1 минуту
if (pocet < 10) Serial.print(" "); // форматировать согласно количества цифр
if (pocet < 100) Serial.print(" ");
if (pocet < 1000) Serial.print(" ");
Serial.print(pocet); // написать количество распадов/мин
Serial.print(" ");
for (int i = 0; i < pocet; i++) { // графический вывод
Serial.print("#");
}
Serial.println(" "); // окончание строки
}
Результат его рабоыт отраженный в системном мониторе должен быть таким:

Подаю руками 5 в на 2 пин несколько раз. Серийный монитор показывает нули. Как мне добиться такого же результата как в оригинале? Если у кого получится, поделитесь в чем секрет.
volatile int pocet;
Строка 12:
оставьте только
pocet++;
зачем этот цирк с конями?
Строки 17-18:
так писать нельзя. Конечно, Ваш код врядли предназначен для работы в течение двух месяцев без перезагрузки, но не привыкайте. Пишите правильно.
Насчёт Вашего заявления, что
Результат его рабоыт отраженный в системном мониторе должен быть таким:
позволю себе усомниться.
1) где на картинке пробелы, печатаемые в строке №19?
2) в строке №23 печатается один пробел. На картинке же их явно больше.
Оно может и правильно. Но серийный монитор по прежнему показывает нули и не реагирует на смену напряжения на 2 пине.
А свежий код, после правок, Вы не хотите показать? Или Вы предлагает нам сами догадываться что и как Вы поправили?
Похоже, это действительно вранье. Показатели монитора из другого скетча. Удивительно как много народу откоментировало эту статью и все явно специалисты. А то, что код не рабочий никто не заметил.
Нашел вот такой счетчик. Может, кому пригодится.
#include <SPI.h> #define LOG_PERIOD 15000 //Logging period in milliseconds, recommended value 15000-60000. #define MAX_PERIOD 60000 //Maximum logging period unsigned long counts; //variable for GM Tube events unsigned long cpm; //variable for CPM unsigned int multiplier; //variable for calculation CPM in this sketch unsigned long previousMillis; //variable for time measurement void tube_impulse(){ //procedure for capturing events from Geiger Kit counts++; } void setup(){ //setup procedure counts = 0; cpm = 0; multiplier = MAX_PERIOD / LOG_PERIOD; //calculating multiplier, depend on your log period Serial.begin(9600); // start serial monitor // uncommennt if you have time-out problem to connect with Radiation Logger // delay(2000); // Serial.write('0'); // sending zero to avoid connection time out with radiation logger // delay(2000); // Serial.write('0'); // sending zero to avoid connection time out with radiation logger pinMode(2, INPUT); // set pin INT0 input for capturing GM Tube events digitalWrite(2, HIGH); // turn on internal pullup resistors, solder C-INT on the PCB attachInterrupt(0, tube_impulse, FALLING); //define external interrupts } void loop(){ //main cycle unsigned long currentMillis = millis(); if(currentMillis - previousMillis > LOG_PERIOD){ previousMillis = currentMillis; cpm = counts * multiplier; Serial.print(cpm); // send cpm data to Radiation Logger Serial.write(' '); // send null character to separate next data counts = 0; } }Проверил руками, потом подключил прибор, кажисть работает. Правда распадов не так много фиксирует как в статье показано. Но, повторюсь, код там не рабочий.
И увеличивает ошибку прибора примерно в 4 раза .. :)
Да никому нафиг не сдалось анализировать ваш "код" на всю глубину. Вам указали на ошибки, за которые руки надо отрубать на месте, но вы и в вашем "новом" коде продолжаете их за собой тащить. Необучаем-с.
Не, это Вы "не читатель". Автор совершенно честно сказал что первый код он стырил в одном месте, а второй в ином. Это ваще ни разу не ЕГО код .. :)
кажисть работает
Вы пост #1 видели? Или человек его зря писал?
Может, кому пригодится.
Кому модет пригодится толком неработающий кусок кода? Только Вам или такому же как Вы.
Я так понимаю вы с помощью хамства сайт продвигаете. И с чего вы взяли что, это толком неработающий кусок кода? Код работает и назначение свое выполняет. А таким трололо вы только людей в заблуждение вводите. И ценность форума понижаете. Пока.
Да это ниразу не мой код. Да я вообще за жизнь не одного логического оператора не изобрел. Можешь идти фапать.
с чего вы взяли что, это толком неработающий кусок кода?
да, просто, посмотрели на код и взяли.
Код работает и назначение свое выполняет.
Тут спорить не буду, ибо хрен его знает, каково его назначение.