A můžeš prosím poradit jak? Program běží na arduinu.
kód:
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t
//Pin connected to ST_CP of 74HC595
int latchPin = 8;
//Pin connected to SH_CP of 74HC595
int clockPin = 12;
////Pin connected to DS of 74HC595
int dataPin = 13;
int j = 0; int i = 0; int h = 0;
int g = 0; int k = 0; int l = 0;
int hours = 0;
int minutes = 0;
int seconds = 0;
//holders for infromation you're going to pass to shifting function
byte dataONE;
byte dataTWO;
byte dataTRE;
byte dataFOUR;
byte dataFIVE;
byte dataSIX;
byte dataArray[10];
byte dataArrayd[10]; //dot on
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(16, OUTPUT); //RTC on arduino GND
digitalWrite(16, LOW); //RTC on arduino GND
pinMode(17, OUTPUT); //RTC on arduino VCC
digitalWrite(17, HIGH); //RTC on arduino VCC
Serial.begin(9600);
setSyncProvider(RTC.get); // the function to get the time from the RTC
Wire.begin();
//Arduino doesn't seem to have a way to write binary straight into the code
//so these values are in HEX. Decimal would have been fine, too.
dataArray[0] = 0x3F;
dataArray[1] = 0x06;
dataArray[2] = 0x5B;
dataArray[3] = 0x4F;
dataArray[4] = 0x66;
dataArray[5] = 0x6D;
dataArray[6] = 0x7D;
dataArray[7] = 0x07;
dataArray[8] = 0x7F;
dataArray[9] = 0x6F;
//with dot on
dataArrayd[0] = 0xBF;
dataArrayd[1] = 0x86;
dataArrayd[2] = 0xDB;
dataArrayd[3] = 0xcF;
dataArrayd[4] = 0xE6;
dataArrayd[5] = 0xED;
dataArrayd[6] = 0xFD;
dataArrayd[7] = 0x87;
dataArrayd[8] = 0xFF;
dataArrayd[9] = 0xEF;
}
// digital clock display of the time
Serial.print(hour());
Serial.print(':');
Serial.print(minute());
Serial.print(':');
Serial.print(second());
Serial.println();
// Serial.print(now.hour()); // uncomment to debug
// Serial.print(':'); // uncomment to debug
// Serial.print(now.minute()); // uncomment to debug
// Serial.print(':'); // uncomment to debug
// Serial.println(now.second()); // uncomment to debug
j = seconds % 10;
i = seconds / 10;
h = minutes % 10;
g = minutes / 10;
k = hours % 10;
l = hours / 10;
//load the light sequence you want from array
dataSIX = dataArray[j];
dataFIVE = dataArray[i];
dataFOUR = dataArrayd[h];
dataTRE = dataArray[g];
dataTWO = dataArrayd[k];
dataONE = dataArray[l];
digitalWrite(latchPin, 0);
//move 'em out
shiftOut(dataPin, clockPin, dataSIX);
shiftOut(dataPin, clockPin, dataFIVE);
shiftOut(dataPin, clockPin, dataFOUR);
shiftOut(dataPin, clockPin, dataTRE);
shiftOut(dataPin, clockPin, dataTWO);
shiftOut(dataPin, clockPin, dataONE);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 1);
delay(500);
}
// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {
// This shifts 8 bits out MSB first,
//on the rising edge of the clock,
//clock idles low
//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);
//clear everything out just in case to
//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);
//for each bit in the byte myDataOuti?1
//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);
//if the value passed to myDataOut and a bitmask result
// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.