2014年8月25日 星期一

Arduino 滑鼠滾輪編碼器/旋轉編碼器

滑鼠拆下來的滾輪編碼器

時序為
                     → CW
A  -----------          -------------    HIGH
               ----------                  LOW

                     ← CCW
B  --------          ----------------    HIGH
            ----------                     LOW

A B

1  1↓CW
1  0
0  0
0  1

1  1
1  0
0  0
0  1↑CCW

程式碼參考底下網址來源修改而來


#define ENCODER_A_PIN 2
#define ENCODER_B_PIN 3
 
unsigned long time = 0;
long position = 0;
long num = 0;
 
void setup()
{
  pinMode(ENCODER_A_PIN,INPUT);
  pinMode(ENCODER_B_PIN,INPUT);
 
  attachInterrupt(0, RotaryEncoder, LOW);
  Serial.begin(9600);
  time = millis();
}
 
void loop()
{
  while (num != position)
  {
    num = position;
    Serial.println(num);
  }
}
 
 
void RotaryEncoder(){  
  int temp =digitalRead(ENCODER_B_PIN);
  if ((millis() - time) > 3) {
      if ( temp == LOW)
      {
        position++;
      }else{
      if ( temp == HIGH)
        position--;
      }
  }
  time = millis();
}

沒中斷版本

int trigger=0;
void RotaryEncoder(){  
  int tempA =digitalRead(ENCODER_A_PIN);
  int tempB =digitalRead(ENCODER_B_PIN);

  
  if ((millis() - time) > 3) {
    if(tempA==LOW && trigger==HIGH){
      if ( tempB == LOW)
      {
        position++;
      }else{
      if ( tempB == HIGH)
        position--;
      }
    }
    trigger=tempA;
    time = millis();
  }
}

參考來源:
http://www.arduino.cn/thread-2423-1-1.html
http://www.geek-workshop.com/thread-373-1-1.html


2015/05/24 更新



恩..多一顆按鈕
CLK 當作A
DT 當B

    #define ENCODER_A_PIN 2
    #define ENCODER_B_PIN 3
    #define SW_PIN 4
    
    unsigned long time = 0;
    volatile long position = 0;
    volatile long num = 0;
     
    void setup()
    {
      pinMode(ENCODER_A_PIN,INPUT_PULLUP);
      pinMode(ENCODER_B_PIN,INPUT_PULLUP);
      pinMode(SW_PIN, INPUT_PULLUP); // 輸入模式並啟用內建上拉電阻
      
      attachInterrupt(0, RotaryEncoder, LOW);
      Serial.begin(9600);
      time = millis();
    }
     
    void loop()
    {
       if(digitalRead(SW_PIN) == LOW){ // 按下開關,歸零
         position = 0; 
         Serial.println("count reset to 0");
         delay(300);
      }
      while (num != position)
      {
        num = position;
        Serial.println(num);
      }
    }
     
     
    void RotaryEncoder(){  
      int temp =digitalRead(ENCODER_B_PIN);
      if ((millis() - time) > 3) {
          if ( temp == LOW)
          {
            position++;
          }else{
          if ( temp == HIGH)
            position--;
          }
      }
      time = millis();
    }

2014年8月23日 星期六

apache2 access.log 訊息


 [23/Aug/2014:22:28:45 +0800] "GET http://www.baidu.com/?rands=18054347 HTTP/1.1" 200 504 "-" "-"

apache 訪問被塞了外部網站,並回應200
要是上面塞的都是廣告,不就免費幫別人點廣告了嗎...

我的主機並沒有架設代理伺服器
為什麼回傳200呢?
原來200是回應客戶端,
並回傳預設主機網頁內容,
並不會存取外部網站



來源:
https://wiki.apache.org/httpd/ProxyAbuse

2014年8月15日 星期五

MINT 17安裝 Pepper Flash Player For Chromium


Ubuntu 14.04 用戶可以通過以下命令安裝Pepper Flash Player For Chromium :

sudo apt-get install pepperflashplugin-nonfree
sudo update-pepperflashplugin-nonfree --install

如果你想使用Beta 版的Google Chrome 中的Pepper Flash Player ,那麼可以把第二個命令改為:

