BPI-M2 Berry CSI camera

OS/Banana Pi 2017.08.31 23:42 Posted by 파란크리스마스

BPI-M2 Berry CSI camera Camera(OV5640)

출처 : BPI-M2+ OV5640 camera linux driver is work fine
BPI-M2+ camera module

Camera 모듈 설치

$ sudo vi /etc/modules

내용 추가

ov5640
vfe_v4l2

Camera 설치 확인

$ dmesg | grep ov5640
[    4.253186] [VFE]Find sensor name is "ov5640", i2c address is 78, type is "YUV" !
[    4.253197] [VFE]Sub device register "ov5640" i2c_addr = 0x78 start!
[    4.521666] [VFE]Sub device register "ov5640" is OK!
$ ls /dev/video*
/dev/video0

Camera 정보

$ modinfo ov5640
filename:       /lib/modules/3.10.107-BPI-M2U-Kernel/kernel/drivers/media/platform/sunxi-vfe/device/ov5640.ko
license:        GPL
description:    A low-level driver for ov5640 sensors
author:         raymonxiu
srcversion:     179C0D2FEBE682C736CFAEB
alias:          i2c:ov5640
depends:        vfe_io
intree:         Y
vermagic:       3.10.107-BPI-M2U-Kernel SMP mod_unload modversions ARMv7 p2v8 

Camera 캡쳐 프로그램 컴파일 및 실행

출처 : https://github.com/avafinger/ov5640

$ git clone https://github.com/avafinger/cap-v4l2
$ cd cap-v4l2
$ sudo ./install_deps.sh
$ ./build_script.sh

캡쳐

$ ./cap 1280 720 4 1 -999 -1 -1
---- cap parameters -----
width: 1280
height: 720
v4l2 buffers: 4
exposure: -999
hflip: -1
vflip: -1
Mode: V4L2_MODE_VIDEO
Driver: "sunxi-vfe"
Card: "sunxi-vfe"
Bus: "sunxi_vfe csi0"
Version: 1.0
Capabilities: 05000001
Input: 0
V4L2 pixel formats:
0: [0x50323234] '422P' (planar YUV 422)
1: [0x32315559] 'YU12' (planar YUV 420)
2: [0x32315659] 'YV12' (planar YVU 420)
3: [0x3631564E] 'NV16' (planar YUV 422 UV combined)
4: [0x3231564E] 'NV12' (planar YUV 420 UV combined)
5: [0x3136564E] 'NV61' (planar YUV 422 VU combined)
6: [0x3132564E] 'NV21' (planar YUV 420 VU combined)
7: [0x32314D48] 'HM12' (MB YUV420)
8: [0x56595559] 'YUYV' (YUV422 YUYV)
9: [0x55595659] 'YVYU' (YUV422 YVYU)
10: [0x59565955] 'UYVY' (YUV422 UYVY)
11: [0x59555956] 'VYUY' (YUV422 VYUY)
12: [0x31384142] 'BA81' (RAW Bayer BGGR 8bit)
13: [0x47524247] 'GBRG' (RAW Bayer GBRG 8bit)
14: [0x47425247] 'GRBG' (RAW Bayer GRBG 8bit)
15: [0x47425247] 'GRBG' (RAW Bayer RGGB 8bit)
16: [0x30314742] 'BG10' (RAW Bayer BGGR 10bit)
17: [0x30314247] 'GB10' (RAW Bayer GBRG 10bit)
18: [0x30314142] 'BA10' (RAW Bayer GRBG 10bit)
19: [0x30314142] 'BA10' (RAW Bayer RGGB 10bit)
20: [0x32314742] 'BG12' (RAW Bayer BGGR 12bit)
21: [0x32314247] 'GB12' (RAW Bayer GBRG 12bit)
22: [0x32314142] 'BA12' (RAW Bayer GRBG 12bit)
23: [0x32314142] 'BA12' (RAW Bayer RGGB 12bit)
V4L2 pixel sizes:
( 2592 x 1936 ) Pixels
( 2048 x 1536 ) Pixels
( 1920 x 1080 ) Pixels
( 1600 x 1200 ) Pixels
( 1280 x 960 ) Pixels
( 1280 x 720 ) Pixels
( 1024 x 768 ) Pixels
( 800 x 600 ) Pixels
( 640 x 480 ) Pixels

