极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12767|回复: 3

江湖救急!!!

[复制链接]
发表于 2016-11-27 13:15:08 | 显示全部楼层 |阅读模式
本人小白一枚,刚接触arduino,用uno+ds18b20+ds1302+nrf24l01做了一个温度计,但是一传到板子上,1602显示-127度,估计是程序出问题了。请各位大神指点一二,谢谢。程序如下:
#include "SPI.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <stdio.h>
#include <string.h>
#include <DS1302.h>
#include "SPI.h"     
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
char words;
/* 接口定义
CE(DS1302 pin5) -> Arduino D5
IO(DS1302 pin6) -> Arduino D6
SCLK(DS1302 pin7) -> Arduino D7
*/
#define ONE_WIRE_BUS 10
uint8_t CE_PIN   = 5;
uint8_t IO_PIN   = 6;
uint8_t SCLK_PIN = 7;
//LiquidCrystal lcd(12,11,5,4,3,2);  //定义脚位
LiquidCrystal_I2C lcd(0x3F,16,2);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
/* 日期变量缓存 */
char buf[50];
char day[10];
/* 串口数据缓存 */
String comdata = "";
int numdata[7] ={0}, j = 0, mark = 0;
/* 创建 DS1302 对象 */
DS1302 rtc(CE_PIN, IO_PIN, SCLK_PIN);

void print_time()
{
    /* 从 DS1302 获取当前时间 */
    Time t = rtc.time();
    /* 将星期从数字转换为名称 */
    memset(day, 0, sizeof(day));
    switch (t.day)
    {
    case 1: strcpy(day, "Sun"); break;
    case 2: strcpy(day, "Mon"); break;
    case 3: strcpy(day, "Tues"); break;
    case 4: strcpy(day, "Wednes"); break;
    case 5: strcpy(day, "Thurs"); break;
    case 6: strcpy(day, "Fri"); break;
    case 7: strcpy(day, "Satur"); break;
    }
    /* 将日期代码格式化凑成buf等待输出 */
    snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
    /* 输出日期到串口 */
    Serial.println(buf);
    lcd.setCursor(0,0);
    lcd.print(t.yr);     //年
   lcd.print("-");
    lcd.print(t.mon);     //月
    lcd.print("-");
    lcd.print(t.date);    //日
    lcd.setCursor(11,0);
    lcd.print(t.hr);     //时
    lcd.print(":");
    lcd.print(t.min);    //分
    //lcd.print(":");
    //lcd.print(t.sec);      //秒
   // lcd.setCursor(10,1);
    //lcd.print(day);       //星期
}

void setup(){
{
Serial.begin(9600);
Mirf.cePin=13;
Mirf.csnPin=12;
//以上两条语句可以用来修改引脚的位置
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();                                 
   Mirf.setTADDR((byte *)"serv1");//TADDR是你所需要发送过去的对方的接受地址,必须长度为5个BYTE
  Mirf.payload = sizeof(char);  //最大的载荷好像是31         
   Mirf.config();   
}
{
    lcd.init();        //初始化
    lcd.backlight();    //设置LCD背景等亮  
    lcd.home();
    lcd.clear();
    Serial.begin(9600);
    rtc.write_protect(false);
    rtc.halt(false);
    sensors.begin();
}}
void loop(){
while(Serial.available()>0)
{words=Serial.read();   
      Mirf.send((byte *)&words);  //强制指针类型转换 用于拆分内存中的数据 一个BYTE一个BYTE的发送

     while(Mirf.isSending())
     { }
}        
{
    /* 当串口有数据的时候,将数据拼接到变量comdata */
    while (Serial.available() > 0)
    {
        comdata += char(Serial.read());
        delay(2);
        mark = 1;
    }
    /* 以逗号分隔分解comdata的字符串,分解结果变成转换成数字到numdata[]数组 */
    if(mark == 1)
    {
        Serial.print("You inputed : ");
        Serial.println(comdata);
        for(int i = 0; i < comdata.length() ; i++)
        {
            if(comdata == ',' || comdata == 0x10 || comdata == 0x13)
            {
                j++;
            }
            else
            {
                numdata[j] = numdata[j] * 10 + (comdata - '0');
            }
        }
        /* 将转换好的numdata凑成时间格式,写入DS1302 */
        Time t(numdata[0], numdata[1], numdata[2], numdata[3], numdata[4], numdata[5], numdata[6]);
        rtc.time(t);
        mark = 0;j=0;
        /* 清空 comdata 变量,以便等待下一次输入 */
        comdata = String("");
        /* 清空 numdata */
        for(int i = 0; i < 7 ; i++) numdata=0;
    }
   }

    /* 打印当前时间 */
    print_time();
    lcd.setCursor(5,1);
    lcd.print(sensors.getTempCByIndex(0));
     lcd.print(" C");
    sensors.requestTemperatures(); // 发送命令获取温度
    delay(250);
    lcd.clear();
}
回复

使用道具 举报

 楼主| 发表于 2016-11-27 16:16:47 | 显示全部楼层
谁能帮我看看呀,多谢。
回复 支持 反对

使用道具 举报

发表于 2016-11-27 17:54:39 | 显示全部楼层
laoxu307 发表于 2016-11-27 16:16
谁能帮我看看呀,多谢。

其实你应该一步一步来调试的   先调试温度传感器  用串口打印数值出来  然后再继续调试1602显示
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-28 03:14:29 | 显示全部楼层
谢谢您,问题出在nrf24l01那一部分,但是不知如何修改,还望您和各位再指点一下。
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 05:43 , Processed in 0.041699 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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