sudo update-pepperflashplugin-nonfree --install --beta --unverified

如果想使用非穩定版的Google Chrome 中的Pepper Flash Player,那麼可以把第二個命令改為:

sudo update-pepperflashplugin-nonfree --install --unstable --unverified

如果你想卸載這個Flash Player ,那麼請執行以下命令:

sudo update-pepperflashplugin-nonfree --uninstall

2014年7月22日 星期二

編譯sunxi-tools

mowei@mowei ~/A10/sunxi-tools $ make
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/  -o fexc fexc.c script.c script_uboot.c script_bin.c script_fex.c
ln -s fexc bin2fex
ln -s fexc fex2bin
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/  -o bootinfo bootinfo.c
bootinfo.c: In function ‘print_script’:
bootinfo.c:274:25: warning: unused parameter ‘script’ [-Wunused-parameter]
 void print_script(void *script)
                         ^
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ `pkg-config --cflags libusb-1.0`  -o fel fel.c  `pkg-config --libs libusb-1.0`
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
fel.c:22:20: fatal error: libusb.h: No such file or directory
 #include <libusb.h>
                    ^
compilation terminated.
make: *** [fel] Error 1

找不到檔案~
sudo apt-get install libusb-1.0-0-dev

解決~

2014年7月20日 星期日

C++ CURL 下載圖片

想要把之前的專題架設在RPI
原本要從廠商提供的SDK向DVR主機
拉H264串流下來解碼成圖片做處理
可是!

他沒有提供ARM的動態函式庫...
(虧我還花了一天找RPI硬解H264)

所以尋找替代方案!
所幸DVR提供網頁線上瀏覽
直接抓圖下來
連轉檔都省下來了!!

再拉圖下來有Authorization問題
要輸入帳號密碼才能登入下載

有兩種解法
以我這邊的DVR網址為例
原網址為
http://127.0.0.1/cgi-bin/net_jpeg.cgi?ch=0

第一種
再前面加入"帳號:密碼@"如下
http://user:pass@127.0.0.1/cgi-bin/net_jpeg.cgi?ch=0

第二種
再Header 自己添加Authorization
headers = curl_slist_append(headers,"Authorization: Basic XXXXXXXXXXX");
XXXXXXXXXXX為 user:pass 進行 base64運算結果
詳情參考WIKI:HTTP基本認證

後記:
再抓DVR的圖時間耗費的很久
原本以為是keep-alive的問題減少握手次數因該可以加快速度
我還以為是我程式碼寫錯
結果DVR主機不支援........
而花費的時間大都再內部的轉檔吧!(猜測)

使用範例multi-app
去同時抓圖下來(16張)
大概花費2秒
比原本一張1秒好多了
不過同時抓有時候程式會卡住...
不知道是主機來不及反應還是網路塞車了

下面程式碼使用QT且只能單張下載
可以參考multi-app修改

dlimage.h
#ifndef DIMAGE_H
#define DIMAGE_H

#include <curl/curl.h>
#include <QString>
#include <QImage>

class DLimage
{
public:
    DLimage(QString srcUrl);

public:
    bool ChangeUrl(QString srcUrl);
    bool DownloadJpeg();
    QImage& GetImage();

private:
    QString srcUrl;
    QByteArray tempfile ;
    QImage newImage;
};

#endif // DIMAGE_H

dlimage.cpp
#include "dlimage.h"
#include<iostream>
#include<QImageReader>
#include <QBuffer>