Sensor size: 1280x720 pixels
Pixel Format: V4L2_PIX_FMT_YUV420 [0x32315559]
Frame #10 will be saved!
Length: 1382400         Bytesused: 1382400      Address: 0x49528
FPS[0]: 11.87
Length: 1382400         Bytesused: 1382400      Address: 0x49530
FPS[1]: 30.19
Length: 1382400         Bytesused: 1382400      Address: 0x49538
FPS[2]: 30.16
Length: 1382400         Bytesused: 1382400      Address: 0x49540
FPS[3]: 30.78
Length: 1382400         Bytesused: 1382400      Address: 0x49528
FPS[4]: 30.20
Length: 1382400         Bytesused: 1382400      Address: 0x49530
FPS[5]: 30.18
Length: 1382400         Bytesused: 1382400      Address: 0x49538
FPS[6]: 30.09
Length: 1382400         Bytesused: 1382400      Address: 0x49540
FPS[7]: 30.07
Length: 1382400         Bytesused: 1382400      Address: 0x49528
FPS[8]: 29.85
Length: 1382400         Bytesused: 1382400      Address: 0x49530
FPS[9]: 5.85
------- Avg FPS: 30.19 --------
저작자 표시
신고

BPI-M2 Berry

OS/Banana Pi 2017.08.28 23:17 Posted by 파란크리스마스

BPI-M2 Berry

출처 : BPI-M2+
【BPI-M2+】之mjpg-streamer测试和体验- Bananap讨论区- 烽火社区 ...
http://forum.banana-pi.org/c/Banana-pi-BPI-M2

SD 확장

SD 확장전 용량확인

$ df -l
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7155064 4430272   2344940  66% /
devtmpfs          380080       0    380080   0% /dev
tmpfs             511300     340    510960   1% /dev/shm
tmpfs             511300    7652    503648   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             511300       0    511300   0% /sys/fs/cgroup
tmpfs             102260      24    102236   1% /run/user/1000
/dev/mmcblk0p1    261868    6740    255128   3% /media/pi/BPI-BOOT

SD FDisk

pi@bpi-iot-ros-ai:~$ sudo fdisk /dev/mmcblk0

Welcome to fdisk (util-linux 2.27.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/mmcblk0: 14.9 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x540302a1

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1      204800   729087   524288  256M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      729088 15267839 14538752    7G 83 Linux

Command (m for help): d
Partition number (1,2, default 2): 2

Partition 2 has been deleted.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2048-31116287, default 2048): 729088
Last sector, +sectors or +size{K,M,G,T,P} (729088-31116287, default 31116287): 

Created a new partition 2 of type 'Linux' and of size 14.5 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

pi@bpi-iot-ros-ai:~$ sudo shutdown -r now

SD 확장

$ sudo resize2fs /dev/mmcblk0p2
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 3798400 (4k) blocks long.

SD 확장 확인

$ df -l
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       14956880 4432300   9830596  32% /
devtmpfs          380080       0    380080   0% /dev
tmpfs             511300     204    511096   1% /dev/shm
tmpfs             511300    7664    503636   2% /run
tmpfs               5120       4      5116   1% /run/lock
tmpfs             511300       0    511300   0% /sys/fs/cgroup
tmpfs             102260      24    102236   1% /run/user/1000
/dev/mmcblk0p1    261868    6740    255128   3% /media/pi/BPI-BOOT

GPIO사용 (BPI-WiringPi)

출처 : Supports BananaPi BPI -M1 / M1Plus / M2 / M2P / M3

기존 설치된 wiringpi 삭제

$ sudo apt-get remove wiringpi
$ sudo apt autoremove

wiringpi 설치

$ git clone https://github.com/BPI-SINOVOIP/BPI-WiringPi2.git
$ cd BPI-WiringPi2/
$ chmod +x ./build
$ sudo ./build

GPIO 확인

$ gpio -v
gpio version: 2.44
Copyright (c) 2012-2017 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty
 
