|
本帖最后由 fsi270308 于 2017-6-27 15:45 编辑
求助,运行时(电机工作时)发生死机,运行时间不定,可能半小时,也可能几分钟,程序中加了看门狗,但是问题照旧,复位后几分钟就卡死。
单甩开电机,其它操作都是OK的;
单甩开OLED,电机工作也是正常的,也没有卡死;
arduino和电机为分开供电。
本人编程白痴,程序都是东拼西凑的,怀疑问题出在程序上,请大神不吝赐教!
已解决:
原来是OLED连接线问题,排线时候使用了一根U槽传感器的四芯线,较细,而且有1米左右,线路绕在开关电源附近;
更换了一根较粗的半米长四芯线,远离开关电源,问题解除,看门狗也不需要了。:P
用到的硬件如下:
Mega2560
BMP280模块 接线方式:I2C
OLED模块 接线方式:I2C
旋转编码器模块
12V光耦隔离继电器模块 低触发
微型真空泵2只
12V开关电源
库文件在附件。
程序如下: - #include <SPI.h>
- #include <Wire.h>
- #include <Adafruit_Sensor.h> //气压传感器库
- #include <Adafruit_BME280.h> //气压传感器库
- //#include <Adafruit_GFX.h>
- //#include <Adafruit_SSD1306.h>
- //----------------------大气压传感器本地海平面设置--------------------------------------
- #define SEALEVELPRESSURE_HPA (seaLevelPressure) //当地当天海平面大气压
- //----------------------大气压传感器接线方式定义-------------------------------------------------
- Adafruit_BME280 bme; // I2C
- //----------------------OLED屏设置------------------------------------
- /*#define OLED_RESET 4
- Adafruit_SSD1306 display(OLED_RESET);
- #define NUMFLAKES 10
- #define XPOS 0
- #define YPOS 1
- #define DELTAY 2
- #if (SSD1306_LCDHEIGHT != 64)
- #error("Height incorrect, please fix Adafruit_SSD1306.h!");
- #endif */
- int pump1 = 6;
- int pump2 = 7;
- int seaLevelPressure = 1006;
- int siAltitude = 20;
- float siAltitudeHm = 1;
- void setup() {
- //-----------气压传感器启动----------------------------------
- bme.begin();
- pumpInit();
- Serial.begin(9600);
- //display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
- //display.display();
- //display.clearDisplay();
-
- }
- void loop() {
- //----------------bme读取温湿度-----------------------------------------------------
- bme.readTemperature(); //必须读取这些值才能计算出准确的大气压
- bme.readHumidity(); //必须读取这些值才能计算出准确的大气压
- // displayHomeScreen();
- siAltitudeHm = siAltitude * 100; //显示为百米
- float a = bme.readAltitude(SEALEVELPRESSURE_HPA);
-
- //----------------bme读取温湿度-----------------------------------------------------
- bme.readTemperature(); //必须读取这些值才能计算出准确的大气压
- bme.readHumidity(); //必须读取这些值才能计算出准确的大气压
- if(a <= siAltitudeHm)
- {
- if(a < siAltitudeHm - 50)
- {
- pump1Start();
- pump2Start();
- }
- else if(a >= siAltitudeHm - 50 && a < siAltitudeHm - 5)
- {
- pump1Stop();
- pump2Start();
- }
- }
-
- else if(a >= siAltitudeHm + 5)
- {
- turnPumpOff();
- }
-
- Serial.println(bme.readAltitude(SEALEVELPRESSURE_HPA),0);
- delay(200);
- }
- void pumpInit()
- {
- pinMode(pump1, OUTPUT);
- pinMode(pump2, OUTPUT);
- digitalWrite(pump1, HIGH);
- digitalWrite(pump2, HIGH);
- }
- void pump1Start()
- {
- digitalWrite(pump1, LOW);
- }
- void pump2Start()
- {
- digitalWrite(pump2, LOW);
- }
- void pump1Stop()
- {
- digitalWrite(pump1, HIGH);
- }
- void pump2Stop()
- {
- digitalWrite(pump2, HIGH);
- }
- void turnPumpOn()
- {
- if(bme.readAltitude(SEALEVELPRESSURE_HPA),0 < siAltitudeHm-100)
- {
- pump1Start();
- pump2Start();
- }
- else if(bme.readAltitude(SEALEVELPRESSURE_HPA),0 > siAltitudeHm-100)
- {
- pump1Stop();
- pump2Start();
- }
- else if(bme.readAltitude(SEALEVELPRESSURE_HPA),0 < 0)
- {
- turnPumpOff();
- }
- else if(bme.readAltitude(SEALEVELPRESSURE_HPA),0 > 4000)
- {
- turnPumpOff();
- }
- else
- {
- turnPumpOff();
- }
- }
- void turnPumpOff()
- {
- pump1Stop();
- pump2Stop();
- }
- //---------------------主界面-------------------------------------------
- /*void displayHomeScreen()
- {
- display.setTextSize(1);
- display.clearDisplay();
- display.setTextColor(WHITE);
- display.setCursor(0, 0);
- display.print("JZ-APSD");
- display.drawFastHLine(0,10,128,WHITE);
- display.setCursor(5, 15);
- display.print("Altitude");
- display.setCursor(5+12, 25);
- display.print("(m)");
- display.setTextSize(2);
- display.setCursor(5, 35);
- display.print(bme.readAltitude(SEALEVELPRESSURE_HPA), 0);
-
- display.setTextSize(1);
- display.setCursor(65, 15);
- display.print("Pressure");
- display.setCursor(65+12, 25);
- display.print("(hpa)");
- display.setTextSize(2);
- display.setCursor(65, 35);
- display.print(bme.readPressure() / 100.0F, 0);
- display.display();
- }*/
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|