DLimage::DLimage(QString srcUrl)
{
    this->srcUrl=srcUrl;
}
bool DLimage::ChangeUrl(QString srcUrl)
{
    this->srcUrl=srcUrl;
    return true;
}
size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
    int len= size*nmemb;
    QByteArray *tempfile =(QByteArray*) userdata;
    tempfile->append(QByteArray((char*)ptr,nmemb));

    return len;
}
bool DLimage::DownloadJpeg()
{
    CURL* curlCtx = curl_easy_init();
    struct curl_slist *headers = NULL;

    headers = curl_slist_append(headers,"Connection:keep-alive");
    headers = curl_slist_append(headers,"Authorization: Basic XXXXXXXXXXX"); //base64 

    curl_easy_setopt(curlCtx, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curlCtx, CURLOPT_URL,srcUrl.toLocal8Bit().constData());
    curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA,&tempfile);
    curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
    curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);

    CURLcode rc = curl_easy_perform(curlCtx);
    if (rc)
    {
        std::cout<<"!!! Failed to download: "<<srcUrl.toLocal8Bit().constData()<<std::endl;
        return false;
    }

    long res_code = 0;
    curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);
    if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK))
    {
        std::cout<<"!!! Response code: "<<res_code<<std::endl;
        return false;
    }

    curl_easy_cleanup(curlCtx);
    curl_slist_free_all(headers);
    headers = NULL;

    //save Image from QByteArray
    QBuffer buffer(&tempfile);
    buffer.open( QIODevice::ReadOnly);
    QImageReader reader(&buffer);
    newImage = reader.read();//Copy
    buffer.close();
    tempfile.clear();

    return true;
}
QImage& DLimage::GetImage()
{
    return newImage;
}

2014年7月17日 星期四

2014年7月13日 星期日

MINT 17 安裝WINE 1.7

$ sudo add-apt-repository ppa:ubuntu-wine/ppa
$ sudo apt-get update
$ sudo apt-get install wine1.7
$ sudo apt-get install winetricks
$ sudo apt-get install playonlinux
$ rm -r ~/.wine
$ WINEARCH=win32 WINEPREFIX=~/.wine winecfg
$ winetricks dotnet20 gdiplus


開啟OSU~
玩起來難度好像上升了....=W="

玩日文遊戲要加上
LANG=ja_JP.UTF-8


來源:
http://zackwang.blogspot.tw/2013/11/ubuntu-1310-wine-173.html
http://www.mybubbleteatime.com/2013/06/getting-osu-to-work-in-linux-mint-15.html

2014年6月29日 星期日

Arduino Web Server WOL

1.修改原本的 Web Server 程式碼,並加上UDP 協定 broadcast MagicPacket

outputString="";
targetmac="";

if(readString.indexOf("?")>0)
{
  textend = readString.indexOf(" HTTP/1.1");
  
  if((textstart = readString.indexOf("?input=")) >0)
  {
    textstart+=7;
    outputString=readString.substring(textstart,textend);
    outputString.toUpperCase();
    for(int i=0;i<outputString.length();i=i+2)
    {
        int temp;
        char tempchar=0;
        int test=16;
        for(int j=0;j<2;j++)
        {
          if(outputString[i+j]>='A')
          {
            temp=(int)(outputString[i+j]-'A'+10);
          }
          else
          {
            temp=(int)(outputString[i+j]-'0');
          }
          tempchar+=(char)(temp*test);
          test=test/16;
        }
        targetmac+=tempchar;
    }
    Udp.beginPacket(broadcast, 7);
    for (int i = 0; i < 6; ++i){
      Udp.write(0xFF);
    }
    for(int i=0;i<16;i++)
    {
       for(int j=0;j<6;j++)
      {
      Udp.write(targetmac[j]);
      }
    }
    Udp.endPacket();
    }
}

2014年6月28日 星期六

Arduino Ethernet Shield 實現家庭自動化

http://www.instructables.com/id/Control-an-LED-over-the-internet-using-the-Arduino/
沿用此程式碼並加以修改

使用Arduino Ethernet Shield 架設WEB SERVER
利用網頁實現
網頁控制LED
Slider調整PWM
監控可變電阻電壓
與一個可自定義控制輸入框



2014年6月27日 星期五

Arduino Web Server DECodeURI

1.
架設一個簡單Web Server,以GET方式傳值發現傳入中文字收到的東西變得很不正常
原因是以GET傳值會進行ENCodeURI,:
http://192.168.137.177/?test=送出
ENCodeURI:
http://192.168.137.177/?test=%E9%80%81%E5%87%BA

2.
unicode utf-8是一種針對Unicode的可變長度字元編碼
在中文文字使用3byte表示
16進位表示為” E9 80 81”
16進位表示為” E5 87 BA”
URL編碼會把一個字元以16進制表示轉成兩個字元,然後在其前面放置轉義字元("%"),編碼完後” %E9%80%81”"%E5%87%BA