Raspberry Pi Details:
  Type: Banana Pi M2 Ultra[R40], Revision: 01, Memory: 2048MB, Maker: BPI-Sinovoip 
  * Device tree is enabled.
  *--> sun8iw11p1
  * Root or sudo required for GPIO access.
$ gpio readall
 +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 |     |     |    3.3v |      |   |  1 || 2  |   |      | 5v      |     |     |
 |  53 |   8 |   SDA.1 | ALT5 | 0 |  3 || 4  |   |      | 5v      |     |     |
 |  52 |   9 |   SCL.1 | ALT5 | 0 |  5 || 6  |   |      | 0v      |     |     |
 |  35 |   7 | GPIO. 7 | ALT3 | 0 |  7 || 8  | 0 | ALT4 | TxD     | 15  | 274 |
 |     |     |      0v |      |   |  9 || 10 | 0 | ALT4 | RxD     | 16  | 275 |
 | 276 |   0 | GPIO. 0 | ALT3 | 0 | 11 || 12 | 0 | ALT3 | GPIO. 1 | 1   | 273 |
 | 277 |   2 | GPIO. 2 | ALT3 | 0 | 13 || 14 |   |      | 0v      |     |     |
 | 249 |   3 | GPIO. 3 | ALT2 | 0 | 15 || 16 | 0 | ALT3 | GPIO. 4 | 4   | 272 |
 |     |     |    3.3v |      |   | 17 || 18 | 0 | ALT2 | GPIO. 5 | 5   | 250 |
 |  64 |  12 |    MOSI | ALT4 | 0 | 19 || 20 |   |      | 0v      |     |     |
 |  65 |  13 |    MISO | ALT4 | 0 | 21 || 22 | 0 | ALT2 | GPIO. 6 | 6   | 251 |
 |  66 |  14 |    SCLK | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE0     | 10  | 87  |
 |     |     |      0v |      |   | 25 || 26 | 0 | ALT2 | CE1     | 11  | 248 |
 | 257 |  30 |   SDA.0 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.0   | 31  | 256 |
 | 224 |  21 | GPIO.21 | ALT4 | 0 | 29 || 30 |   |      | 0v      |     |     |
 | 225 |  22 | GPIO.22 | ALT4 | 0 | 31 || 32 | 0 | ALT3 | GPIO.26 | 26  | 116 |
 | 226 |  23 | GPIO.23 | ALT4 | 0 | 33 || 34 |   |      | 0v      |     |     |
 | 227 |  24 | GPIO.24 | ALT4 | 0 | 35 || 36 | 0 | ALT4 | GPIO.27 | 27  | 231 |
 | 228 |  25 | GPIO.25 | ALT4 | 0 | 37 || 38 | 0 | ALT4 | GPIO.28 | 28  | 230 |
 |     |     |      0v |      |   | 39 || 40 | 0 | ALT4 | GPIO.29 | 29  | 229 |
 +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
 | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
 +-----+-----+---------+------+---+---Pi ?---+---+------+---------+-----+-----+

detect I2C chips

출처 : i2cdetect(8): detect I2C chips - Linux man page

