跳到主要內容

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();
    }

留言

這個網誌中的熱門文章

小蟻智慧攝影機支援RTSP

來源: http://en.miui.com/thread-196713-1-1.html 小蟻智慧攝影機版本: 1.8.5.1l_201511061661(台灣版) 下載檔案 https://drive.google.com/file/d/0ByjBix7wpeJJY0ZWZXlvWl9Za1E/view?usp=sharing 把攝影機SD卡拿讀卡機讀取 把壓縮檔內的test資料夾放進SD根目錄 插回SD卡至攝影機 重開 攝影機會呈現橘燈並執行更新 等恢復至藍燈或是用app確認攝影機開啟 用VLC或相關程式讀取串流 Main stream:rtsp:// <CameraIP> :554/ch0_0.h264 Minor stream:rtsp:// <CameraIP> :554/ch0_1.h264 Audio stream:rtsp:// <CameraIP> :554/ch0_3.h264 Telnet與FTP開啟加上 # Telnet if [ ! -f "/etc/init.d/S88telnet" ]; then     echo "#!/bin/sh" > /etc/init.d/S88telnet     echo "telnetd &" >> /etc/init.d/S88telnet     chmod 755 /etc/init.d/S88telnet fi # FTP echo "#!/bin/sh" > /etc/init.d/S89ftp echo "tcpsvd -vE 0.0.0.0 21 ftpd -w / &" >> /etc/init.d/S89ftp chmod 755 /etc/init.d/S89ftp User:  root Password:  1234qwer 使用passwd改密碼 參考: http://en.miui.com/thread-224653-1-1.html

蘑菇蘑菇咕咕雞

在 夢中,我的旅程開始於一個神秘的印度轉機站,目的地卻不明。飛機上,我遇到了一個像 Kobo Kanaeru 的女孩。她活潑可愛,說話帶著印度口音,但又像在模仿網紅般的風趣。她用英語向我介紹當下的景點,提到了一座超長的橋或峽谷,說長達 "1 million"(一百萬?),但我完全聽不懂,想表達你好厲害,但完全不知道英文該怎麼說,只能尷尬地微笑點頭。 落地後,我和這個女孩在一個戶外咖啡廳的座位上聊天。她興奮地提到一家名為「MoKumoku bukubuku」的碳烤餐廳,還說這是她最愛的地方之一。我們聊了許多,她提議晚上六點半一起逛街。我提到我的姐姐也一起來到這個城市,或許可以一起同行。回到飯店後,我果然看見姐姐正在辦理入住,我跟她說了這個計畫,她也爽快地答應一起去。 到六點半時,我、姐姐和女孩碰面,開始愉快地聊天。 談話間,女孩突然拿出一張照片,是當年我當兵的一位組長照片。她沒有多說什麼,只是微微一笑,把照片放在桌上。我看著那張照片,腦海中開始浮現各種可能性,這張照片和我有什麼關聯?她似乎在暗示什麼,讓我不禁聯想到我前女友。我的前女友正是我們組長的姐姐,而這個女孩的年紀和模樣,讓我開始懷疑她可能與我前女友有關,甚至可能是她的女兒。但她並沒有明說,一切都只是我的猜測。 氣氛變得微妙,女孩忽然說她要離開,匆匆跑去找一位男子。姐姐看著她的背影,低聲提醒我:「她可能有別的企圖,小心點。」不久後,女孩果然帶著那位陌生男子回來,試圖說服我們去另一間他們推薦的飯店住。男子信誓旦旦地說,那邊免費且服務更好,但他們的態度讓人感覺不對勁。 我不禁心生警惕,試探地問女孩:「這到底是什麼意思?為什麼非要我們去那間飯店?」女孩含糊其詞,只說那裡環境更適合我們,還暗示有其他驚喜。我直接回絕了她的提議,表示不需要任何免費服務。女孩的表情瞬間變得複雜,但沒有繼續勉強。 最後,女孩與那男子無奈離開。姐姐在旁邊冷笑道:「看吧,我就說是個陷阱。」 我望著他們的背影,心中思緒翻湧,最後忍不住嘀咕:「這是什麼最新的詐騙手段嗎?」

網樂通編譯Kernel & modules

參考網址: https://xiaolaba.wordpress.com/2012/10/20/ubuntu-12-10-stlinux-2-4/ http://www.twpda.com/2012/10/nextvod-compile-kernel.html https://github.com/dlintw/kernel-pdk7105/tree/twpda 編譯環境:linuxmint-18-cinnamon-64bit 1.安裝STLinux 2.4 參考 https://xiaolaba.wordpress.com/2012/10/20/ubuntu-12-10-stlinux-2-4/ 主要步驟為 下載 ISO 檔 mkdir STLinux cd STLinux wget ftp://ftp.stlinux.com/pub/stlinux/2.4/iso/STLinux-2.4-sh4-20121121.iso 掛載 ISO 檔 sudo mkdir /mnt/iso sudo mount -o loop STLinux-2.4-sh4-20120822.iso /mnt/iso 安裝 STLinux cd /mnt/iso sudo ./installb --debian all-sh4-glibc 2.下載原始碼 cd ~/STLinux wget https://github.com/dlintw/kernel-pdk7105/archive/twpda.zip unzip twpda.zip 3.編譯 cd kernel-pdk7105-twpda export PATH=$PATH:/opt/STM/STLinux-2.4/host/bin:/opt/STM/STLinux-2.4/devkit/sh4/bin make mrproper sh ./make.sh all 這邊整理一下我編譯出現的問題 1.build-essential 沒安裝 sudo apt-get install build-essential 2.make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig 出現ncurses...