3.
’%’去除並把兩個ASCII字元為一組如”E9”,轉換成一個以16進位表示E9一個字元。

ASCII’A’6516進位A10ASCII’0’4816進位00
當讀到大寫英文字母進行數字計算以’A’為首減掉’A’6510,讀到數字以’0’為首減掉’0’48即可轉換成16進位表示。
因為兩個字元為一組把先讀到的字元轉成16進位做左移4BIT即乘於16,與下一個字元轉成16進位相加,組合出一個byte存入字串內。

String newstring;
for(int i=0;i<outputString.length();i++)
{
  if(outputString[i]=='%')
  {
    int temp;
    char tempchar=0;
    int test=16;
    for(int j=1;j<3;j++)
    {
      if(outputString[i+j]>='A')
      {
        temp=(int)(outputString[i+j]-'A'+10);
      }
      else
      {
        temp=(int)(outputString[i+j]-'0');
      }
      tempchar+=(char)(temp*test);
      test=test/16;
    }
    newstring+=tempchar;
    i=i+2;
  }
  else
  {
    newstring+=outputString[i];
  }
}

2014年6月20日 星期五

Orange's實作結果1.2

1.2

 org 07c00h
 mov ax,cs
 mov ds,ax
 mov es,ax
 call DispStr
 jmp $
DispStr:
 mov ax,BootMessage
 mov bp,ax
 mov cx,16
 mov ax,01301h
 mov bx,000ch
 mov dl,0
 int 10h
 ret
BootMessage: db "Hello, OS world!"
  times 510-($-$$) db 0
 dw 0xaa55





2014年6月13日 星期五

kpartx掛載硬碟映像檔

掛載映像檔
kpartx -av ~/hd.img
掛載後,就可以在
/dev/mapper/
目錄下看到兩個loopXpY的文件了。
來源:http://www.cnblogs.com/Jer-/p/3330128.html

2014年6月10日 星期二

linaro lubuntu12.04安装vncserver

安装vncserver
apt-get install tightvncserver

第一次启动,生产链接文件 ~/.vnc/xstartup
vncserver :1
vncserver -kill :1

编辑~/.vnc/xstartup
xsession-manger改为startlubuntu &

正式启动vncserver
vncserver -geometry 1280x800 :1 

需要开机自启,可以将上述脚本加到/etc/rc.local

來源:http://cubietech.com/forum.php?mod=viewthread&tid=56&highlight=VNC

2014年6月9日 星期一

cubieboard nand-part

#get the sunxi-tools and compile up
cd /home
git clone git://github.com/linux-sunxi/sunxi-tools
cd sunxi-tools

#get usb library if not installed, and compile.
apt-get install libusb-1.0-0-dev
make clean
make


1。从SD卡进入CB2

2。查看nand的结构
  1. root@cubieboard2:~/# ./nand-part -f a20 /dev/nand
  2. check partition table copy 0: mbr: version 0x00000200, magic softw411
  3. OK
  4. check partition table copy 1: mbr: version 0x00000200, magic softw411
  5. OK
  6. check partition table copy 2: mbr: version 0x00000200, magic softw411
  7. OK
  8. check partition table copy 3: mbr: version 0x00000200, magic softw411
  9. OK
  10. mbr: version 0x00000200, magic softw411
  11. 5 partitions
  12. partition  1: class =         DISK, name =   bootloader, partition start =    32768, partition size =    65536 user_type=0
  13. partition  2: class =         DISK, name =          env, partition start =    98304, partition size =    32768 user_type=0
  14. partition  3: class =         DISK, name =         boot, partition start =   131072, partition size =    65536 user_type=0
  15. partition  4: class =         DISK, name =       rootfs, partition start =   196608, partition size =  4194304 user_type=0
  16. partition  5: class =         DISK, name =        UDISK, partition start =  4390912, partition size =  3342336 user_type=0
3。nand-part命令是:
  1. root@cubieboard2:~/# ./nand-part -f a20 /dev/nand 32768 "bootloader 65536" "env 32768" "boot 65536" "rootfs 7536640"
