본문 바로가기

분류 전체보기246

arduino conect to C# 아두이노랑 Serial 입력하는 방법 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO.Ports; namespace Serial { class Program { static void Main(string[] args) { SerialPort ObjSerial = new SerialPort(); ObjSerial.PortName = "COM3"; ObjSerial.BaudRate = 9600; ObjSerial.DataBits = 8; ObjSerial.Parity = Parity.None; ObjSerial.StopBi.. 2021. 7. 19.
아두이노 통신 1.병렬 통신 병렬 통신 bit 당 1선 필요 + clk + ground ex) cpu 에서 bus 사용할때 사용하는 통신 방식 1 clk 에 8 bit 전송 가능 보통 ground 선은 무조건 필요함으로 보통 그라운드 선을 제외하고 9선 필요하다고 표현한다. 2. 직렬 통신 동기식과 비동기식 - 동기식 : Clock 라인을 이용해 데이터 전송 타이밍을 맞춤 (synchronous)  I2C, SPI 통신이 대표적 - 비동기식 : Clock 라인 없이 양측이 미리 합의된 클럭 사용 (asynchronous)  Serial(UART) 통신이 대표 비동기식은 데이터 시작과 끝을 알리는 신호를 보내기 때문에 더욱 느리다. 2021. 7. 19.
조이스틱 void setup() { pinMode(6, INPUT_PULLUP); // 버튼 핀을 읽기 모드로 Serial.begin(9600); } void loop() { int vertical, horizontal, select; vertical = analogRead(A0); // x축 = 0-1023 horizontal = analogRead(A1); // y축 = 0-1023 select = digitalRead(6); // 버튼, 눌렀을 때 = LOW, 뗐을 때 = HIGH Serial.print("X = "); Serial.print(vertical); Serial.print(", Y = "); Serial.print(horizontal); Serial.print(", Button = "); if(.. 2021. 7. 19.
초음파 센서 void setup() { Serial.begin(9600); pinMode(2,OUTPUT); // 센서 Trig 핀 pinMode(3,INPUT); // 센서 Echo 핀 } void loop() { int duration, cm; digitalWrite(2,HIGH); // 센서에 Trig 신호 입력 delayMicroseconds(10); // 10us 정도 유지 digitalWrite(2,LOW); // Trig 신호 off duration = pulseIn(3, HIGH); // Echo pin: HIGH->Low 간격을 측정 cm = microsecondsToCentimeters(duration); // 거리(cm)로 변환 Serial.print(cm); Serial.println("cm").. 2021. 7. 19.
EEPROM 사용하기 아두이노는 특이하게 EEPROM 이 존재한다. 이는 갑작스러운 종료나 꼭 저장하고 있어야 되는 변수값들을 저장해놓을 수 있다. (EEPROM 은 비휘발성이니까) datasheet 에서는 글로벌 변수를 저장하기 좋다고 적혀있다. 먼저 데이타 시트에는 eeprom 을 다룰수 있는 메모리에 대해서 적혀있다. EEAR = 사용할 eeprom 의 메모리 주소를 적는 레지스터 cf) 데이타 sheet에는 eeprom 이 1KB 존재 하는데 위에 글을 읽어보면 8bit 만으로 어드레스를 입력한다. (최대 255) 즉 4분의 1 부분만 사용 가능하다. 이는 사실 eeprom 은 페이지 개념이 존재 하는데 나머지 4분의 3 부분은 다른 하드웨어적인 부분에서 사용한다. 8번 bit 는 무조건 0 쓰라고 되어 있는데, 쓰지.. 2021. 7. 18.
아두이노 회로 실습 (1) cds (조도 센서 실습) void setup() { Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly int sensorValue = analogRead(A1); Serial.println(sensorValue); delay(100); } Interrupt 우노는 2 , 3 번 핀에만 interrup 생성 가능 void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); pinMode(2, OUTPUT); attachInterrupt(1, blink, CHANGE); // D3 핀에 인터럽트 설정 } void loop() { //.. 2021. 7. 16.
아두이노 serial 입력 int incomingByte = 0; // for incoming serial data void setup() { Serial.begin(9600); // opens serial port, sets data rate to 9600 bps } void loop() { // send data only when you receive data: if (Serial.available() > 0) { // read the incoming byte: incomingByte = Serial.read(); // say what you got: Serial.print("I received: "); Serial.println(incomingByte, DEC); // 10 진수로 입력 } } 2021. 7. 16.
Register 이용해서 LED 켜기 Atmega328 은 port register 을 통해서 각각의 pin 의 상태를 제어 할 수 있다 . register 는 3가지 종류가 있는데 밑의 D port 를 예로 들어서 PORTD (The Port D Data Register) : 출력 핀 일때 high 인지 low 인지 DDRD (The Port D Data Direction Register) : 입력 핀 인지 출력 핀 인지 결정 PIND (The Port D Input Pins Address) : 핀의 상태를 읽는다 . PIND 에 값을 주면 해당 bit 의 PORTD 의 bit 가 토글 된다. 책에서는 PIND 는 쓰지 말해 했으니까 쓰지 말자 저는 7번 PIN 을 사용할 꺼라서 PROTD 7 BIT 를 1로 채워주고 DDRD 또한 1로 .. 2021. 7. 16.
volatile volatile 변수 - 목적 1. 컴파일러가 코드를 최적화 하는 것을 방지 하겠다 . 예를 들어서 #include int main() { int i = 0; while (i < 10) i++; printf("%d\n", i); // 10 } 위의 코드를 실행한다면 사실 컴파일러는 fro 문을 돌지 않고 i = 10을 대입해 버린다. (참고로 release 모드로 실행해야한다.) 디스 어셈블리를 보면 push 0Ah 를 볼 수있다. A 는 10진수로 10 이기 때문에 while 문을 안돌고 그냥 바로 i = 10 을 대입한다는 것을 알 수 있다. #include int main() { volatile int i = 0; while (i < 10) i++; printf("%d\n", i); // 10 } .. 2021. 7. 16.