This is a port of the mruby/c tutorial Chapter 03 to the mbed environment.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 #include "mrubyc/hal/hal.h"
00004 #include "mrubyc/mrubyc.h"
00005 
00006 DigitalIn mybutton(USER_BUTTON);
00007 DigitalOut myled(LED1);
00008 RawSerial mysci(USBTX, USBRX);
00009 
00010 extern const uint8_t sample1[];
00011 extern const uint8_t sample2[];
00012 
00013 int hal_write(int fd, const void *buf, size_t nbytes)
00014 {
00015     return mysci.write((const uint8_t *)buf, (int)nbytes, NULL, SERIAL_EVENT_TX_COMPLETE);
00016 }
00017 
00018 int hal_flush(int fd)
00019 {
00020     char char1 = 0;
00021     while (mysci.readable()) 
00022     { 
00023         char1 = mysci.getc();
00024     }
00025     return 0;
00026 }
00027 
00028 void hal_delay(mrb_vm *vm, mrb_value *v)
00029 {
00030     wait_ms((int)GET_INT_ARG(0));
00031 }
00032 
00033 void hal_led(mrb_vm *vm, mrb_value *v)
00034 {
00035     myled = (int)GET_INT_ARG(0);
00036 }
00037 
00038 void hal_button(mrb_vm *vm, mrb_value *v)
00039 {
00040     int sw = mybutton;
00041     SET_INT_RETURN(sw);
00042 }
00043 
00044 int main() {
00045     mysci.baud(115200);                     // 115Kbps
00046     mysci.format(8, Serial::None, 1);       // 8bt, none parity, stop bit 1
00047     mrbc_init ();
00048     mrbc_define_method(0, mrbc_class_object, "led1_write", hal_led);
00049     mrbc_define_method(0, mrbc_class_object, "delay", hal_delay);
00050     mrbc_define_method(0, mrbc_class_object, "sw1_read", hal_button);
00051     mrbc_create_task ( sample1, 0 );
00052     mrbc_create_task ( sample2, 0 );
00053     
00054     mrbc_run ();
00055     
00056 }
00057