4。再来就是resize2fs
  1. root@cubieboard2:~/# fsck -f /dev/nandd
  2. root@cubieboard2:~/# resize2fs /dev/nandd
最后检查看:
  1. root@cubieboard:~# df -hl
  2. Filesystem      Size  Used Avail Use% Mounted on
  3. /dev/nandd      3.7G  939M  2.6G  27% /
  4. none            4.0K     0  4.0K   0% /sys/fs/cgroup
  5. none             91M  180K   91M   1% /run
  6. none            5.0M  4.0K  5.0M   1% /run/lock
  7. none            454M     0  454M   0% /run/shm
  8. none            100M     0  100M   0% /run/user

來源:http://forum.cubietech.com/forum.php?mod=viewthread&tid=1454
http://www.cubieforums.com/index.php?topic=72.0

2014年6月5日 星期四

Cubietruck lubuntu啟動wifi

加載模塊
$modprobe bcmdhd

添加"bcmdhd" 到 /etc/modules
$vi /etc/modules

下載安裝
$apt-get install wifi-radar或者$apt-get install linux-firmware
重啟$reboot

打開wifi
$ifconfig wlan0 up
查找(看)wifi
$iwlist wlan0 scan

來源:http://www.whatled.com/post-1351.html

2014年5月24日 星期六

boot.scr生成

boot.scr中可以包含用于载入script.bin,kernel,initrd(可选)以及设置内核启动参数的uboot命令。

新建 boot.cmd 文件,添加以下内容:
setenv bootargs console=ttyS0,115200 noinitrd disp.screen0_output_mode=EDID:1280x1024p60 init=/init root=/dev/mmcblk0p2  rootfstype=ext4 rootwait panic=10 ${extra}
fatload mmc 0 0x43000000 boot/script.bin
fatload mmc 0 0x48000000 boot/uImage
bootm 0x48000000
详细解释:
上述第一行设置uboot的bootargs启动参数,格式为 参数=值,不同参数使用空格分开,其中
  • console=ttyS0,115200 含义为使用特定的串口ttyS0,波特率为 115200
  • noinitrd 含义为不使用ramdisk(内存磁盘)
  • init=/init 含义为内核启起来后,进入系统中运行的第一个脚本
  • root=/dev/mmcblk0p2 含义为指定rootfs的位置为TF卡第二个分区
  • rootfstype=ext4 含义为根文件系统类型
  • rootwait 含义为等待设备/dev/mmcblk0p2就绪后才尝试挂载rootfs
  • panic=10 传递内核参数,当遇到panic(内核严重错误)时等待10秒后重启
  • screen0_output_mode 设置合适的屏幕显示分辨率
更多的参数可以通过查看Linux内核源码目录下Documentation/kernel-parameters.txt文件了解
第二行和第三行为将script.bin和内核uImage加载到指定内存地址。fatload是U-Boot中装载linux kernel 到内存的指令。
基本用法:fatload <interface> <dev[:part]> <addr> <filename> <bytes>
  • interface:所用到接口,如:MMC、USB
  • dev [:part]: 文件存放的设备 如:ide 0:1
  • addr: 装载到内存的开始地址。
  • filename: 装载的文件名称。
  • bytes: copy的字节数.
. 第四行bootm 用于将内核映像加载到指定的地址
保存文件后,执行以下命令生成boot.scr:
 mkimage -C none -A arm -T script -d boot.cmd boot.scr



來源:http://blog.csdn.net/u013510236/article/details/18451271

2014年5月23日 星期五

ft5x_ts 觸碰設定問題

這是一台壞掉的A10平板ET-425
裡面nand壞了無法開機
以sd開機執行debain

添加觸碰面板驅動

這邊使用NOVO 7 ELF的script.bin
修改
[ctp_para]
ctp_boxchip_type = 2579
ctp_used                 =1
ctp_name                 = "ft5x_ts"
ctp_twi_id               = 2
ctp_twi_addr             =0x38
ctp_screen_max_x         = 1024
ctp_screen_max_y         = 600
ctp_revert_x_flag        = 0
ctp_revert_y_flag        = 0
ctp_exchange_x_y_flag    = 1
ctp_int_port             = port:PH21<6><default><default><default>
ctp_wakeup               = port:PB13<1><default><default><default>


