# 참고동영상
https://www.youtube.com/watch?v=4yDbBJLhVso

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace ComPort
{
    public partial class Form1 : Form
    {
        string dataOUT;
        string dataIN;

        public Form1()
        {
            InitializeComponent();            
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] ports = SerialPort.GetPortNames();            
            cBoxCOMPORT.Items.AddRange(ports);          
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort1.PortName = cBoxCOMPORT.Text;
                serialPort1.BaudRate = Convert.ToInt32(cBoxBaudRate.Text);
                serialPort1.DataBits = Convert.ToInt32(cBoxDataBits.Text);
                serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cBoxStopBits.Text);
                serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), cBoxParityBits.Text);
                serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);

                serialPort1.Open();
                progressBar1.Value = 100;
            }

            catch (Exception err)
            {
                MessageBox.Show(err.Message,"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCLose_Click(object sender, EventArgs e)
        {
            if(serialPort1.IsOpen)
            {
                serialPort1.Close();
                progressBar1.Value = 0;
            }
        }

        private void btnSendData_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                dataOUT = tBoxDataOut.Text;
                serialPort1.Write(dataOUT);                
            }
        }
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {            
            dataIN = serialPort1.ReadExisting();            
            this.Invoke(new EventHandler(ShowData));
        }
        private void ShowData(object sender, EventArgs e)
        {
            tBoxDataIn.Text += dataIN;
        }
    }
}

# 참고동영상
https://www.youtube.com/watch?v=wsMMHaSvvRU

 

Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel

Public Class Form1
    Dim myPort As Array
    Delegate Sub SetTextCallBack(ByVal [text] As String)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        myPort = IO.Ports.SerialPort.GetPortNames()
        Port_ComboBox.Items.AddRange(myPort)
        Write_Button.Enabled = False
    End Sub

    Private Sub init_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles init_Button.Click
        SerialPort1.PortName = Port_ComboBox.Text
        SerialPort1.BaudRate = Board_ComboBox.Text
        SerialPort1.Open()

        init_Button.Enabled = False
        Write_Button.Enabled = True
        Close_Button.Enabled = True
    End Sub

    
    Private Sub Write_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Write_Button.Click
        SerialPort1.Write(Input_TextBox.Text & vbCr)

    End Sub

    Private Sub Close_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Close_Button.Click

        SerialPort1.Close()
        init_Button.Enabled = True
        Write_Button.Enabled = False
        Close_Button.Enabled = False
    End Sub

    Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        ReceivedText(SerialPort1.ReadExisting())

    End Sub
    Private Sub ReceivedText(ByVal text As String)
        If Me.Output_TextBox.InvokeRequired Then
            Dim x As New SetTextCallBack(AddressOf ReceivedText)
            Me.Invoke(x, New Object() {(text)})
        Else
            Me.Output_TextBox.Text &= text
            Me.Label3.Text = text
        End If
    End Sub

End Class

# 참고 동영상
https://www.youtube.com/watch?v=8WhQATRycTU

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RADAR1
{
    public partial class Form1 : Form
    {
        Timer t = new Timer();

        int width = 300, height = 300, Hand = 150;

        int u;
        int cx, cy;
        int x, y;

        int tx, ty, lim = 20;

        Bitmap bmp;
        Pen p;
        Graphics g;

        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load_1(object sender, EventArgs e)
        {
                        //create Bitmap
            bmp = new Bitmap(width + 1, height + 1);

            //background color
            this.BackColor = Color.Black;

            //center
            cx = width / 2;
            cy = height / 2;

            //initial degree of HAND
            u = 0;

            //timer            
            t.Interval = 5; //in millisecond
            t.Tick += new EventHandler(this.t_TICK);
            t.Start();
        }
        private void t_TICK(object sender, EventArgs e)
        {
            //pen
            p = new Pen(Color.Green, 1f);

            //graphics
            g = Graphics.FromImage(bmp);

            //calculate x, y coordinate of HAND
            int tu = (u - lim) % 360;

            if (u >= 0 && u <= 180)
            {
                //right half
                //u in degree is converted into radian.

                x = cx + (int)(Hand * Math.Sin(Math.PI * u / 180));
                y = cy - (int)(Hand * Math.Cos(Math.PI * u / 180));
            }
            else
            {
                x = cx - (int)(Hand * -Math.Sin(Math.PI * u / 180));
                y = cy - (int)(Hand * Math.Cos(Math.PI * u / 180));
            }


            if (tu >= 0 && u <= 180)
            {
                tx = cx + (int)(Hand * Math.Sin(Math.PI * tu / 180));
                ty = cy - (int)(Hand * Math.Cos(Math.PI * tu / 180));
            }
            else
            {
                tx = cx - (int)(Hand * -Math.Sin(Math.PI * tu / 180));
                ty = cy - (int)(Hand * Math.Cos(Math.PI * tu / 180));
            }

            // draw circle
            g.DrawEllipse(p, 0, 0, width, height); //bigger circle
            g.DrawEllipse(p, 80, 80, width - 160, height - 160); //smaller circle

            // draw perpendicular line
            g.DrawLine(p, new Point(cx, 0), new Point(cx, height)); // UP-DOWN
            g.DrawLine(p, new Point(cy, 0), new Point(cy, width)); //LEFT-RIGHT

            //draw HAND
            g.DrawLine(new Pen(Color.Black, 1f), new Point(cx, cy), new Point(tx, ty));
            g.DrawLine(p, new Point(cx, cy), new Point(x, y));

            // load bitmap in picturebox1
            pictureBox1.Image = bmp;

            // dispose
            p.Dispose();
            g.Dispose();

            //update
            u++;
            if (u == 360)
                u = 0;
        }
    }
}


