정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

유량센서 아두이노 소스를 앱인벤터로 보내 어플리케이션으로 어떻게나타내나요??
전창범 | 2018-05-06

8개의 유량센서를 각각 센서를 앱인벤터로해서 어플리케이션으로 받아보고싶은데요 우선은 2개의 유량센서까지는 출력이가능한데 문제점은 이 센서를 어떻게 앱인벤터로 넘겨서 출력을 할수가있는지 그리고 사용안하는 유량센서는 화면에 안타나게 하는지 궁금합니다.  

// which pin to use for reading the sensor? can use any pin!
#include <SoftwareSerial.h> //~~~.h 라이브러리추가
SoftwareSerial aaa(8,9); //aaa클래스라는 클래스는 
                              //2번핀 - TXD
                             //3번핀 - RXD 라고 알려줌
#define FLOWSENSORPIN 2
#define FLOWSENSORPIN1 3
int IN3=5;
int IN4=4;

 

// count how many pulses!

volatile uint16_t pulses = 0;
volatile uint16_t pulses1 = 0;
// track the state of the pulse pin

volatile uint8_t lastflowpinstate;
volatile uint8_t lastflowpinstate1;
// you can try to keep time of how long it is between pulses

volatile uint32_t lastflowratetimer = 0;
volatile uint32_t lastflowratetimer1 = 0;
// and use that to calculate a flow rate

volatile float flowrate;
volatile float flowrate1;
// Interrupt is called once a millisecond, looks for any pulses from the sensor!

SIGNAL(TIMER0_COMPA_vect) {

  uint8_t x = digitalRead(FLOWSENSORPIN);
  
  

  if (x == lastflowpinstate) {

    lastflowratetimer++;

    return; // nothing changed!
  
  }
 

  

  if (x == HIGH) {

    //low to high transition!

    pulses++;

  }
 
  lastflowpinstate = x;
  
  flowrate = 1000.0;
 
  flowrate /= lastflowratetimer;  // in hertz
  
  lastflowratetimer = 0;
 
}
SIGNAL(TIMER0_COMPB_vect) {

  uint8_t y = digitalRead(FLOWSENSORPIN1);

  if (y == lastflowpinstate1) {

    lastflowratetimer1++;

    return; // nothing changed!
  
  }
 
  if (y == HIGH) {

    //low to high transition!

    pulses1++;

  }
 
  lastflowpinstate1 = y;
  
  flowrate1 = 1000.0;
 
  flowrate1 /= lastflowratetimer1;  // in hertz
  
  lastflowratetimer1 = 0;
 
}

 

void useInterrupt(boolean v) {

  if (v) {

    // Timer0 is already used for millis() - we'll just interrupt somewhere

    // in the middle and call the "Compare A" function above

    OCR0A = 0xAF;

    TIMSK0 |= _BV(OCIE0A);

  } else {

    // do not call the interrupt function COMPA anymore

    TIMSK0 &= ~_BV(OCIE0A);

  }

}

void useInterrupt1(boolean V) {

  if (V) {

    // Timer0 is already used for millis() - we'll just interrupt somewhere

    // in the middle and call the "Compare A" function above

    OCR0B = 0xAF;

    TIMSK0 |= _BV(OCIE0B);

  } else {

    // do not call the interrupt function COMPA anymore

    TIMSK0 &= ~_BV(OCIE0B);

  }

}


void setup() {

  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
  aaa.begin(9600);           //aaa가 9600bps의 속도로 통신을 시작함
  
   Serial.begin(9600);

   Serial.print("Flow sensor test!");

   

   pinMode(FLOWSENSORPIN, INPUT);
   pinMode(FLOWSENSORPIN1, INPUT);
   digitalWrite(FLOWSENSORPIN, HIGH);
   digitalWrite(FLOWSENSORPIN1, HIGH);
   lastflowpinstate = digitalRead(FLOWSENSORPIN);
   lastflowpinstate1 = digitalRead(FLOWSENSORPIN1);
   useInterrupt(true);
   useInterrupt1(true);
}

 


void loop()                     // run over and over again

  float liters = pulses;

  liters /= 7.5;

  liters /= 60.0;

  if ( liters != -1 )

    {

      Serial.print(liters); Serial.println(" Liters");

    }
    delay(1000);
  float liters1 = pulses1;

  liters1 /= 7.5;

  liters1 /= 60.0;
  if ( liters1 != -1 )

    {

      Serial.print(liters1); Serial.println(" Litersa");

    }
     aaa.println(liters);
     aaa.println(liters1);

  delay(1000);

 switch(aaa.read()){            //통신으로 얻은 데이터를 불러온다
    case 'a':                      //그 값이 a인경우
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
    break; 
               //이후 switch안의 텍스트 무시 
   case 'b':                    //그 값이 b인경우
   digitalWrite(IN3,LOW);
   digitalWrite(IN4,LOW);
   break;  
}
}

이전글   |    아두이노 쉴드 없이 서버 연결 2018-05-05
다음글   |    튜토리얼글 앱 인벤터2를 이용하여 BLE 통신을 해봅시다. 관한 질문입니다. ... 2018-05-07