我把編譯好的ft5x_ts.ko
放到根目錄裡

在/etc/rc.local
裡面加入
insmod /ft5x_ts.ko or /lib/modules/3.4.29+/kernel/drivers/input/touchscreen/ft5x_ts.ko
使開機自動載入




<6>===========================ft5x_ts_init=====================              
[   57.580000] ===========================ft5x_ts_init=====================  
<6>ctp_fetch_sysconfig_para.                                                  
[   57.600000] ctp_fetch_sysconfig_para.                                      
<6>ctp_fetch_sysconfig_para: after: ctp_twi_addr is 0x38, dirty_addr_buf: 0x38.
dirty_addr_buf[1]: 0xfffe                                                    
[   57.600000] ctp_fetch_sysconfig_para: after: ctp_twi_addr is 0x38, dirty_addr
_buf: 0x38. dirty_addr_buf[1]: 0xfffe                                        
<6>ctp_fetch_sysconfig_para: ctp_twi_id is 2.                                
[   57.630000] ctp_fetch_sysconfig_para: ctp_twi_id is 2.                    
<6>ctp_fetch_sysconfig_para: screen_max_x = 1024.                            
[   57.630000] ctp_fetch_sysconfig_para: screen_max_x = 1024.                
<6>ctp_fetch_sysconfig_para: screen_max_y = 600.                              
[   57.650000] ctp_fetch_sysconfig_para: screen_max_y = 600.                  
<6>ctp_fetch_sysconfig_para: revert_x_flag = 0.                              
[   57.660000] ctp_fetch_sysconfig_para: revert_x_flag = 0.                  
<6>ctp_fetch_sysconfig_para: revert_y_flag = 0.                              
[   57.670000] ctp_fetch_sysconfig_para: revert_y_flag = 0.                  
<6>ctp_fetch_sysconfig_para: exchange_x_y_flag = 0.                          
[   57.680000] ctp_fetch_sysconfig_para: exchange_x_y_flag = 0.              
<6>ft5x_ts_init: after fetch_sysconfig_para:  normal_i2c: 0x38. normal_i2c[1]: 0
xfffe                                                                        
[   57.690000] ft5x_ts_init: after fetch_sysconfig_para:  normal_i2c: 0x38. norm
al_i2c[1]: 0xfffe                                                            
<3>script parser fetch err.                                                  
[   57.700000] script parser fetch err.                                      
<4>ctp_init_platform_resource: tp_reset request gpio fail!                    
[   57.710000] ctp_init_platform_resource: tp_reset request gpio fail!        
<3>script parser fetch err.                                                  
[   57.720000] script parser fetch err.                                      
<6>ctp_init_platform_resource: No power port feature present.                
[   57.730000] ctp_init_platform_resource: No power port feature present.    
<6>ctp_wakeup.                                                                
[   57.740000] ctp_wakeup.                                                    
<6>ctp_detect: Detected chip ft5x_ts at adapter 2, address 0x38              
[   57.790000] ctp_detect: Detected chip ft5x_ts at adapter 2, address 0x38  
<6>====ft5x_ts_probe begin=====.                                              
[   57.810000] ====ft5x_ts_probe begin=====.                                  
<6>input: ft5x_ts as /devices/platform/sun4i-i2c.2/i2c-2/2-0038/input/input1  
[   57.810000] input: ft5x_ts as /devices/platform/sun4i-i2c.2/i2c-2/2-0038/inpu
t/input1                                                                      
<6>ctp_set_irq_mode: config gpio to int mode.                                
[   57.840000] ctp_set_irq_mode: config gpio to int mode.                    
<6>ctp_set_irq_mode, 225: gpio_int_info, port = 8, port_num = 21.            
[   57.850000] ctp_set_irq_mode, 225: gpio_int_info, port = 8, port_num = 21.
<6> INTERRUPT CONFIG                                                          
[   57.870000]  INTERRUPT CONFIG                                              
<6>==ft5x_ts_probe over =                                                    
[   57.880000] ==ft5x_ts_probe over =  


看到一些錯誤訊息
不過還是可以動...
很奇妙....


