코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
lcd 및 시리얼 출력 외부 입력시 실행토록 하는 구문 동작안함
멍밍이 | 2020-09-03
|
|
---|---|
짜집기 해서 이렇게 만들었는데 PLC 출력 신호를 입력을 받을 때만 실행하려는데 디지탈7 번 핀을 입력으로 잡아서 실행하려고 아래와 같이 while(digitalRead(a==HIGH)) 부분 관련 문구를 추가 했는데 입력 유무와 관계없이 계속 동작합니다 7번핀에 5v 입력 또는 gnd 입력과 무관합니다 무엇이 잘못된건지요
#include <LiquidCrystal_I2C.h> #include <Wire.h>
#define RANGE 50 LiquidCrystal_I2C lcd(0x27, 16, 2);
// 실측한 최소값과 최대값을 얻어 이를 min과 max 값에 넣습니다: int min = 3; // 최소 값 int max = 1001; // 최대 값 int value; // 센서 읽은 값 int plotX, gauss; char c;
int a = 7; int b = 8;
void setup() { // 시리얼 모니터 출력을 위한 시리얼 통신 초기화를 합니다 pinMode (a, INPUT); pinMode (b, OUTPUT); lcd.init(); // I2C LCD를 초기화 합니다.. lcd.backlight(); // I2C LCD의 백라이트를 켜줍니다. Serial.begin(9600); }
void loop() { while(digitalRead(a==HIGH)) { // 센서 값을 읽어 들입니다: value = analogRead(A0);
// X 축의 0 ~ 49 사이 값으로 변환합니다: plotX = constrain(map(value, min, max, 0, RANGE - 1), 0, RANGE - 1); // 가우스 값으로 변환합니다: gauss = constrain(map(value, min, max, -800, 800), -800, 800); // 시리얼 모니터에 다음 2줄과 같이 출력하기 위하여 '|'를 먼저 출력 // 하고, plotX 값은 'O'로 나머지는 '-'로 가운데와 맨 끝은 '|'로 // 출력합니다. // // |------------O-----------|-------------------------|-400 Gauss // |------------------------|-------------O-----------|400 Gauss // 제일 처음을 위한 '|'를 출력합니다 Serial.print("|"); // 가운데가 아니면 '-'를 출력하고 중앙일 경우에는 '|'를 출력합니다 for(int i=0; i < plotX ; i++) { if(i == (RANGE/2 - 1)) {c = '|'; } else c = '-'; Serial.print(c); }
// plotX 위치에는 'O'를 출력합니다 Serial.print("O"); for(int i= plotX + 1; i < RANGE; i++) { // 만약 중앙이라면 '|'를 출력하고 아니라면 '-'를 출력합니다 if(i == (RANGE/2 - 1)) c = '|'; else c = '-'; Serial.print(c); } // 맨 끝에는 '|'를 출력합니다 Serial.print("|"); // 가우스 값을 출력합니다 Serial.print(gauss); Serial.print(" Gauss"); Serial.println();
// lcd 절대값으로 판단 lcd.clear(); // lcd의 화면을 지웁니다. if (gauss >= 0) { lcd.setCursor(0, 0); // lcd의 0,0을 지정합니다. lcd.print("N pole"); if (abs(gauss) >= 400) { lcd.print("= 1"); } else { lcd.print("=0"); } lcd.setCursor(10, 0); // lcd의 0,0을 지정합니다. lcd.print(abs(gauss));lcd.print("G"); }
if (gauss < 0) { lcd.setCursor(0, 1); // lcd의 0,0을 지정합니다. lcd.print("S pole"); if (abs( gauss) >= 400) { lcd.print("= 1"); } else { lcd.print("=0"); } lcd.setCursor(10, 1); // lcd의 0,0을 지정합니다. lcd.print(abs(gauss));lcd.print("G"); } }
delay(100); }
|
|
이전글 | 아두이노 NRF24L01 1:N | 2020-09-02 |
다음글 | 오렌지보드 블루투스 | 2020-09-03 |