Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Простой хронометр Arduino

Компоненты и расходные материалы

Arduino UNO
любой arduino .. а иногда не только
× 1
кнопка (без фиксации)
с понижающим резистором (я использую 1 кОм)
× 1
Резистор 10 кОм
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

Я занимаюсь интересным проектом, и мне нужен хронометр Arduino, который срабатывает всякий раз, когда я нажимаю кнопку. Это несложная вещь, но я подумал, что этот фрагмент кода будет полезен для других проектов.

Я, наверное, сэкономил тебе 1 час жизни на программировании.

EEPROM:

Память Arduino, которая не теряет свою информацию при отключении питания или перезагрузке платы (информация). Я использую #include библиотека, которая в основном делает все, и она уже установлена ​​по умолчанию.

ПРЕРЫВАНИЯ:

Что-то происходит внутри нашего Arduino, но мы хотим, чтобы он перестал делать то, что происходило, и уделил внимание нашей функции ISR, например, когда какой-то вывод вытягивается ВЫСОКО. Никакой дополнительной библиотеки здесь не требуется:

Код проекта:

  • Определяет и включает:
  #include  #define interruptPin 2 #define eeAddress 0 // АДРЕС ДЛЯ EEPROM ARDUINO´S (внутренняя энергонезависимая память) float starttime =0; // Переменные для вычисления float endtime =0; float resulttime =0, oldresulttime =0;  

Здесь нет ничего нового, мы включаем библиотеку EEPROM, мы решаем, где будет прикреплена кнопка (pin2).

Затем я решил использовать адрес 0 нашей памяти EEPROM для хранения нашего времени (float =4 байта). Arduino UNO имеет 1024 байта (чип ATmega328), но я выбрал адрес 0, потому что хоть раз в жизни пытался организовать.

  • setup ()
  void setup () {Serial.begin (9600); в то время как (! серийный) {; // ждем подключения последовательного порта. Требуется только для собственного порта USB} Serial.println ("Последовательная связь готова, сэр!:.. bip bip"); attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE);}  

Обычно мы инициируем последовательную связь между Arduino и нашим ПК (9600 бод):

  attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE);  

Attachinterrupt активирует функцию, когда логический уровень interruptPin изменяется так: (____________- ЗДЕСЬ ------------------_ ЗДЕСЬ____________).

Таким образом, он срабатывает два раза в начале нашего нажатия и в конце. Если ничего не происходит, наше значение interruptPin остается НИЗКИМ, потому что наш понижающий резистор «заставляет» его оставаться на низком уровне.

  • цикл ()
  void loop () {}  

Ничего такого. Положите туда свои вещи!

  • Другие функции:
  void refreshTime () {если (digitalRead (interruptPin)) {starttime =millis (); Serial.print ("Время начала:"); Serial.println (время начала); } иначе, если (digitalRead (interruptPin) ==LOW) {endtime =millis (); resulttime =время окончания-время начала; Serial.print ("Время окончания:"); Serial.println (время окончания); Serial.print ("Время результата:"); Serial.println (время результата); WhatsNewEeprom (); // хранит eeprom}  

Это функция, которая будет выполняться при прерывании вывода (interruptPin).

Прерывание запускается каждый раз, когда статус в interruptPin изменяется (с высокого на низкий или с низкого на высокий), те if (...) предназначены для определения того, изменяется ли его значение HIGH-> LOW или LOW-> high.

Сохраняет время, записанное внутренними часами Arduino millis (), и имеет значение для того, чтобы время нашего результата было готово. В конце концов, он сохраняет новую информацию в EEPROM:

  void WhatsNewEeprom () {Serial.println ("----------- проверка eeprom"); EEPROM.get (eeAddress, oldresulttime); Serial.print ("oldresulttime"); Serial.println (oldresulttime); Serial.print ("время результата"); Serial.println (время результата); if (resulttime! =oldresulttime) {EEPROM.put (eeAddress, resulttime); Serial.print ("----- Ding! Новое время, записанное в eeprom:"); Serial.println (время результата); } else {Serial.println ("Новое время не найдено, EEPROM не был нарушен"); }  

Он проверяет, совпадает ли значение времени, хранящееся в eeprom, у нас в переменной "resulttime", если это так, мы не меняли его, поэтому ничего не делать.

Дополнительный! Отказ от нашей кнопки:

Мы, люди, очень медлительны для времени обработки Arduino, одно нажатие кнопки кажется нам быстрым, но для Arduino действительно медленным, что заставляет сигнал «отскакивать», как пару раз переключение highlowhighlowhighlow перед установкой истинного статуса.>

Если мы хотим (я этого не делал), мы могли бы исправить это с помощью оборудования или программного обеспечения:

  • Устранение отказов с помощью программного обеспечения
  • Аппаратное устранение дребезга, используйте конденсатор !!! :D

Я просто добавлю 220 нФ параллельно (от сенсорного вывода до заземления)

Конденсатор «съедает» быстрое изменение напряжения.

Код

  • хронометр arduino
хронометр arduino Arduino
использует eeprom и прерывания, легко взломать
 // закодировано Хавьером Муньосом 23.10.2017 // вопросы и подписанные телеграммы на [email protected]#include  #define interruptPin 2 # define eeAddress 0 // АДРЕС ДЛЯ EEPROM ARDUINO (внутренняя энергонезависимая память) float starttime =0; // Переменные для вычисления float endtime =0; float resulttime =0, oldresulttime =0; void setup () {Serial.begin (9600); в то время как (! серийный) {; // ждем подключения последовательного порта. Требуется только для собственного порта USB} Serial.println ("Последовательная связь готова, сэр!:.. bip bip"); attachInterrupt (digitalPinToInterrupt (interruptPin), refreshTime, CHANGE); // активирует функцию при изменении логического уровня interruptPin так:(__- ЗДЕСЬ ------------------_ ЗДЕСЬ ____) таким образом он сохраняет время, в течение которого наш палец нажимал кнопку} void loop () {// здесь ваши данные // (память EEPROM) в последний раз измеряется в миллисекундах "float resulttime"} void refreshTime () {if (digitalRead (interruptPin) ) {время начала =миллис (); Serial.print ("Время начала:"); Serial.println (время начала); } иначе, если (digitalRead (interruptPin) ==LOW) {endtime =millis (); resulttime =время окончания-время начала; Serial.print ("Время окончания:"); Serial.println (время окончания); Serial.print ("Время результата:"); Serial.println (время результата); WhatsNewEeprom (); }} void WhatsNewEeprom () {Serial.println ("----------- проверка eeprom"); EEPROM.get (eeAddress, oldresulttime); Serial.print ("oldresulttime"); Serial.println (oldresulttime); Serial.print ("время результата"); Serial.println (время результата); if (resulttime! =oldresulttime) {EEPROM.put (eeAddress, resulttime); Serial.print ("----- Ding! Новое время, записанное в eeprom:"); Serial.println (время результата); } else {Serial.println ("Новое время не найдено, EEPROM не был нарушен"); }} 

Схема

простое соединение кнопки с понижающим резистором chronometer_APM32Y9FoM.fzz

Производственный процесс

  1. Простые настенные часы с использованием Adafruit 1/4 60 Ring Neopixel
  2. Простые часы со словами (Arduino)
  3. DIY Простой осциллограф Arduino 20 кГц на ЖК-дисплее Nokia 5110
  4. Arduino Spybot
  5. FlickMote
  6. Самодельный телевизор B-Gone
  7. Основные часы
  8. Простой датчик препятствий с Arduino
  9. Найди меня
  10. Простой будильник с DS1302 RTC