script.bin
修改成


[ctp_para]
ctp_boxchip_type = 2579
ctp_used                 =1
ctp_name                 = "ft5x_ts"
ctp_twi_id               = 2
ctp_twi_addr             =0x38
ctp_screen_max_x         = 1024
ctp_screen_max_y         = 600
ctp_revert_x_flag        = 0
ctp_revert_y_flag        = 0
ctp_exchange_x_y_flag    = 1
ctp_int_port = port:PH21<6><default><default><default>
ctp_wakeup = port:PB13<1><default><default><1>
ctp_reset = port:PB13<1><default><default><1>
ctp_io_port = port:PH21<0><default><default><default>

結果

<6>===========================ft5x_ts_init=====================              
[   35.630000] ===========================ft5x_ts_init=====================  
<6>ctp_fetch_sysconfig_para.                                                  
[   35.640000] ctp_fetch_sysconfig_para.                                      
<6>ctp_fetch_sysconfig_para: after: ctp_twi_addr is 0x38, dirty_addr_buf: 0x38.
dirty_addr_buf[1]: 0xfffe                                                    
[   35.650000] ctp_fetch_sysconfig_para: after: ctp_twi_addr is 0x38, dirty_addr
_buf: 0x38. dirty_addr_buf[1]: 0xfffe                                        
<6>ctp_fetch_sysconfig_para: ctp_twi_id is 2.                                
[   35.670000] ctp_fetch_sysconfig_para: ctp_twi_id is 2.                    
<6>ctp_fetch_sysconfig_para: screen_max_x = 1024.                            
[   35.680000] ctp_fetch_sysconfig_para: screen_max_x = 1024.                
<6>ctp_fetch_sysconfig_para: screen_max_y = 600.                              
[   35.690000] ctp_fetch_sysconfig_para: screen_max_y = 600.                  
<6>ctp_fetch_sysconfig_para: revert_x_flag = 0.                              
[   35.700000] ctp_fetch_sysconfig_para: revert_x_flag = 0.                  
<6>ctp_fetch_sysconfig_para: revert_y_flag = 0.                              
[   35.710000] ctp_fetch_sysconfig_para: revert_y_flag = 0.                  
<6>ctp_fetch_sysconfig_para: exchange_x_y_flag = 1.                          
[   35.720000] ctp_fetch_sysconfig_para: exchange_x_y_flag = 1.              
<6>ft5x_ts_init: after fetch_sysconfig_para:  normal_i2c: 0x38. normal_i2c[1]: 0
xfffe                                                                        
[   35.730000] ft5x_ts_init: after fetch_sysconfig_para:  normal_i2c: 0x38. norm
al_i2c[1]: 0xfffe                                                            
<3>script parser fetch err.                                                  
[   35.750000] script parser fetch err.                                      
<6>ctp_init_platform_resource: No power port feature present.                
[   35.750000] ctp_init_platform_resource: No power port feature present.    
<6>ctp_reset.                                                                
[   35.770000] ctp_reset.                                                    
<6>ctp_wakeup.                                                                
[   35.800000] ctp_wakeup.                                                    
<6>ctp_detect: Detected chip ft5x_ts at adapter 2, address 0x38              
[   35.850000] ctp_detect: Detected chip ft5x_ts at adapter 2, address 0x38  
<6>====ft5x_ts_probe begin=====.                                              
[   35.860000] ====ft5x_ts_probe begin=====.                                  
<6>input: ft5x_ts as /devices/platform/sun4i-i2c.2/i2c-2/2-0038/input/input1  
[   35.870000] input: ft5x_ts as /devices/platform/sun4i-i2c.2/i2c-2/2-0038/inpu
t/input1                                                                      
<6>ctp_set_irq_mode: config gpio to int mode.                                
[   35.890000] ctp_set_irq_mode: config gpio to int mode.                    
<6>ctp_set_irq_mode, 225: gpio_int_info, port = 8, port_num = 21.            
[   35.900000] ctp_set_irq_mode, 225: gpio_int_info, port = 8, port_num = 21.
<6> INTERRUPT CONFIG                                                          
[   35.910000]  INTERRUPT CONFIG                                              
<6>==ft5x_ts_probe over =                                                    
[   35.920000] ==ft5x_ts_probe over =

