제조공정
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
|
저는 재미있는 프로젝트를 진행 중이며 버튼을 누를 때마다 작동하는 Arduino 크로노미터가 필요했습니다. 복잡한 것은 아니지만 이 코드가 다른 사람들의 프로젝트에 유용할 것이라고 생각했습니다.
코딩 시간을 1시간이나 절약할 수 있었습니다.
EEPROM:
전원을 차단하거나 보드를 재설정해도 정보를 잃지 않는 Arduino의 메모리.(정보). #include
를 사용하고 있습니다. 기본적으로 모든 작업을 수행하고 기본적으로 이미 설치되어 있는 라이브러리입니다.
인터럽트:
Arduino 내부에서 일이 일어나고 있지만, 예를 들어 일부 핀이 HIGH로 당겨질 때 진행 중인 모든 작업을 중단하고 ISR 기능에 주의를 기울이기를 원합니다. 여기에 추가 라이브러리가 필요하지 않습니다.
그림>
프로젝트 코드: <울>
#include #define interruptPin 2 #define eeAddress 0 // ARDUINO의 EEPROM용 주소(내부 비휘발성 메모리) float starttime =0; // 수학을 수행할 변수 float endtime=0; 부동 결과 시간 =0, 이전 결과 시간 =0; 코드>
여기에 EEPROM 라이브러리가 포함된 새로운 것은 없으며 버튼이 (pin2)에 부착될 위치를 결정합니다.
그런 다음 EEPROM 메모리의 주소 0을 사용하여 시간을 저장하기로 결정했습니다(float=4bytes). 아두이노 UNO는 1024바이트(칩 ATmega328)를 가지고 있지만, 저는 일생에 한 번 정리하려고 했기 때문에 주소 0을 선택했습니다.
<울>void setup() { Serial.begin(9600); 동안 (! 직렬) {; // 직렬 포트가 연결될 때까지 기다립니다. 기본 USB 포트에만 필요 } Serial.println("직렬 통신이 준비되었습니다!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);}
일반적으로 Arduino와 PC 사이에 직렬 통신을 시작합니다(9600 보드):
attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);
InterruptPin의 논리 수준이 다음과 같이 변경되면 Attachinterrupt가 기능을 활성화합니다:(____________-HERE--------------------HERE____________).
이렇게 하면 누르기 시작과 끝에서 두 번 트리거됩니다. 아무 일도 일어나지 않으면 풀다운 저항이 "강제로" 낮게 유지되기 때문에 interruptPin 값이 LOW로 유지됩니다.
<울>무효 루프() { }
아무것도. 거기에 물건을 넣으세요!
<울>핀(interruptPin)에 인터럽트가 발생했을 때 실행될 함수입니다.
인터럽트는 interruptPin의 상태가 HIGH에서 LOW로 또는 LOW에서 HIGH로 변경될 때마다 트리거되며, if(...)는 HIGH->LOW 또는 LOW->높은 변경 여부를 감지하기 위한 것입니다.
Arduino millis()의 내부 시계에 의해 기록된 시간을 저장하고 결과 시간을 준비하는 데 차이가 있습니다. 마지막에 eeprom에 새 정보를 저장합니다.
무효 WhatsNewEeprom(){ Serial.println("-------------eeprom 확인 중"); EEPROM.get( eeAddress, oldresulttime ); Serial.print("oldresulttime");Serial.println(oldresulttime); Serial.print("결과시간");Serial.println(결과시간); if(resulttime!=oldresulttime){ EEPROM.put( eeAddress, 결과 시간); Serial.print("-----Ding! eeprom에 기록된 새 시간:");Serial.println(resulttime); }else{ Serial.println("새 시간을 찾을 수 없습니다. eeprom이 방해받지 않았습니다."); } 코드>
이것은 eeprom에 저장된 시간 값이 "resulttime" 변수에 있는 것과 동일한지 확인합니다. 그렇다면 변경하지 않았으므로 아무 것도 하지 마십시오.
추가의! 버튼 디바운싱:
우리 인간은 Arduino 처리 시간에 대해 매우 느립니다. 버튼을 한 번만 누르면 우리에게는 빠른 것처럼 보이지만 Arduino의 경우 정말 느려서 신호가 실제 상태에 정착하기 전에 highlowhighlowhighlow를 두 번 전환하는 것과 같이 신호 "바운스"를 만듭니다.
우리가 원할 경우(저는 그렇지 않았습니다) 하드웨어나 소프트웨어를 통해 수정할 수 있습니다.
<울>그림>
220nF를 병렬로 추가하겠습니다(sensepin에서 GND로)
커패시터는 전압의 빠른 변화를 "먹습니다".
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">//Javier Muñoz 23/10/2017//questions 및 단일 전보를 [email protected]으로 전송합니다.#include섹션>#define interruptPin 2#define eeAddress 0 // ARDUINO의 EEPROM에 대한 주소(내부 비휘발성 메모리) float 시작 시간 =0; // 수학을 수행할 변수 float endtime=0; 부동 결과 시간 =0, 이전 결과 시간 =0; 무효 설정() { Serial.begin(9600); 동안 (! 직렬) {; // 직렬 포트가 연결될 때까지 기다립니다. 기본 USB 포트에만 필요 } Serial.println("직렬 통신이 준비되었습니다!:.. bip bip"); attachInterrupt(digitalPinToInterrupt(interruptPin), refreshTime, CHANGE);//interruptPin의 논리 수준이 다음과 같이 변경될 때 함수를 활성화합니다. (__-HERE--------------------_HERE____) 이렇게 하면 손가락이 버튼을 누른 시간을 저장}void loop() {//your stuff here//(eeprom stored) 밀리초로 측정된 마지막 시간 "float resulttime"}void refreshTime(){ if(digitalRead(interruptPin) ){ 시작시간=밀리(); Serial.print("시작 시간:"); Serial.println(시작 시간); }else if(digitalRead(interruptPin)==낮음){ endtime=millis(); 결과시간=종료시간-시작시간; Serial.print("종료시간:"); Serial.println(종료시간); Serial.print("결과 시간:"); Serial.println(결과 시간);WhatsNewEeprom(); }}무효 WhatsNewEeprom(){ Serial.println("-------------eeprom 확인 중"); EEPROM.get( eeAddress, oldresulttime ); Serial.print("oldresulttime");Serial.println(oldresulttime); Serial.print("결과시간");Serial.println(결과시간); if(resulttime!=oldresulttime){ EEPROM.put( eeAddress, 결과 시간); Serial.print("-----Ding! eeprom에 기록된 새 시간:");Serial.println(resulttime); }else{ Serial.println("새 시간을 찾을 수 없습니다. eeprom이 방해받지 않았습니다."); }}
제조공정
구성품 및 소모품 SparkFun esp8266 × 1 Arduino UNO × 1 SparkFun 로직 레벨 변환기 - 양방향 × 1 브레드보드(일반) × 1 점퍼 와이어(일반) × 1 앱 및 온라인 서비스 Arduino IDE circuito.io 펌웨어.ino 소프트웨어 시리얼 이 프로젝트 정보 우리의 목표는 AT 명령(일반적으로 제
구성품 및 소모품 Arduino Nano R3 × 1 연산 증폭기, 연산 증폭기 + 비교기 + 참조 × 1 IRF840 파워 MOSFET × 1 LED(일반) × 6 저항기, 커패시터, 다이오드 × 1 필요한 도구 및 기계 납땜 인두(일반) 앱 및 온라인 서비스 Arduino IDE 이 프로젝트 정보 이것은 러시아에서 잘 알려진 펄스 유도 금속 탐지기 PIRAT의