Esempio n. 1
0
void AppAnalog::loop() {
  byte h1, h2, m1, m2, m3, s1, s2, s3, d1, n1, len;
  bool h_c, m_c;

  dmd.selectFont(font8);

  h1 = time.Hour;
  m1 = time.Minute;
  s1 = time.Second;

  h_c = (h1 != HH);
  if (h_c) {
    if (HH == 99) HH = 0;
    h2 = HH;
    HH = h1;
    if (h1 > 11) h1 -= 12;
    if (h2 > 11) h2 -= 12;
    
    hourHand(h2, false);  // set off for previous time
    hourHand(h1, true);  /// set on for current time
  }

  m2 = (m1 == 0) ? 60 : m1;
  m2 = round(m2 / 5);
  if (m2 != M2) {
    m3 = M2;
    M2 = m2;
    
    minuteHand(m3, false);  // set off for previous time
    minuteHand(m2, true);  // set on for current time
  }

  m3 = (m1 % 5);
  if (m3 != M3) {
    M3 = m3;
    if (m3 == 0) dmd.drawLine(xo+1, yo+15, xo+5, yo+15, GRAPHICS_INVERSE);
    else dmd.drawLine(xo+1, yo+15, xo+m3, yo+15, GRAPHICS_NORMAL);

    // len = sprintf(buff, "%02d", m1);
    // dmd.drawString(xo+17, yo, buff, len, GRAPHICS_NORMAL);
  }

  s2 = (s1 == 0) ? 60 : s1;
  s2 = round(s2 / 5);
  if (s2 != S2) {
    s3 = S2;
    S2 = s2;
    
    secondHand(s3, false);  // set off for previous time
    secondHand(s2, true);  // set on for current time
  }

  s3 = (s1 % 5);
  if (s3 != S3) {
    S3 = s3;
    if (s3 == 0) dmd.drawLine(xo+9, yo+15, xo+13, yo+15, GRAPHICS_INVERSE);
    else dmd.drawLine(xo+14-s3, yo+15, xo+13, yo+15, GRAPHICS_NORMAL);

    // len = sprintf(buff, "%02d", s1);
    // dmd.drawString(xo+17, yo+8, buff, len, GRAPHICS_NORMAL);
  }

  // Show Month / Day
  if (h_c) {
    byte x;

    n1 = time.Month;
    d1 = time.Day;
 
    len = sprintf(buff, "%d", n1);
    x = (len == 1) ? 3 : 0;
    dmd.drawString(xo+17+x, yo, buff, len, GRAPHICS_NORMAL);
  
    len = sprintf(buff, "%d", d1);
    x = (len == 1) ? 3 : 0;
    dmd.drawString(xo+17+x, yo+8, buff, len, GRAPHICS_NORMAL);
  }
}
Esempio n. 2
0
int main()
{
	//устанавливаем уровень сглаживания
	sf::ContextSettings settings;
	settings.antialiasingLevel = 8;

	//создаем окно приложения
	sf::RenderWindow window(sf::VideoMode(screenWidth, screenHeight), "My Analog Clock", sf::Style::Close, settings);
	float windowX = float(window.getSize().x);
	float windowY = float(window.getSize().y);

	//Определяем центр окна
	sf::Vector2f windowCenter = sf::Vector2f(windowX / 2.0f, windowY / 2.0f);

	//создаем точки
	sf::CircleShape dot[60];
	createDots(dot,windowCenter);

	//создаем внешний контур
	sf::CircleShape clockCircle(clockCircleSize);

	//настраиваем внешний контур
	setCircle(&clockCircle,100, clockCircleThickness, sf::Color::Black,0, windowX / 2 + clockCircleThickness, windowY / 2 + clockCircleThickness);

	//создаем центральный круг
	sf::CircleShape centerCircle(10);

	//настраиваем центральный круг
	setCircle(&centerCircle, 100, 1, sf::Color::Yellow,1, windowX / 2, windowY / 2);

	//создаем стрелки
	sf::RectangleShape hourHand(sf::Vector2f(5, 150));
	sf::RectangleShape minuteHand(sf::Vector2f(3, 200));
	sf::RectangleShape secondsHand(sf::Vector2f(2, 220));

	//массив стрелок
	sf::RectangleShape *strelki[3];
	strelki[0] = &hourHand;
	strelki[1] = &minuteHand;
	strelki[2] = &secondsHand;

	//настройка стрелок
	setStrelki(strelki, windowCenter);

	//задний фон часов
	sf::Texture clockImage;
	if (!clockImage.loadFromFile("C:/Workshpase/Clock/fon.jpg"))
	{
		return EXIT_FAILURE;
	}
	clockCircle.setTexture(&clockImage);
	clockCircle.setTextureRect(sf::IntRect(40, 0, 500, 500));	

	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
		}

		//Поворачиваем стрелки
		moveStrelki(strelki);

		//Отрисовываем
		drawing(&window, dot, strelki, clockCircle, centerCircle);
	}

	return EXIT_SUCCESS;
}