本想买个类似树莓派那种的开发板,但正好朋友说手头有个开发板,于是便借用着学习一下,收到后发现竟然是类似单片机式的,arduino 开发板。正好也趁此机会学学 C/C++,于是就便有了这篇文章。
这应该算是我第一个 C/C++ 语言的作品了,望不吝赐教。
前言 先来看一下官网的第一个 Blink 实例。
1 2 3 4 5 6 7 8 9 10 11 12 void setup () { pinMode (LED_BUILTIN, OUTPUT); } void loop () { digitarite (LED_BUILTIN, HIGH); delay (1000 ); digitalWrite (LED_BUILTIN, LOW); delay (1000 ); }
其中 setup 是只执行一次的函数,一般用来初始化参数;loop 是永久循环的函数,主要代码一般放这里。
首先设定 pinMode ,将所需的 LED 端口设定为输出。
然后想让它亮,只需将其设定为高电平即可,灯灭则是低电平,delay() 函数是延迟,括号内是延迟的毫秒数,相当于 python 的 time.sleep() 。
主菜 setup 先放一下摩斯电码的 setup 函数
1 2 3 4 5 void setup () { Serial.begin (9600 ); pinMode (LED_BUILTIN, OUTPUT); }
一开始需要给一个波特率,一般是 9600。
loop 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 void loop () { String text = "sos" ; text.toUpperCase (); String moss; for (int i=0 ; i<text.length (); i++){ char word = text.charAt (i); switch (word){ case 'A' :moss = ".-" ;break ; } Serial.println (moss); for (int j=0 ;j<moss.length ();j++){ if (moss.charAt (j) == '-' ){ digitalWrite (LED_BUILTIN, HIGH); delay (500 ); digitalWrite (LED_BUILTIN, LOW); } else { digitalWrite (LED_BUILTIN, HIGH); delay (100 ); digitalWrite (LED_BUILTIN, LOW); } delay (100 ); } } delay (1000 ); digitalWrite (LED_BUILTIN, LOW); }
实现效果 总结 arduino 的编程语言虽说用的是 C/C++,但也有一些 “独有” 的函数,比如我这里用到的 charAt() 用于提取字符串指定位置的字符。编程的时候需要看看文档,有没有更简单的实现方式,毕竟着块板子的内存容量就 32k。
完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 void setup () { Serial.begin (9600 ); pinMode (LED_BUILTIN, OUTPUT); } void loop () { String text = "sos" ; text.toUpperCase (); String moss; for (int i=0 ; i<text.length (); i++){ char word = text.charAt (i); switch (word){ case 'A' :moss = ".-" ;break ; case 'B' :moss = "-..." ;break ; case 'C' :moss = "-.-." ;break ; case 'D' :moss = "-.." ;break ; case 'E' :moss = "." ;break ; case 'F' :moss = "..-." ;break ; case 'G' :moss = "--." ;break ; case 'H' :moss = "...." ;break ; case 'I' :moss = ".." ;break ; case 'J' :moss = ".---" ;break ; case 'K' :moss = "-.-" ;break ; case 'L' :moss = ".-.." ;break ; case 'M' :moss = "--" ;break ; case 'N' :moss = "-." ;break ; case 'O' :moss = "---" ;break ; case 'P' :moss = ".--." ;break ; case 'Q' :moss = "--.-" ;break ; case 'R' :moss = ".-." ;break ; case 'S' :moss = "..." ;break ; case 'T' :moss = "-" ;break ; case 'U' :moss = "..-" ;break ; case 'V' :moss = "...-" ;break ; case 'W' :moss = ".--" ;break ; case 'X' :moss = "-..-" ;break ; case 'Y' :moss = "-.--" ;break ; case 'Z' :moss = "--.." ;break ; case '0' :moss = "-----" ;break ; case '1' :moss = ".----" ;break ; case '2' :moss = "..---" ;break ; case '3' :moss = "...--" ;break ; case '4' :moss = "....-" ;break ; case '5' :moss = "....." ;break ; case '6' :moss = "-...." ;break ; case '7' :moss = "--..." ;break ; case '8' :moss = "---.." ;break ; case '9' :moss = "----." ;break ; case '.' :moss = ".-.-.-" ;break ; case ':' :moss = "---..." ;break ; case ',' :moss = "--..--" ;break ; case ';' :moss = "-.-.-." ;break ; case '?' :moss = "..--.." ;break ; case '=' :moss = "-...-" ;break ; case '/' :moss = "-..-." ;break ; case '!' :moss = "-.-.--" ;break ; case '-' :moss = "-....-" ;break ; case '_' :moss = "..--.-" ;break ; case '"' :moss = ".-..-." ;break ; case '(' :moss = "-.--." ;break ; case ')' :moss = "-.--.-" ;break ; case '$' :moss = "...-..-" ;break ; case '&' :moss = "...." ;break ; case '@' :moss = ".--.-." ;break ; } Serial.println (moss); for (int j=0 ;j<moss.length ();j++){ if (moss.charAt (j) == '-' ){ digitalWrite (LED_BUILTIN, HIGH); delay (500 ); digitalWrite (LED_BUILTIN, LOW); } else { digitalWrite (LED_BUILTIN, HIGH); delay (100 ); digitalWrite (LED_BUILTIN, LOW); } delay (100 ); } } delay (1000 ); digitalWrite (LED_BUILTIN, LOW); }