arduino_examples.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-12-10 Meco Man first version
  9. */
  10. #include <Arduino.h>
  11. #include <rtthread.h>
  12. #include <SPI.h>
  13. #include <Wire.h>
  14. #define ARDU_TEST_GPIO
  15. #define ARDU_TEST_PWM
  16. //#define ARDU_TEST_ADAFRUIT_I2C
  17. //#define ARDU_TEST_ADAFRUIT_SPI
  18. //#define ARDU_TEST_SPI
  19. //#define ARDU_TEST_I2C
  20. #define ARDU_TEST_INT
  21. #define ARDU_TEST_DIGITAL_READ
  22. //#define ARDU_TEST_ADC_READ
  23. //#define ARDU_TEST_BMI160_PKG
  24. #if defined(ARDU_TEST_ADAFRUIT_I2C) || defined(ARDU_TEST_ADAFRUIT_SPI)
  25. #include <Adafruit_BusIO_Register.h>
  26. #endif
  27. #ifdef ARDU_TEST_ADAFRUIT_I2C
  28. #include <Adafruit_I2CDevice.h>
  29. Adafruit_I2CDevice i2c_dev(0x2D);
  30. Adafruit_BusIO_Register i2c_reg(&i2c_dev, 0x6261, 2, 0, 2);
  31. #endif
  32. #ifdef ARDU_TEST_ADAFRUIT_SPI
  33. #include "Adafruit_SPIDevice.h"
  34. Adafruit_SPIDevice spi_dev(D10, 100000);
  35. #endif
  36. #ifdef ARDU_TEST_BMI160_PKG
  37. #include "DFRobot_BMI160.h"
  38. DFRobot_BMI160 *bmi160;
  39. #endif
  40. static char buf[16] = {"test"};
  41. static char buf2[16] = {"AB"};
  42. void test_int()
  43. {
  44. Serial.println("Interrupt Triggered\r\n");
  45. }
  46. void setup(void)
  47. {
  48. /* put your setup code here, to run once: */
  49. //串口
  50. Serial.write("Hello from Arduino\r\n");
  51. #ifdef ARDU_TEST_GPIO //数字管脚输出
  52. pinMode(D2, OUTPUT);
  53. pinMode(D4, OUTPUT);
  54. digitalWrite(D4, 1);
  55. pinMode(D7, OUTPUT);
  56. digitalWrite(D7, 0);
  57. pinMode(D18, OUTPUT); //LED6
  58. #endif
  59. pinMode(D21, INPUT);
  60. #ifdef ARDU_TEST_PWM //测试PWM输出
  61. analogWriteFrequency(10);
  62. analogWrite(D3, 80);
  63. analogWrite(D5, 127);
  64. analogWrite(D6, 200);
  65. #endif
  66. #ifdef ARDU_TEST_ADAFRUIT_I2C //ADAFRUIT I2C
  67. i2c_dev.begin();
  68. #endif
  69. #ifdef ARDU_TEST_ADAFRUIT_SPI //ADAFRUIT SPI
  70. spi_dev.begin();
  71. #endif
  72. #ifdef ARDU_TEST_I2C //I2C
  73. Wire.begin();
  74. #endif
  75. #ifdef ARDU_TEST_SPI //SPI
  76. SPI.begin();
  77. SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE1));
  78. pinMode(D10, OUTPUT);
  79. digitalWrite(D10, HIGH);
  80. #endif
  81. #ifdef ARDU_TEST_INT //中断输入
  82. attachInterrupt(digitalPinToInterrupt(D24), test_int, FALLING);
  83. #endif
  84. #ifdef ARDU_TEST_DIGITAL_READ //数字管脚输入
  85. pinMode(D20,INPUT);
  86. pinMode(D21,INPUT);
  87. pinMode(D22,INPUT);
  88. pinMode(D23,INPUT);
  89. #endif
  90. #ifdef ARDU_TEST_BMI160_PKG
  91. bmi160=new DFRobot_BMI160();
  92. int result= bmi160->I2cInit();
  93. if (result)
  94. {
  95. rt_kprintf("BMI160 Init failed.%d\r\n",result);
  96. }
  97. bmi160->setStepPowerMode(bmi160->stepNormalPowerMode);
  98. #endif
  99. }
  100. void loop(void)
  101. {
  102. /* put your main code here, to run repeatedly: */
  103. static int count = 0;
  104. count++;
  105. #ifdef ARDU_TEST_GPIO
  106. digitalWrite(D2, 1);
  107. digitalWrite(D18, 0);
  108. #endif
  109. delay(250);
  110. #ifdef ARDU_TEST_GPIO
  111. digitalWrite(D2, 0);
  112. digitalWrite(D18, 1);
  113. #endif
  114. delay(250);
  115. #ifdef ARDU_TEST_ADC_READ
  116. int val = analogRead(A0 + count % 6);
  117. rt_kprintf("A%d=%d\r\n", count % 6, val);
  118. #endif
  119. #ifdef ARDU_TEST_ADAFRUIT_I2C
  120. i2c_dev.write((uint8_t *)buf, strlen(buf), true, (uint8_t *)buf2, 2);
  121. i2c_reg.write((uint8_t *)buf, 4);
  122. #endif
  123. #ifdef ARDU_TEST_ADAFRUIT_SPI
  124. spi_dev.beginTransactionWithAssertingCS();
  125. spi_dev.transfer((uint8_t *)buf, strlen(buf));
  126. spi_dev.endTransactionWithDeassertingCS();
  127. #endif
  128. #ifdef ARDU_TEST_I2C
  129. Wire.beginTransmission(0x2D);
  130. Wire.write((uint8_t *)buf, strlen(buf));
  131. Wire.endTransmission();
  132. #endif
  133. #ifdef ARDU_TEST_SPI
  134. digitalWrite(D10, LOW);
  135. SPI.transfer((uint8_t *)buf, 4);
  136. digitalWrite(D10, HIGH);
  137. buf[4] = 0;
  138. Serial.print(buf);
  139. #endif
  140. #ifdef ARDU_TEST_DIGITAL_READ
  141. if (digitalRead(D20) == LOW) {
  142. Serial.println("UP");
  143. }
  144. if (digitalRead(D21) == LOW) {
  145. Serial.println("DOWN");
  146. }
  147. if (digitalRead(D22) == LOW) {
  148. Serial.println("LEFT");
  149. }
  150. if (digitalRead(D23) == LOW) {
  151. Serial.println("RIGHT");
  152. }
  153. #endif
  154. #ifdef ARDU_TEST_BMI160_PKG
  155. int16_t data[16]={0,0,0};
  156. int result=bmi160->getAccelData(data);
  157. rt_kprintf("Accel[R=%d]:%d,%d,%d\r\n",result,data[0],data[1],data[2]);
  158. result=bmi160->getAccelGyroData(data);
  159. rt_kprintf("Gyro [R=%d]:%d,%d,%d\r\n",result,data[0],data[1],data[2]);
  160. #endif
  161. }