외부 인터럽트 사용하기
boolean LEDStatus = LOW;
void setup()
{
pinMode(12, OUTPUT);
pinMode(2,INPUT_PULLUP);
attachInterrupt(0,interrupt,FALLING);
digitalWrite(12,LOW);
}
void interrupt()
{
LEDStatus = !LEDStatus;
digitalWrite(12,LEDStatus);
}
void loop()
{
}
-------------------------------
FND 사용하기
unsigned fndOnFlag = LOW;
void setup()
{
//6~13 PINT OUT
for(int i =6; i<=13 ; i++)
{
pinMode(i,OUTPUT);
}
}
void loop()
{
fndOnFlag = !fndOnFlag;
for(int i = 6; i <= 13; i++)
{
digitalWrite(i,fndOnFlag);
}
delay(500);
}
------------------------------------
FND 숫자 표시(사진)
int arrNum[10][10] = {
{0,0,0,0,0,0,1},
{1,0,0,1,1,1,1},
{0,0,1,0,0,1,0},
{0,0,0,0,1,1,0},
{1,0,0,1,1,0,0},
{0,1,0,0,1,0,0},
{0,1,0,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0}
};
unsigned int count = 0;
boolean dpFlag = LOW;
void setup()
{
//6~13 PINT OUT
for(int i =6; i<=13 ; i++)
{
pinMode(i,OUTPUT);
}
}
void loop()
{
setFndNum(count++);
if(count == 10) count = 0;
digitalWrite(13,dpFlag);
dpFlag = !dpFlag;
delay(10
00);
}
void setFndNum(int num){
for(int i = 6; i <= 13; i++){
digitalWrite(i,arrNum[num][i-6]);
}
}
----------------------------
FND 스탑 워치
1. 내가 한 방식
#include<MsTimer2.h>
int arrNum[10][10] = {
{0,0,0,0,0,0,1},
{1,0,0,1,1,1,1},
{0,0,1,0,0,1,0},
{0,0,0,0,1,1,0},
{1,0,0,1,1,0,0},
{0,1,0,0,1,0,0},
{0,1,0,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0}
};
unsigned int count = 0;
boolean dpFlag = LOW;
boolean stopFlag = LOW;
boolean swStatus = LOW;
void setup()
{
//5 PIN SWICH
pinMode(5,INPUT_PULLUP);
//6~13 PINT OUT
for(int i =6; i<=13 ; i++)
{
pinMode(i,OUTPUT);
}
swStatus = HIGH;
MsTimer2::set(10,swSet);
MsTimer2::start();
}
void swSet()
{
if(stopFlag == LOW){
setFndNum(count++);
if(count == 10) count = 0;
digitalWrite(13,dpFlag);
dpFlag = !dpFlag;
delay(0.1);
}
}
void loop()
{
if(digitalRead(5) == LOW && swStatus == LOW){
swStatus = HIGH;
}
else if(digitalRead(5) == HIGH && swStatus == HIGH)
{
swStatus = LOW;
stopFlag = !stopFlag;
}
}
void setFndNum(int num){
for(int i = 6; i <= 13; i++){
digitalWrite(i,arrNum[num][i-6]);
}
}
2. 정답 코드
int arrNum[10][10] = {
{0,0,0,0,0,0,1},
{1,0,0,1,1,1,1},
{0,0,1,0,0,1,0},
{0,0,0,0,1,1,0},
{1,0,0,1,1,0,0},
{0,1,0,0,1,0,0},
{0,1,0,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0}
};
unsigned int count = 0;
boolean dpFlag = LOW;
boolean stopFlag = LOW;
boolean swStatus = LOW;
void setup()
{
//5 PIN SWICH
pinMode(5,INPUT_PULLUP);
//6~13 PINT OUT
for(int i =6; i<=13 ; i++)
{
pinMode(i,OUTPUT);
}
}
void loop()
{
if(digitalRead(5) == LOW && swStatus == LOW){
swStatus = HIGH;
}
else if(digitalRead(5) == HIGH && swStatus == HIGH)
{
swStatus = LOW;
stopFlag = !stopFlag;
}
if(stopFlag == LOW) {
setFndNum(count++);
if(count > 6) count =1; //카운터가 6이하만 나오도록 유도
delay(10);
}
}
void setFndNum(int num){
for(int i = 6; i <= 13; i++){
digitalWrite(i,arrNum[num][i-6]);
}
}
//Serial 통신으로 제어하는 LED
int incomingByte = 0;
void setup() {
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.begin(9600);
}
void loop() {
}
void serialEvent(){
incomingByte = Serial.read();
Serial.println(incomingByte);
if(incomingByte == '1'){
digitalWrite(10,HIGH);
} else if (incomingByte == '0') {
digitalWrite(10,LOW);
}
else if(incomingByte == '3'){
digitalWrite(11,HIGH);
} else if (incomingByte == '2') {
digitalWrite(11,LOW);
}
if(incomingByte == '5'){
digitalWrite(12,HIGH);
} else if (incomingByte == '4') {
digitalWrite(12,LOW);
}
}
// Arduino to Arduno 서로간의 통신(사진)
#include <SoftwareSerial.h>
//SoftwareSearial (RXD PIN, TXD PIN)
SoftwareSerial softSerial(2,3);
void setup() {
Serial.begin(9600);
softSerial.begin(9600);
}
void loop() {
if(softSerial.available()){
Serial.write(softSerial.read()); //아두이노에서 받은 데이터를 PC 전송
}
if(Serial.available()){
softSerial.write(Serial.read()); //PC에서 받은 데이터를 아두이노로 전송
}
}
// Arduino to Arduno 서로간의 통신2 원격 으로 LED 켜기
//STX LED1 LED2 LED3 ETX
// A 0 0 0 Z
//LED : 0 LED OFF, 1 LED ON
1. 내가 한 방식
#include<SoftwareSerial.h>
//SoftwareSearial (RXD PIN, TXD PIN)
SoftwareSerial softSerial(2,3);
char _data[5];
unsigned int count = 0;
void setup() {
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.begin(9600);
softSerial.begin(9600);
}
void loop() {
if(softSerial.available()){
_data[count] = softSerial.read();
if(_data[0] == 'A'){
count++;
}
if(count >4 ){
count = 0;
if(_data[4] == 'Z'){
setLED(10,_data[1]);
setLED(11,_data[2]);
setLED(12,_data[3]);
}
}
}
if(Serial.available()){
softSerial.write(Serial.read());
}
}
void setLED(int ledPin, char Status)
{
if(Status == '0'){
digitalWrite(ledPin,LOW);
}
else if(Status == '1'){
digitalWrite(ledPin,HIGH);
}
}
2. 정답
//STX LED1 LED2 LED3 ETX
// A 0 0 0 Z
//LED : 0 LED OFF, 1 LED ON
#include<SoftwareSerial.h>
//SoftwareSearial (RXD PIN, TXD PIN)
SoftwareSerial softSerial(2,3);
char _data[5];
unsigned int count = 0;
void setup() {
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
Serial.begin(9600);
softSerial.begin(9600);
}
void loop() {
if(softSerial.available()){
_data[count] = softSerial.read();
if(_data[0] == 'A'){
count++;
}
if(count > 4 ){
count = 0;
_data[0] = 0;
if(_data[4] == 'Z'){
_data[4] = 0;
digitalWrite(12,_data[1]-48);
digitalWrite(11,_data[2]-48);
digitalWrite(10,_data[3]-48);
}
}
}
if(Serial.available()){
softSerial.write(Serial.read());
}
}
void setLED(int ledPin, char Status)
{
if(Status == '0'){
digitalWrite(ledPin,LOW);
}
else if(Status == '1'){
digitalWrite(ledPin,HIGH);
}
}
//아날로그 입력
int adcPin = A0; // 내부적으로 A0 은 0임
void setup()
{
Serial.begin(9600);
}
void loop()
{
int adcData = analogRead(adcPin);
Serial.println(adcData);
}
//아날로그 입력2 가변 저항 으용 실습(사진)
int adcPin = A0; //
void setup()
{
Serial.begin(9600);
for(int i=6 ; i <=13; i++)
{
pinMode(i,OUTPUT);
}
}
void loop()
{
int adcData = analogRead(adcPin);
int ledData = (adcData/1023.0)*8;
ledOn(ledData);
Serial.println(ledData);
}
void ledOn(int data)
{
for(int i=0;i<8;i++)
{
if(i<data) {
digitalWrite(i+6,HIGH);
}
else{
digitalWrite(i+6,LOW);
}
}
}
'아두이노' 카테고리의 다른 글
프로젝트 - SmartWatch (0) | 2014.11.20 |
---|---|
교육 기록 남기기 - 4 (0) | 2014.11.20 |
교육 기록 남기기 - 3 (0) | 2014.11.20 |
교육 기록 남기기 - 1 (0) | 2014.11.20 |