<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=Print.cpp</id>
		<title>Print.cpp - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.ywrobot.net/index.php?action=history&amp;feed=atom&amp;title=Print.cpp"/>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=Print.cpp&amp;action=history"/>
		<updated>2026-05-14T11:40:47Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://wiki.ywrobot.net/index.php?title=Print.cpp&amp;diff=76&amp;oldid=prev</id>
		<title>YWrobot WM：创建页面，内容为“&lt;pre style=&quot;color:blue&quot;&gt; /*  Print.cpp - Base class that provides print() and println()  Copyright (c) 2008 David A. Mellis.  All right reserved.    This library is...”</title>
		<link rel="alternate" type="text/html" href="http://wiki.ywrobot.net/index.php?title=Print.cpp&amp;diff=76&amp;oldid=prev"/>
				<updated>2016-04-25T02:10:55Z</updated>
		
		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt; /*  Print.cpp - Base class that provides print() and println()  Copyright (c) 2008 David A. Mellis.  All right reserved.    This library is...”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre style=&amp;quot;color:blue&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
 Print.cpp - Base class that provides print() and println()&lt;br /&gt;
 Copyright (c) 2008 David A. Mellis.  All right reserved.&lt;br /&gt;
 &lt;br /&gt;
 This library is free software; you can redistribute it and/or&lt;br /&gt;
 modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
 License as published by the Free Software Foundation; either&lt;br /&gt;
 version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
 &lt;br /&gt;
 This library is distributed in the hope that it will be useful,&lt;br /&gt;
 but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
 Lesser General Public License for more details.&lt;br /&gt;
 &lt;br /&gt;
 You should have received a copy of the GNU Lesser General Public&lt;br /&gt;
 License along with this library; if not, write to the Free Software&lt;br /&gt;
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
 &lt;br /&gt;
 Modified 23 November 2006 by David A. Mellis&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;quot;Arduino.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;Print.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Public Methods //////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
/* default implementation: may be overridden */&lt;br /&gt;
size_t Print::write(const uint8_t *buffer, size_t size)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = 0;&lt;br /&gt;
  while (size--) {&lt;br /&gt;
    n += write(*buffer++);&lt;br /&gt;
  }&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(const __FlashStringHelper *ifsh)&lt;br /&gt;
{&lt;br /&gt;
  const char PROGMEM *p = (const char PROGMEM *)ifsh;&lt;br /&gt;
  size_t n = 0;&lt;br /&gt;
  while (1) {&lt;br /&gt;
    unsigned char c = pgm_read_byte(p++);&lt;br /&gt;
    if (c == 0) break;&lt;br /&gt;
    n += write(c);&lt;br /&gt;
  }&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(const String &amp;amp;s)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = 0;&lt;br /&gt;
  for (uint16_t i = 0; i &amp;lt; s.length(); i++) {&lt;br /&gt;
    n += write(s[i]);&lt;br /&gt;
  }&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(const char str[])&lt;br /&gt;
{&lt;br /&gt;
  return write(str);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(char c)&lt;br /&gt;
{&lt;br /&gt;
  return write(c);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(unsigned char b, int base)&lt;br /&gt;
{&lt;br /&gt;
  return print((unsigned long) b, base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(int n, int base)&lt;br /&gt;
{&lt;br /&gt;
  return print((long) n, base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(unsigned int n, int base)&lt;br /&gt;
{&lt;br /&gt;
  return print((unsigned long) n, base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(long n, int base)&lt;br /&gt;
{&lt;br /&gt;
  if (base == 0) {&lt;br /&gt;
    return write(n);&lt;br /&gt;
  } else if (base == 10) {&lt;br /&gt;
    if (n &amp;lt; 0) {&lt;br /&gt;
      int t = print('-');&lt;br /&gt;
      n = -n;&lt;br /&gt;
      return printNumber(n, 10) + t;&lt;br /&gt;
    }&lt;br /&gt;
    return printNumber(n, 10);&lt;br /&gt;
  } else {&lt;br /&gt;
    return printNumber(n, base);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(unsigned long n, int base)&lt;br /&gt;
{&lt;br /&gt;
  if (base == 0) return write(n);&lt;br /&gt;
  else return printNumber(n, base);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(double n, int digits)&lt;br /&gt;
{&lt;br /&gt;
  return printFloat(n, digits);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(const __FlashStringHelper *ifsh)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(ifsh);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::print(const Printable&amp;amp; x)&lt;br /&gt;
{&lt;br /&gt;
  return x.printTo(*this);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(void)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print('\r');&lt;br /&gt;
  n += print('\n');&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(const String &amp;amp;s)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(s);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(const char c[])&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(c);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(char c)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(c);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(unsigned char b, int base)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(b, base);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(int num, int base)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(num, base);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(unsigned int num, int base)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(num, base);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(long num, int base)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(num, base);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(unsigned long num, int base)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(num, base);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(double num, int digits)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(num, digits);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::println(const Printable&amp;amp; x)&lt;br /&gt;
{&lt;br /&gt;
  size_t n = print(x);&lt;br /&gt;
  n += println();&lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Private Methods /////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
size_t Print::printNumber(unsigned long n, uint8_t base) {&lt;br /&gt;
  char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.&lt;br /&gt;
  char *str = &amp;amp;buf[sizeof(buf) - 1];&lt;br /&gt;
&lt;br /&gt;
  *str = '\0';&lt;br /&gt;
&lt;br /&gt;
  // prevent crash if called with base == 1&lt;br /&gt;
  if (base &amp;lt; 2) base = 10;&lt;br /&gt;
&lt;br /&gt;
  do {&lt;br /&gt;
    unsigned long m = n;&lt;br /&gt;
    n /= base;&lt;br /&gt;
    char c = m - base * n;&lt;br /&gt;
    *--str = c &amp;lt; 10 ? c + '0' : c + 'A' - 10;&lt;br /&gt;
  } while(n);&lt;br /&gt;
&lt;br /&gt;
  return write(str);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
size_t Print::printFloat(double number, uint8_t digits) &lt;br /&gt;
{ &lt;br /&gt;
  size_t n = 0;&lt;br /&gt;
  &lt;br /&gt;
  if (isnan(number)) return print(&amp;quot;nan&amp;quot;);&lt;br /&gt;
  if (isinf(number)) return print(&amp;quot;inf&amp;quot;);&lt;br /&gt;
  if (number &amp;gt; 4294967040.0) return print (&amp;quot;ovf&amp;quot;);  // constant determined empirically&lt;br /&gt;
  if (number &amp;lt;-4294967040.0) return print (&amp;quot;ovf&amp;quot;);  // constant determined empirically&lt;br /&gt;
  &lt;br /&gt;
  // Handle negative numbers&lt;br /&gt;
  if (number &amp;lt; 0.0)&lt;br /&gt;
  {&lt;br /&gt;
     n += print('-');&lt;br /&gt;
     number = -number;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Round correctly so that print(1.999, 2) prints as &amp;quot;2.00&amp;quot;&lt;br /&gt;
  double rounding = 0.5;&lt;br /&gt;
  for (uint8_t i=0; i&amp;lt;digits; ++i)&lt;br /&gt;
    rounding /= 10.0;&lt;br /&gt;
  &lt;br /&gt;
  number += rounding;&lt;br /&gt;
&lt;br /&gt;
  // Extract the integer part of the number and print it&lt;br /&gt;
  unsigned long int_part = (unsigned long)number;&lt;br /&gt;
  double remainder = number - (double)int_part;&lt;br /&gt;
  n += print(int_part);&lt;br /&gt;
&lt;br /&gt;
  // Print the decimal point, but only if there are digits beyond&lt;br /&gt;
  if (digits &amp;gt; 0) {&lt;br /&gt;
    n += print(&amp;quot;.&amp;quot;); &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Extract digits from the remainder one at a time&lt;br /&gt;
  while (digits-- &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    remainder *= 10.0;&lt;br /&gt;
    int toPrint = int(remainder);&lt;br /&gt;
    n += print(toPrint);&lt;br /&gt;
    remainder -= toPrint; &lt;br /&gt;
  } &lt;br /&gt;
  &lt;br /&gt;
  return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>YWrobot WM</name></author>	</entry>

	</feed>