Вывод информации с SD на TM1637

byCthulhu
Offline
Зарегистрирован: 19.06.2016

Здравствуйте форумчане, появилась такая проблема, хотел написать программу где выводит время на TM1637 с файла test.txt но толком у меня не получается. А вот и собственно код:

#include <SPI.h>
#include <SD.h>
#include <TimerOne.h>
#include "TM1637.h"
#define ON 1
#define OFF 0


File myFile;

int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};
unsigned char ClockPoint = 1;
unsigned char Update;
unsigned char halfsecond = 0;
unsigned char second;
unsigned char minute = 0;
unsigned char hour = 12;
unsigned char s;


#define CLK 7   
#define DIO 6
TM1637 tm1637(CLK,DIO);

void setup()
 
 tm1637.set();
  tm1637.init();
  Timer1.initialize(500000);
  Timer1.attachInterrupt(TimingISR);

{
  Serial.begin(9600);
  while (!Serial) {
  }

  Serial.print("Initializing SD card...");

  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");


  myFile = SD.open("test.txt");
  if (myFile) {
    Serial.println("test.txt:");

    while (myFile.available()) {
      s = myFile.read();
      hour = s;
      minute = s;
      s = s - 1;
      Serial.write(s - 1);
    }
    myFile.close();
  } else {
    Serial.println("error opening test.txt");
  }
}
void loop()
{
  if(Update == ON)
  {
    TimeUpdate();
    tm1637.display(TimeDisp);
  }
  
}
void TimingISR()
{
  //halfsecond ++;
  Update = ON;

  ClockPoint = (~ClockPoint) & 0x01;
}
void TimeUpdate(void)
{
  if(ClockPoint)tm1637.point(POINT_ON);
  else tm1637.point(POINT_OFF); 
  TimeDisp[0] = hour / 10;
  TimeDisp[1] = hour % 10;
  TimeDisp[2] = minute / 10;
  TimeDisp[3] = minute % 10;
  Update = OFF;
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

byCthulhu пишет:

Здравствуйте форумчане, появилась такая проблема, хотел написать программу где выводит время на TM1637 с файла test.txt но толком у меня не получается. А вот и собственно код:

Принято к сведению.

Когда (и если) у Вас появятся вопросы, просьбы, предложения и т.п., обращайтесь.

byCthulhu
Offline
Зарегистрирован: 19.06.2016

Ой, пардон, вопрос был таков, как вывести время из файла в TM1637?
В файле я указал 10:05 но в TM1637 выдало 10:10

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

byCthulhu пишет:

Ой, пардон, вопрос был таков, как вывести время из файла в TM1637?
В файле я указал 10:05 но в TM1637 выдало 10:10

Вопрос неверный. Задача разбивается на две: 1) ввести время из файла в переменные; и 2) вывести из переменных на TM1637. Вы знаете с какой из двух подзадач у Вас проблема? Для начала выясните это.

Насколько я понимаю, за ввод времени из файла у Вас отвечают строки 50-60. Правильно?

Так поставьте же после строки 60 печать введённых переменных hour и minute в Serial, чтобы убедиться, что они введены правильно. И не убирайте эту печать пока не отладите всё полностью. Хоть будете видеть, что в чём Ваша проблема - во вводе или в выводе! (блин, и почему все новички так любят вслепую работать?)

Как только Вы поставите печать, о которой я говорю, Вы увидите, что в переменных  hour и minute содержится "цена на прошлогодний овёс", а вовсе не то, что Вы ожидаете. Так вот, начните с того, что отладьте это место - добейтесь, чтобы в них было то, что Вам нужно. Пока там не будет печататься то, что нужно, о TM1637 даже не думайте. Нельзя вывести то, чего Вы не можете толком получить.

 

byCthulhu
Offline
Зарегистрирован: 19.06.2016

Спасибо, была проблема с переменными, Ардуино оказывается все считал по байтам а я писал как программу на C++.
А теперь появилась такая проблема. Не хватает энергии на 6 модулей TM1637. Когда подключаю 4 модуля то все прекрасно работает и отображается время а когда подключаю 6 модулей то даж SD карта перестаёт видеть флешку . Нужно ли покупать какой нибудь дополнительный модуль для Ардуино или все зависит от блока питания?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Зависит от схемы по которой Вы их питаете. Их надо питать отдельно от Ардуино (не с её 5/3,3 вольта, а отдельно - только земля общая), тогда просто ставьте достаточный блок питания и  всё будет нормально.