$ ls /dev/*i2c*
/dev/i2c-0  /dev/i2c-1  /dev/i2c-2  /dev/i2c-4
$ i2cdetect -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --

pi4j

촐처 : Java I/O library for Raspberry Pi (GPIO, I2C, SPI, UART) http://www.pi4j.com
BUILDING AN EXECUTABLE PI4J JAR

$ sudo apt install maven
$ git clone https://github.com/Pi4J/pi4j.git
$ cd pi4j/pi4j-native
$ mvn package

pi4j pwm 오류

촐처 : How to: banana pi BPI-M3 install BPI-WiringPi - Linux - banana pi ...

PWM 관련 오류가 있어 수정해 보려고 했으나 포기

val pwmWrite 0 <= X <= 1024
Or you can set new range by yourself by pwmSetRange(range
저작자 표시
신고

BPI-M2 Berry 외형편

OS/Banana Pi 2017.08.27 02:47 Posted by 파란크리스마스

출처 : BPI-M2 Berry Quad-core Development Board - Banana Pi

BPI-M2 Berry 외형

알리에서 구입한 BPI-M2 Berry 입니다.

포장은 기존 바나나 파이 박스에 BPI-M2 Berry라는 스티커가 붙어 있고,
라즈베리파이의 경우 간단한 매뉴얼과 비닐 포장의 경우 밀봉되지 않아 미개봉 여부를 알 수 없다는 단점이 있었는데,
BPI-M2 Berry는 비닐 포장이 밀봉되어 있고, 매뉴얼은 따로 없습니다.

부품의 배치나 외형은 아래 사진에서 보는것과 같이 라즈베리파이3와 일치합니다.

기존 바나나 파이에는 eMMC라든지 외부 안테나 지원하는데 BPI-M2 Berry에는 빠진것이 아쉽지만,
라즈베리파이에서 지원하지 않는 디버깅용 UART 지원과 SATA가 지원됩니다.

저작자 표시
신고

일본에서 사온 물건들

사진 2017.08.26 15:35 Posted by 파란크리스마스

일본에서 사온 물건들

곤약젤리, 코로로 구미, 도쿄 바나나, 로이스 초콜릿, 장미 캔디, 킷켓 푸딩맛, 자가리코, 포핀쿠킨, 긴자 스트로베리 케잌 

저작자 표시
신고

BPI - Webduino 소개

OS/Arduino 2017.08.25 15:36 Posted by 파란크리스마스

출처 : Webduino Smart Wi-Fi Setup
Aliexpress.com : Buy New Arrivals BPI Webduino smart IOT module development board from Reliable board case suppliers on SinoVoip Co.,Limited Banana PI

BPI-Webduino

BananaPI를 만든 곳에서 Iot용 모듈을 새로 만들었는데, 
이름에서 보는것과 같이 아두이노와 웹을 합쳐 놓은것 같습니다.

광센서와 REG LED가 기본 내장되어 있고, 내장된 Wifi는 AP모드와 공유기 접속하도록 두개가 지원되고,
AP모드로 접속해서 공유기에 접속 가능한 정보만 설정하면 외부에서 restful api 호출로 Webduino를 제어 할 수 있습니다.

개발언어는 Blockly 라는 도구로 웹브라우져로 개발이 가능하고,
기존 아두이노처럼 PC에 USB로 연결해서 아두이노 IDE로 업로드하는 방식은 지원하지 않고,
소스는 JavaScript로 만들어져서 restful 호출로 제어가 가능하므로, 다양한 기기에서 호출이 가능합니다.

 

BPI-Webduino와 Arduino Pro Micro 크기 비교

BPI-Webduino 핀 배열

Webduion AP 모드에 접속

Wifi목록에서 Smart 선택

암호 입력 (초기 암호 123456678)

192.168.4.1 주소를 브라우져 접속하여 공유기 접속 정보와 AP 모드 정보 수정

저장하면 수정된 정보 확인

수정된 AP 이름과 공유기에 접속된 IP학인

AP이름 뒤에 _ 이후로 공유기에 접속된 IP

Blockly RGBLED 예제 작성

Blockly RGB LED 예제 JavaScript 소스

RGB LED 예제 소스

Blockly로 작성된 소스를 Html 페이지에 2개의 버튼을 두고 색을 바꾸도록 작성해보았습니다.

<!doctype html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <title>Webduino Blockly App</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <script src="https://webduino.io/components/webduino-js/dist/webduino-all.min.js"></script>
  <script src="https://blockly.webduino.io/webduino-blockly.js"></script>
  <script src="https://blockly.webduino.io/lib/firebase.js"></script>
  <script src="https://blockly.webduino.io/lib/runtime.min.js"></script>
  <script>
  	function rgb_call(color) {
  		var rgbled;

			boardReady({board: 'bluexmas', url: '192.168.0.62'}, function (board) {
			  board.systemReset();
			  board.samplingInterval = 250;
			  rgbled = getRGBLedCathode(board, 15, 12, 13);
			  rgbled.setColor(color);
			});
  	}
  </script>
</head>

<body>
  <div><button onclick="javascript:rgb_call('#0000ff');">blue button</span></div>
  <div><button onclick="javascript:rgb_call('#ff0000');">red button</span></div>
</body>

RGB LED 예제 실행


저작자 표시
신고

PowerShell - Tomcat 날짜별 로그 보기

OS/Windows 2017.08.24 17:03 Posted by 파란크리스마스

출처 : 톰켓 로그 설정(catalina.<날짜>, catalina.out) : 네이버 블로그

PowerShell - Tomcat 날짜별 로그 보기

Windows 서비스로 등록한 Tomcat의 경우 로그 파일이 catalina.out 파일이 아니라 catalina<날짜>.out 파일로 생성이 되는데, 아래 스크립트를 사용하시면, 현재 표시 되는 로그를 UNIX의 tail 명령 처럼 로그를 확인 해보실 수 있습니다.

PowerShell 스크립트 소스(log.ps1)

$date = Get-Date -format "yyyy-MM-dd"
$logfile = "C:\usr\local\tomcat-archim\logs\catalina." + $date + ".log"

echo $logfile 

Get-Content -Path $logfile -Wait

실행

C:\Users\cmxcost>powershell ./log.ps1
저작자 표시
신고

요코하마 - 외국인묘지, 모토마치 상점가, 차이나타운

사진 2017.08.20 23:02 Posted by 파란크리스마스

외국인묘지

모토마치 상점가

차이나타운

미나토미라이21에서 사먹은 비프동

배틀트립에서 소개 되어서 먹어 보았지만 내 입맛에는 별로 였음

저작자 표시
신고

가마쿠라 - 에노시마

사진 2017.08.20 23:02 Posted by 파란크리스마스

신주쿠 로만스카 티켓 구입 장소

가마쿠라역

호코쿠지(대나무절)

쓰루가오카하치만구

고마치 거리

가마쿠라고교역

에노시마역 - 에노시마섬

저작자 표시
신고

도쿄 디즈니랜드

사진 2017.08.20 22:58 Posted by 파란크리스마스

저작자 표시
신고

오다이바 - 오오에도 온천

사진 2017.08.20 22:55 Posted by 파란크리스마스

후지TV

레인보우브릿지

오바디바 자유의 여신상

오오에도 온천

타코야키 박물관

비너스포트

저작자 표시
신고

Python - mjpeg 영상 화면에 출력

OS/Raspberry Pi 2017.08.16 00:15 Posted by 파란크리스마스

출처 : python - How to parse mjpeg http stream from ip camera? - Stack Overflow

Python - mjpeg 영상 화면에 출력

import cv2
import requests
import numpy as np

#stream = urllib.request.urlopen("http://127.0.0.1:8080/?action=snapshot")
#stream = urllib2.urlopen("http://127.0.0.1:8080/?action=snapshot")
#bytes = bytes()

while True:
    r = requests.get('http://127.0.0.1:8080/?action=snapshot"', auth=('user', 'password'), stream=True)
    if(r.status_code == 200):
        bytes = b''
        for chunk in r.iter_content(chunk_size=1024):
            bytes += chunk
            a = bytes.find(b'\xff\xd8')
            b = bytes.find(b'\xff\xd9')
            if a != -1 and b != -1:
                jpg = bytes[a:b+2]
                bytes = bytes[b+2:]
                i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
                cv2.imshow('i', i)
                if cv2.waitKey(1) == 27:
                    exit(0)
    else:
        print("Received unexpected status code {}".format(r.status_code))


저작자 표시
신고

Arduino Uno - L298N & HC-06

OS/Arduino 2017.08.07 00:59 Posted by 파란크리스마스

출처 : [아두이노] 블루투스 모듈(HC-06) 사용하기 (설정, 문자열 전송, LED ON/OFF)

Arduino Uno - L298N & HC-06

#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출

int blueTx=3;   //Tx (보내는핀 설정)
int blueRx=2;   //Rx (받는핀 설정)

SoftwareSerial btSerial(blueTx, blueRx);  //시리얼 통신을 위한 객체선언
String myString=""; //받는 문자열

//모터드라이버핀과 아두이노의 연결번호
#define EA A0
#define EB A1
#define M_IN1 7
#define M_IN2 6
#define M_IN3 5
#define M_IN4 4

int motorA_vector = 1;//모터의 회전방향이 반대일시 0을 1로 1을 0으로 바꿔주시면 모터의 회전방향이 바뀝니다.
int motorB_vector = 1;//모터의 회전방향이 반대일시 0을 1로 1을 0으로 바꿔주시면 모터의 회전방향이 바뀝니다.

int motor_speed = 255;//모터 스피드     

const int DELAY = 1000;

void setup() {
  Serial.begin(9600);   //시리얼모니터 
  btSerial.begin(9600); //블루투스 시리얼 개방
  
  //모터관련 핀들을 출력으로 설정한다.
  pinMode(EA, OUTPUT);
  pinMode(EB, OUTPUT);
  pinMode(M_IN1, OUTPUT);
  pinMode(M_IN2, OUTPUT);
  pinMode(M_IN3, OUTPUT);
  pinMode(M_IN4, OUTPUT);

  //
  delay(3000);//3초 지연
  motorstop();
}

void loop()
{
  // selfTest();
  while(btSerial.available())  //mySerial에 전송된 값이 있으면
  {
    char myChar = (char)btSerial.read();  //mySerial int 값을 char 형식으로 변환
    myString+=myChar;   //수신되는 문자를 myString에 모두 붙임 (1바이트씩 전송되는 것을 연결)
    delay(5);           //수신 문자열 끊김 방지
  }
  if(!myString.equals(""))  //myString 값이 있다면
  {
    Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력

    if (myString.equals("S")) {
      motorstop();
    } else if (myString.equals("F")) {
      forward();
    } else if (myString.equals("B")) {
      backward();
    } else if (myString.equals("L")) {
      left();
    } else if (myString.equals("R")) {
      right();
    }
    myString="";  //myString 변수값 초기화
  }
}

void selfTest()
{
   motor_con(motor_speed, motor_speed); //전진 
   //motor_con(-motor_speed, motor_speed); //좌회전
   //motor_con(motor_speed, -motor_speed); //우회전
   //motor_con(-motor_speed, -motor_speed); //후전
   delay(DELAY);
   motor_con(0, 0); //정지
   delay(DELAY);
}

void selfTest2()
{
  forward();
  delay(DELAY);
  motorstop(); delay(500);
  
  backward();
  delay(DELAY);
  motorstop(); delay(500);
  
  right();
  delay(DELAY);
  motorstop(); delay(500);
  
  left();
  delay(DELAY);
  motorstop(); delay(500);  
}

void motorstop()
{
  motor_con(0, 0); //정지
}

void backward()
{
  motor_con(-motor_speed, -motor_speed); //후전
}

void forward()
{
  motor_con(motor_speed, motor_speed); //전진 
}

// Let right motor keep running, but stop left motor
void right()
{
  motor_con(motor_speed, -motor_speed); //우회전
}

// Let left motor keep running, but stop right motor
void left()
{
  motor_con(-motor_speed, motor_speed); //좌회전
}

void motor_con(int M1, int M2){
 
 if(M1>0){  //모터A 정회전
   digitalWrite(M_IN1,motorA_vector);
   digitalWrite(M_IN2,!motorA_vector);
 }
 else if(M1<0){  //모터A 역회전
   digitalWrite(M_IN1,!motorA_vector);
   digitalWrite(M_IN2,motorA_vector);
 }
 else{        //모터 A 정지
   digitalWrite(M_IN1,LOW);
   digitalWrite(M_IN2,LOW);
 }
 
 if(M2>0){    //모터B 정회전
   digitalWrite(M_IN3,motorB_vector);
   digitalWrite(M_IN4,!motorB_vector);
 }
 else if(M2<0){  //모터B 역회전
   digitalWrite(M_IN3,!motorB_vector);
   digitalWrite(M_IN4,motorB_vector);
 }
 else{          //모터 B 정지
   digitalWrite(M_IN3,LOW);
   digitalWrite(M_IN4,LOW);
 }
 analogWrite(EA,abs(M1)); //A모터 속도값
 analogWrite(EB,abs(M2)); //B모터 속도값
}
저작자 표시
신고


 

티스토리 툴바