# 하드웨어 구성
아두이노 나노 [SZH-EK017]
초음파센서 [HC-SR04]
L298N V2/Dc Moter/Stepper 
스텝모터 [17HS4401]




 #소스코드

#define H 1

#define L 0


#define trigpin 11

#define echopin 12

#define delay_time 990

int Motor[4] = {4,5,6,7};

int M_En[2] = {8,9};

int i, deg = 0;

int flag = 0;

float duration, distance;

  

void setup() {

  //pinMode(4, OUTPUT);   //A

  //pinMode(5, OUTPUT);   //B

  //pinMode(6, OUTPUT);   //An

  //pinMode(7, OUTPUT);   //Bn

  //pinMode(8, OUTPUT);   //enable1

  //pinMode(9, OUTPUT);   //enable2

 

  for (i=0;i<4;i++){

    pinMode(Motor[i], OUTPUT);

  }

  for (i=0;i<2;i++){

    pinMode(M_En[i], OUTPUT);

  }  

  

  pinMode(trigpin, OUTPUT);   //Trig

  pinMode(echopin, INPUT);   //Echo  


  Serial.begin(9600); //보레이트 설정

}

void M_Enable(){

  for (i=0;i<2;i++){

    digitalWrite(M_En[i], H);

  }  

}

void M_Disable(){

  for (i=0;i<2;i++){

    digitalWrite(M_En[i], L);

  } 

}


void UltraSonic_command(){

/////////////////////////UltraSonic 동작 및 거리계산

////////////////////////////////////////////////// 대충 검색해서 퍼옴 - 구지... 이해할필요까지.. 없어보임.

  digitalWrite(trigpin, H);

  delay(10);

  digitalWrite(trigpin, L);


  duration = pulseIn(echopin, H);

  distance = ((float)(340*duration) / 10000) /2 ;

/////////////////////////시리얼로 프린트? TX 구문인지... 

  Serial.print("distance : ");

  Serial.println(distance);


}

// 한스텝 동작 -> 거리측정 -> Serial Send

void M_move(int a, int b, int c, int d){

  M_Enable();

  digitalWrite(4, a);   // turn the LED on (HIGH is the voltage level)

  digitalWrite(5, b);   // turn the LED on (HIGH is the voltage level)

  digitalWrite(6, c);   // turn the LED on (HIGH is the voltage level)

  digitalWrite(7, d);   // turn the LED on (HIGH is the voltage level)  

  UltraSonic_command();

  M_Disable();  

}

// 오른쪽 동작

void r_Stepping(){  

  M_move(H,L,L,H);  

  delay(delay_time);                       // wait for a second

  M_move(H,H,L,L);  

  delay(delay_time);                       // wait for a second

  M_move(L,H,H,L);  

  delay(delay_time);                       // wait for a second

  M_move(L,L,H,H);  

  delay(delay_time);                       // wait for a second

}

// 왼쪽 동작

void l_Stepping(){  

  M_move(L,L,H,H);  

  delay(delay_time);                       // wait for a second

  M_move(L,H,H,L);    

  delay(delay_time);                       // wait for a second

  M_move(H,H,L,L);  

  delay(delay_time);                       // wait for a second

  M_move(H,L,L,H);  

  delay(delay_time);                       // wait for a second

}

// 오른쪽 360도 -> 왼쪽 360도 

void loop() { 

  if(!flag){

    r_Stepping();  

    if(deg < 52)

      deg = deg + 1; 

    else

      flag = 1;    

  }

  else {

    l_Stepping();  

    if(deg > 1)

      deg = deg - 1; 

    else 

      flag = 0;          

  }

}


# 이후 숙제

- 시리얼로 받은 데이터로 윈도우에 그리기 (Visual Basic ?)


아두이노 나노 이용하여 자동 워킹인식 만들기... (어플속이기 ㅎ)


#include <Stepper.h>

// 1스텝 0.17578125도

// 2048 = 360도  // 1024 = 180도  // 

#define STEPS 96   //128                //각도 16.87도

#define Speed (8192 / STEPS)*4       //안정적인 최고 스피드


// IN4 = 11 = 12

// IN3 = 10 = 11 

// IN2 = 9 = 10

// IN1 = 8 = 9

// IN4, IN2, IN3, IN1 

Stepper stepper(STEPS, 12, 10, 11, 9);


void setup() {

  stepper.setSpeed(Speed);

}


void loop() {

  stepper.step(STEPS);


  stepper.step(-STEPS);

}

