极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: eagler8

一块扩展板完成Arduino的10类37项实验(代码+图形+仿真)

[复制链接]
 楼主| 发表于 2019-6-13 10:15:34 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 10:27:39 | 显示全部楼层
11 LED_RGB:全彩 LED 彩虹变化

  1. /*
  2. Eagler8实验程序列表
  3. 11 LED_RGB:全彩 LED 彩虹变化
  4. */

  5. #define LEDR 9
  6. #define LEDG 10
  7. #define LEDB 11
  8. int i = 0;

  9. void setup()
  10. {
  11.   pinMode(LEDG,OUTPUT);
  12.   pinMode(LEDB,OUTPUT);
  13.   pinMode(LEDR,OUTPUT);
  14. }

  15. void loop()
  16. {
  17.   analogWrite(LEDR,255);
  18.   delay(1000);    //hong
  19.   analogWrite(LEDG,120);
  20.   delay(1000);   //cheng
  21.   analogWrite(LEDR,255);
  22.   analogWrite(LEDG,220);
  23.   delay(1000);   //huang
  24.   analogWrite(LEDR,0);
  25.   analogWrite(LEDG,255);
  26.   delay(1000);   //lv  
  27.   analogWrite(LEDB,255);
  28.   delay(1000);   //qing
  29.   analogWrite(LEDG,0);
  30.   analogWrite(LEDB,255);
  31.   delay(1000);   //lan
  32.   analogWrite(LEDR,255);
  33.   analogWrite(LEDG,0);
  34.   delay(1000);   //zi
  35.   analogWrite(LEDG,255);
  36.   delay(1000);   //bai   
  37.    
  38.   analogWrite(LEDG,0);
  39.   analogWrite(LEDB,0);
  40.   analogWrite(LEDR,255);
  41.   delay(1000);   //zi   
  42.   for(i=0;i<255;i++)
  43.   {
  44.     analogWrite(LEDG,i);
  45.     delay(10);
  46.   }
  47.   for(i=255;i>0;i--)
  48.   {
  49.     analogWrite(LEDR,i);
  50.     delay(10);
  51.   }
  52.    for(i=0;i<255;i++)
  53.   {
  54.     analogWrite(LEDB,i);
  55.     delay(10);
  56.   }
  57.   for(i=255;i>0;i--)
  58.   {
  59.     analogWrite(LEDG,i);
  60.     delay(10);
  61.   }
  62.    for(i=0;i<255;i++)
  63.   {
  64.     analogWrite(LEDR,i);
  65.     delay(10);
  66.   }
  67.    for(i=0;i<255;i++)
  68.   {
  69.     analogWrite(LEDG,i);
  70.     delay(10);
  71.   }
  72.   analogWrite(LEDG,0);
  73.   analogWrite(LEDB,0);
  74.   analogWrite(LEDR,0);
  75. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 10:54:49 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 10:59:50 | 显示全部楼层
图形编程,估计与实验十相类似,差别不大
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 11:58:26 | 显示全部楼层
12 红外控制,接收红外命令控制板载LED灯亮灭

  1. /*
  2. Eagler8实验程序列表
  3. 12 红外控制,接收红外命令控制板载LED灯亮灭(1号键灭,2号键亮,控制距离1-8米,兼容市面上大部分红外遥控器)
  4. 说明:开关按键可以自己定义
  5. */

  6. #include <IRremote.h>

  7. int RECV_PIN = 8;
  8. int LED_PIN = 13;

  9. IRrecv irrecv(RECV_PIN);

  10. decode_results results;

  11. void setup()
  12. {
  13.   Serial.begin(9600);
  14.   irrecv.enableIRIn();
  15.   pinMode(LED_PIN, OUTPUT);
  16.   digitalWrite(LED_PIN, HIGH);
  17. }

  18. void loop() {
  19.   if (irrecv.decode(&results)) {
  20.     Serial.println(results.value, HEX);
  21.     if (results.value == 0xFFA25D)
  22.     {
  23.       digitalWrite(LED_PIN, LOW);
  24.     } else if (results.value == 0xFF629D)
  25.     {
  26.       digitalWrite(LED_PIN, HIGH);
  27.     }
  28.     irrecv.resume();
  29.   }
  30.   delay(100);
  31. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:02:49 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:54:42 | 显示全部楼层
任何键均可控制

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:54:54 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 14:50:15 | 显示全部楼层
13 IRrecord:串口显示读取的红外遥控代码

  1. /*
  2. Eagler8实验程序列表
  3. 13 IRrecord:串口显示读取的红外遥控代码
  4. */

  5. #include <IRremote.h>

  6. int RECV_PIN = 8;
  7. int BUTTON_PIN = 12;
  8. int STATUS_PIN = 13;

  9. IRrecv irrecv(RECV_PIN);
  10. IRsend irsend;

  11. decode_results results;

  12. void setup()
  13. {
  14.   Serial.begin(9600);
  15.   irrecv.enableIRIn(); // Start the receiver
  16.   pinMode(BUTTON_PIN, INPUT);
  17.   pinMode(STATUS_PIN, OUTPUT);
  18. }

  19. // Storage for the recorded code
  20. int codeType = -1; // The type of code
  21. unsigned long codeValue; // The code value if not raw
  22. unsigned int rawCodes[RAWBUF]; // The durations if raw
  23. int codeLen; // The length of the code
  24. int toggle = 0; // The RC5/6 toggle state

  25. // Stores the code for later playback
  26. // Most of this code is just logging
  27. void storeCode(decode_results *results) {
  28.   codeType = results->decode_type;
  29.   int count = results->rawlen;
  30.   if (codeType == UNKNOWN) {
  31.     Serial.println("Received unknown code, saving as raw");
  32.     codeLen = results->rawlen - 1;
  33.     // To store raw codes:
  34.     // Drop first value (gap)
  35.     // Convert from ticks to microseconds
  36.     // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
  37.     for (int i = 1; i <= codeLen; i++) {
  38.       if (i % 2) {
  39.         // Mark
  40.         rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
  41.         Serial.print(" m");
  42.       }
  43.       else {
  44.         // Space
  45.         rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
  46.         Serial.print(" s");
  47.       }
  48.       Serial.print(rawCodes[i - 1], DEC);
  49.     }
  50.     Serial.println("");
  51.   }
  52.   else {
  53.     if (codeType == NEC) {
  54.       Serial.print("Received NEC: ");
  55.       if (results->value == REPEAT) {
  56.         // Don't record a NEC repeat value as that's useless.
  57.         Serial.println("repeat; ignoring.");
  58.         return;
  59.       }
  60.     }
  61.     else if (codeType == SONY) {
  62.       Serial.print("Received SONY: ");
  63.     }
  64.     else if (codeType == RC5) {
  65.       Serial.print("Received RC5: ");
  66.     }
  67.     else if (codeType == RC6) {
  68.       Serial.print("Received RC6: ");
  69.     }
  70.     else {
  71.       Serial.print("Unexpected codeType ");
  72.       Serial.print(codeType, DEC);
  73.       Serial.println("");
  74.     }
  75.     Serial.println(results->value, HEX);
  76.     codeValue = results->value;
  77.     codeLen = results->bits;
  78.   }
  79. }

  80. void sendCode(int repeat) {
  81.   if (codeType == NEC) {
  82.     if (repeat) {
  83.       irsend.sendNEC(REPEAT, codeLen);
  84.       Serial.println("Sent NEC repeat");
  85.     }
  86.     else {
  87.       irsend.sendNEC(codeValue, codeLen);
  88.       Serial.print("Sent NEC ");
  89.       Serial.println(codeValue, HEX);
  90.     }
  91.   }
  92.   else if (codeType == SONY) {
  93.     irsend.sendSony(codeValue, codeLen);
  94.     Serial.print("Sent Sony ");
  95.     Serial.println(codeValue, HEX);
  96.   }
  97.   else if (codeType == RC5 || codeType == RC6) {
  98.     if (!repeat) {
  99.       // Flip the toggle bit for a new button press
  100.       toggle = 1 - toggle;
  101.     }
  102.     // Put the toggle bit into the code to send
  103.     codeValue = codeValue & ~(1 << (codeLen - 1));
  104.     codeValue = codeValue | (toggle << (codeLen - 1));
  105.     if (codeType == RC5) {
  106.       Serial.print("Sent RC5 ");
  107.       Serial.println(codeValue, HEX);
  108.       irsend.sendRC5(codeValue, codeLen);
  109.     }
  110.     else {
  111.       irsend.sendRC6(codeValue, codeLen);
  112.       Serial.print("Sent RC6 ");
  113.       Serial.println(codeValue, HEX);
  114.     }
  115.   }
  116.   else if (codeType == UNKNOWN /* i.e. raw */) {
  117.     // Assume 38 KHz
  118.     irsend.sendRaw(rawCodes, codeLen, 38);
  119.     Serial.println("Sent raw");
  120.   }
  121. }

  122. int lastButtonState;

  123. void loop() {
  124.   // If button pressed, send the code.
  125.   int buttonState = digitalRead(BUTTON_PIN);
  126.   if (lastButtonState == HIGH && buttonState == LOW) {
  127.     Serial.println("Released");
  128.     irrecv.enableIRIn(); // Re-enable receiver
  129.   }

  130.   if (buttonState) {
  131.     Serial.println("Pressed, sending");
  132.     digitalWrite(STATUS_PIN, HIGH);
  133.     sendCode(lastButtonState == buttonState);
  134.     digitalWrite(STATUS_PIN, LOW);
  135.     delay(50); // Wait a bit between retransmissions
  136.   }
  137.   else if (irrecv.decode(&results)) {
  138.     digitalWrite(STATUS_PIN, HIGH);
  139.     storeCode(&results);
  140.     irrecv.resume(); // resume receiver
  141.     digitalWrite(STATUS_PIN, LOW);
  142.   }
  143.   lastButtonState = buttonState;
  144. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 14:56:42 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 16:19:11 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 16:19:29 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 17:15:43 | 显示全部楼层
图形编程只用简单的三行程序,就能读出红外遥控器各个按键的编码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 17:16:02 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 17:30:46 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-26 22:24 , Processed in 0.055779 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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