ざっとWebを見た限りでは,EdisonをC言語で扱おうという人間は少数派なのかもしれない・・.
Intel謹製のHAL(Hardware abstract layer)らしい,MRAAを使ってみました.
https://github.com/intel-iot-devkit/mraa/blob/master/docs/edison.md
のページに,Edison breakout boardのピンマップが書いてあるので,その表の中から使用したい物理ピンのMRAA Numberを調べて, mraa_hoge_init にわたすようです.hogeの部分はgpio,pwm,spi,uartなど.
MRAAには,C以外にもC++やPython,JavaScript用のインタフェースもそろっているので,お好みな言語をお使いくださいな.
pwm.c
#include <stdio.h>
#include <syslog.h>
#include <mraa.h>
int main(int argc, char *argv[])
{
mraa_result_t ret;
mraa_init();
ret = mraa_set_log_level(LOG_DEBUG);
fprintf(stdout, "Hello mraa.\nVersion: %s\n", mraa_get_version());
mraa_pwm_context pwm;
// The physical pin mapping is defined at
// https://github.com/intel-iot-devkit/mraa/blob/master/docs/edison.md
//
// For example,
// MRAA Number(20) => Physical Pin(J18-7)
pwm = mraa_pwm_init(20);
if(pwm == NULL){
return 1;
}
mraa_pwm_period_us(pwm, 15*1000); // 15[ms]
mraa_pwm_enable(pwm, 1);
int i;
for(i=0;i<20;i++){
mraa_pwm_write(pwm, 0.05*i);
usleep(1000*1000); // 1[s]
float out = mraa_pwm_read(pwm);
fprintf(stdout, "PWM0 : %f\n", out);
}
mraa_deinit();
return ret;
}
CC = gcc
MRAALIBS = -lmraa
.PHONY: all clean pwm
all: pwm
clean:
rm -f ./*.o
rm -f pwm
pwm: pwm.o
$(CC) -O4 $(MRAALIBS) -o $@ $^
%.o: %.c
$(CC) -Wall -g -c $<