대표적인 걷기만으로 포인트 받는 어플

#1. 캐시워크 - 적립형 만보기 잠금화면

https://play.google.com/store/apps/details?id=com.cashwalk.cashwalk&hl=ko



#2. AIA Vitality x T건강걷기

https://play.google.com/store/apps/details?id=com.aia.vitality.kr&hl=ko

#3. 캐시슬라이드 - No.1 잠금화면 플랫폼


(아직 신뢰가 없지만.. 함 써봄... 이번주안에 삭제할 꺼 같지만.)

(2만보를 했는데 5원주내.. 삭제)



#결론 

캐시워크 : 하루에 10,000보 100포인트 정립

AIA Vitality : 1주일간 미션달성 - sk 텔레콤 3,000원 할인


1달 = 4주 = 28일 = 20일(토,일 제외)

AIA Vitality = 4주 = 12,000원

캐시워크 = 20일 = 2,000원




# Mi 스토어 비활성화 시키기(http://cafe.naver.com/xst/31432)

이놈 때문에 많은 문제가 생기고 어플이 정상동작하지 않음. 

왜~ 구글스토어로 가야 될 것들이 Mi 스토어로 연결되니깐~


다음에 정리하는 걸로.. 


나진상가 - PS4
현금 : 398,000원
카드 : 429,000원
GTA5
현금 : 49,000원

샤오미 블루투스 스피커 구매 후...

야외에서만 사용을 하다가 날이 추워져 야외에서의 사용빈도가 많이 낮아졌다.

그래서 잠자기 전에 스피커를 통해 노래를 들으며 잠을자는데...

잠들기전 볼륨을 낮게 해두는데...

스피커에서 찌직.찌직.찌직.. 자꾸 이런소리가 나서 검색해본결과.

빵빵한 사운드 때문에 화이트 노이즈까지 높게 나온다고한다. 

그래서 볼륨을 조절하기위해 스피커 분해해서 수정한사람이 있겠지하고 검색했지만.. 아무도 그런짓을 한사람이 없더라... 

그래서 이렇게 블로깅하게 됐다. 


스피커를 까긴 해야겠는데 어떻게 뚜껑을 여냐는 점.

뒤꾸녕을 까겠지 막 쑤셔댔지만.. ㅠㅠ 뒷구녕이 아님... 

앞에 스피커 부분을 살짝 들어주면 잘 열립니다. 

1) 아래는 앞 커버를 오픈한 모습

커버를 열게되면, 총 8개의 나사가 조여져 있습니다.

이를 풀어주고, 저화살표 표시되어있는 부분을 드라이버로 살짝살짝 들어줍니다. 방향(전원 스위치 반대편)

아래와같이 열립니다.처음에 몰라서 옆커버까지 잡아 뜯었지만 옆커버 빼지마세요.

스피커에 연결된 선이 너무 맘에 안들어 제거하고 다른 선으로 교체했습니다. - 교체사진을 못찍음.

이것만 해도 노이즈가 쫌 줄어다고 느껴졌어요.

아래는 내부 회로카드 - 자세히 보시면 파란색 모듈이 하나 보입니다. 

상용으로 판매하는 블루투스 모듈같아 구글링하여 겨우찾음. << 이제부터 시작이죠. ㅎ

CSR8635(http://www.ebay.com/itm/CSR-8635-Bluetooth-4-0-wireless-Stereo-Module-CSR-BC8635-Audio-Speaker-headphone-/361192975408)


# EBAY에서 확인된 모듈 사진

# 블루투스 스피커 모듈 블럭도

# 메인칩 정보 : BT1213H - Bluetooth v4.0 Standard 

# 모듈 Pin Description

# 모듈 Diagram

# 실제 모듈 핀번호 표시했습니다.

# 모듈 응용 회로도 (제일 중요하죠.)

# 결론

스피커 출력단. R5, R6, R11, R12 저항이 30k옴으로 되어있습니다. 

이를 가변하면 소리가 커지고 줄어들고 합니다. 저는 100k옴으로 수정했는데요... 

맞는지는 모르겠어요.



팁> 이제 본격적으로 가지고 놀아볼까요~

1) 외부 스위치 & USB 단자 보드 연결선 제거하고.. << 분리해야 작업하기 편해요.

2) 제거하고 전원을 켜봐야겠죠. >> 20번 핀과 & 바로 밑에 저항 표시부분을 쇼트시킵니다. 2~3초 유지하면 띠리리 하고 소리나요~

3)         (1) - 10k저항 : VOL -

  (2) - 10k저항 : VOL +

  (3) - 10k저항 : NEXT

  (4) - 10k저항 : PREVIOUS

  (5) - BAT(3.7V) : ON/OFF & PLAY/STOP

## 블루투스 모듈 핀 - 동판 떨어지니 조심하세요~

도움이 될지 모르겠내요...


최근어플 미리보기(http://cafe.naver.com/xst/27956)


최근 실행한 어플이 이렇게 나올꺼에요.

어플을 두손가락으로 벌리면 아래와 같이 설정됩니다. 



+ Recent posts