买琴买鼓,就找魔菇!

 找回密码
 注册
搜索
查看: 2561|回复: 15

一个MIDI踏板的诞生------------小小剖析KF-4 MIDI踏板

[复制链接]
发表于 2014-3-17 21:32:09 | 显示全部楼层 |阅读模式
吉他中国微信公众号
先占位,多图、多料
 楼主| 发表于 2014-3-18 15:19:27 | 显示全部楼层
吉他中国抖音
DSC05639.jpg
DSC05640.jpg

DSC05642.jpg

DSC05642.jpg

DSC05632.jpg
 楼主| 发表于 2014-3-18 15:23:07 | 显示全部楼层
GC视频号
使用STM8S单片机。

代码开源:


//4-pedal.c

#include <stmduino.h>

#define itglimit 20

#define blinkled D2
#define led3 D3
#define led4 D4

#define blinktime 80

//Variables
uchar tonenumber=0;
uchar ctra=1;
uchar ctrb=1;

void setblink();

typedef struct {
  pin p;
  uchar itg;
  uchar state;
  void(*pressed)();
  void(*released)();
}button;

void updatebutton(button*b){
  if(pinread(b->p))
  {//if button is not pushed
    if(b->itg>0)b->itg--;
  }
  else
  {//if button is pushed, therefore pulled low
    if(b->itg<itglimit)b->itg++;
  }
  
  if((b->itg==itglimit)&&(b->state==0))
  {
    b->state=1;
    if(b->pressed)b->pressed();
  }
  if((b->itg==0)&&(b->state==1))
  {
    b->state=0;
    if(b->released)b->released();
  }
}
///////////////////////////////////////////////消抖算法
button b1;
button b2;
button b3;
button b4;

void b1pressed()
{
  tonenumber++;
  tonenumber%=128;
  /* Send tone ch */
  putchar(0xc0);   
  putchar(tonenumber);  
  setblink();
  
  eeuchar(0)=tonenumber;
}
void b2pressed()
{
  tonenumber__;
  tonenumber%=128;
  putchar(0xc0);   
  putchar(tonenumber);  

  eeuchar(0)=tonenumber;
}
void b3pressed()
{
  if(ctra)
  {
    putchar(0xb0);
    putchar(25);
    putchar(127);
    pinhigh(led3);
  }
  else
  {
    putchar(0xb0);
    putchar(25);
    putchar(0);
    pinlow(led3);
  }
  ctra=1-ctra;
}
void b4pressed()
{
  if(ctrb)
  {
    putchar(0xb0);
    putchar(26);
    putchar(127);
    pinhigh(led4);
  }
  else
  {
    putchar(0xb0);
    putchar(26);
    putchar(0);
    pinlow(led4);
  }
  ctrb=1-ctrb;
}

uchar blinkcntr=0;

void setblink()
{
  blinkcntr=blinktime;
}

void t()
{
  updatebutton(&b1);
  updatebutton(&b2);
  updatebutton(&b3);
  updatebutton(&b4);
  
  if(blinkcntr)
  {
    blinkcntr--;
    pinhigh(blinkled);
  }
  else
  {
    pinlow(blinkled);
  }
}

void btninit(){
  b1.p=C3;
  b1.itg=0;
  b1.state=0;
  b1.pressed=b1pressed;
  b1.released=0;
  
  b2.p=C4;
  b2.itg=0;
  b2.state=0;
  b2.pressed=b2pressed;
  b2.released=0;
  
  b3.p=C5;
  b3.itg=0;
  b3.state=0;
  b3.pressed=b3pressed;
  b3.released=0;
  
  b4.p=C6;
  b4.itg=0;
  b4.state=0;
  b4.pressed=b4pressed;
  b4.released=0;
}

void main(){
  clock(16M);
  
  pinmode(C3,PULLUP);
  pinmode(C4,PULLUP);
  pinmode(C5,PULLUP);
  pinmode(C6,PULLUP);
  
  pinmode(blinkled,PUSHPULL);
  pinmode(led3,PUSHPULL);
  pinmode(led4,PUSHPULL);
  
  btninit();
  
  timer4tick(1ms);
  attach(t,timer4);
  
  serial(31250);
  unlock(EEPROM);
  tonenumber=eeuchar(0);
  
  interrupts();
  while(1){
    sleep();
  }
}



这个代码使用了novakon同志编写的stmduino库,这个库是非开源的,所以在此表达对novakon的感谢和对GC里的同志表示抱歉。

[ 本帖最后由 bg8npk 于 2014-3-18 15:36 编辑 ]
发表于 2014-3-18 15:24:21 | 显示全部楼层
买琴买鼓,就找魔菇
支持,lz要出套件吗?
发表于 2014-3-18 15:24:43 | 显示全部楼层
我的天呀,贼漂亮啊, 这东西出手不?
 楼主| 发表于 2014-3-18 15:28:13 | 显示全部楼层

回复 4楼 luhaocao 的帖子

出成品
帖子还没发完,还有一堆东西没扔上来,发帖的目的呢是为了把这个东西的设计的一些方面公开给大家互相交流和DIY,希望大家能够做出更好的作品来~

[ 本帖最后由 bg8npk 于 2014-3-18 15:31 编辑 ]
 楼主| 发表于 2014-3-18 22:57:43 | 显示全部楼层

回复 5楼 奴依 的帖子

还在不停的改进中!
发表于 2014-3-19 16:57:42 | 显示全部楼层
外壳LZ自己做的?
 楼主| 发表于 2014-3-19 18:07:32 | 显示全部楼层

回复 8楼 神经嘿 的帖子

是的,我大东莞除了大保健就是加工厂好找
我们有一个设计团队来做外壳,但是成本一把刀在那里的。
发表于 2014-3-19 22:10:07 | 显示全部楼层
外壳真不错!
 楼主| 发表于 2014-3-20 13:20:15 | 显示全部楼层

回复 10楼 湛江杀人王 的帖子

还在整理外壳的加工文件,我会共享给大家~
 楼主| 发表于 2014-3-20 19:44:07 | 显示全部楼层

回复 12楼 cfbxq1992 的帖子

如果不使用相同的方案的话,那部分也没啥用的。主要是一个midi信息、消抖的算法这些核心部分都在了,如果是想自己DIY用的同志看了就会懂的
发表于 2014-3-24 17:12:52 | 显示全部楼层
LZ 加工这样的外壳有数量要求吗?
发表于 2014-3-25 09:03:47 | 显示全部楼层
LZ的 踏板可以控制 guitar rig 软件吗?
发表于 2014-3-29 05:01:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|吉他中国官方

GMT+8, 2025-2-23 23:52

Powered by Discuz!

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表