2014年4月18日 星期五

VS1053b Realtime MIDI Plugin

買了一塊VS1053b 模組
GPIO0 GPIO1卻被焊死只有SPI界面可使用
無法設置GPIO0 GPIO1為Realtime MIDI 模式

這時候就可以用Realtime MIDI Plugin
在初始VS1053b 前打入補丁就可以進入Realtime MIDI 模式了

LM4F120與VS1053b 腳位對應

MOSI: pin 25 主出
MISO: pin 26 主入
SCK: pin 23 時脈
XCS: pin 24 選擇線
RST: pin 2 重設
DREQ: pin 3 資料請求
XDCS: pin 4 資料選擇

SPI 設置上我使用第三組
SPI的函式並沒有直接控制CS函式
我直接pinMode設置SPI(3)的CS來控制
還好執行上沒出現問題

SPI.setModule(3);
const int XCS = 24;//PD_1
pinMode(XCS, OUTPUT);


在SPI傳輸使用Realtime MIDI
SPI 傳送MIDI資料之前必須要傳送空資料

void sendMIDI(byte data)
{
  SPI.transfer(0x0);
  SPI.transfer(data);
}


程式碼:https://www.dropbox.com/s/8zfgrw3qevfjl52/VS1053B_rtMIDI.rar

參考網頁
https://gist.github.com/microtherion/2636608

Arduino & energia IDE 設定安裝

手上有 Arduino R3 跟 LM4F120
Arduino IDE 大家常使用但是LM4F120 也可以用energia IDE開發

energia 跟Arduino 基本上操作方法都一樣
大部分Arduino Code 也可移到energia 使用



2014年4月9日 星期三

V-USB MIDI for Arduino

把V-USB-MIDI移到Arduino UNO使用
電路接法跟韌體調整請參考Cooper Maa的文章

D-  改成PD3接腳
D+ 改成PD2接腳




有設看門狗計數器1秒
UsbMIDI.update();
間隔時間不要超過1秒




來源參考
http://cryptomys.de/horo/V-USB-MIDI/index.html
http://coopermaa2nd.blogspot.tw/2011/10/v-usb-examples-for-arduino.html

2014年4月8日 星期二

HC-05 AT模式設定

拿到HC-05藍芽模組
當然第一步就是修改設定
改改藍芽名字就能讓自己過過癮是本人的小確幸

這邊我使用PL2303HX跟HC-05進行連接
連接方式很簡單
HC-05 RXD→PL2303HX TXD
HC-05 TXD→PL2303HX RXD
HC-05 VCCPL2303HX 5.0v
HC-05 GNDPL2303HX GND

 

我的HC-05藍芽模組右下角有個小按鈕
那是PIO11(PIN34) 進入AT模式必須先設高電位
所以在通電之前按住小按鈕在進行通電
看到LED燈約兩秒閃一下代表進入AT模式即可放開按鈕


PL2303HX灌好驅動在檔案管理員查看使用哪個COM PORT
使用PUTTY進行連線SPEED設定38400

這時後輸入"AT" 再按ENTER鍵就可以看到訊息"OK"
看到OK代表你連線成功了可以隨你下任何指令~!
我這邊會一直無限出現"OK"的訊息
只要按下"Ctrl +C"就可以停止了

這邊我被搞了一下
輸入"AT"時是看不到任何輸入反應的
一直以為連線失敗
其實只要大膽的輸入"AT"按下ENTER就好了



我使用過arduino-1.0.5-r2版本的
serial monitor連線
輸入"AT"完全沒有反應....


來源參考
http://gsyan888.blogspot.tw/2014/03/arduino-hc-05.html
http://shop.cpu.com.tw/upload/2013/11/ADIO-HC-05-1.pdf


預測2031/1/1可能 TWCA 憑證 IOS會出現不信任

緣由: TWCA CYBER Root CA 有兩張、兩個效期 (2030、2047年到期) 推測TWCA 預計 2030年12月會停用: TWCA CYBER Root CA (2030 年到期) TWCA Global Root CA 改用啟用: TWCA CYBER ...