<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it">
	<id>https://www.raspibo.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Epaperradioram.ino</id>
	<title>Epaperradioram.ino - Cronologia</title>
	<link rel="self" type="application/atom+xml" href="https://www.raspibo.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Epaperradioram.ino"/>
	<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Epaperradioram.ino&amp;action=history"/>
	<updated>2026-05-08T22:58:52Z</updated>
	<subtitle>Cronologia della pagina su questo sito</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://www.raspibo.org/wiki/index.php?title=Epaperradioram.ino&amp;diff=780&amp;oldid=prev</id>
		<title>Renzo: Creata pagina con '&lt;pre&gt; // Copyright 2013 Pervasive Displays, Inc. // Modified for the Fridge Magnet Demo. Renzo Davoli 2013 // // Licensed under the Apache License, Version 2.0 (the &quot;License&quot;)...'</title>
		<link rel="alternate" type="text/html" href="https://www.raspibo.org/wiki/index.php?title=Epaperradioram.ino&amp;diff=780&amp;oldid=prev"/>
		<updated>2013-05-16T14:25:39Z</updated>

		<summary type="html">&lt;p&gt;Creata pagina con &amp;#039;&amp;lt;pre&amp;gt; // Copyright 2013 Pervasive Displays, Inc. // Modified for the Fridge Magnet Demo. Renzo Davoli 2013 // // Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;)...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nuova pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
// Copyright 2013 Pervasive Displays, Inc.&lt;br /&gt;
// Modified for the Fridge Magnet Demo. Renzo Davoli 2013&lt;br /&gt;
//&lt;br /&gt;
// Licensed under the Apache License, Version 2.0 (the &amp;quot;License&amp;quot;);&lt;br /&gt;
// you may not use this file except in compliance with the License.&lt;br /&gt;
// You may obtain a copy of the License at:&lt;br /&gt;
//&lt;br /&gt;
//   http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt;
//&lt;br /&gt;
// Unless required by applicable law or agreed to in writing,&lt;br /&gt;
// software distributed under the License is distributed on an&lt;br /&gt;
// &amp;quot;AS IS&amp;quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either&lt;br /&gt;
// express or implied.  See the License for the specific language&lt;br /&gt;
// governing permissions and limitations under the License.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// This program is to illustrate the display operation as described in&lt;br /&gt;
// the datasheets.  The code is in a simple linear fashion and all the&lt;br /&gt;
// delays are set to maximum, but the SPI clock is set lower than its&lt;br /&gt;
// limit.  Therfore the display sequence will be much slower than&lt;br /&gt;
// normal and all of the individual display stages be clearly visible&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// Embedded Artists has modified Pervasive Display Inc's demo application&lt;br /&gt;
// to run on the 2.7 inch E-paper Display module (EA-LCD-009&lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
#include &amp;lt;ctype.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;EPD.h&amp;gt;&lt;br /&gt;
#include &amp;lt;LM75A.h&amp;gt;&lt;br /&gt;
#include &amp;lt;JeeLib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define EPD_SIZE EPD_2_7&lt;br /&gt;
&lt;br /&gt;
// current version number&lt;br /&gt;
#define DEMO_VERSION &amp;quot;RR&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Arduino IO layout&lt;br /&gt;
const int Pin_PANEL_ON = 9; // This has been remapped to run on a JeeNode!&lt;br /&gt;
const int Pin_BORDER = 3;&lt;br /&gt;
const int Pin_DISCHARGE = 4;&lt;br /&gt;
const int Pin_PWM = 5;&lt;br /&gt;
const int Pin_RESET = 6;&lt;br /&gt;
const int Pin_BUSY = 7;&lt;br /&gt;
const int Pin_EPD_CS = 8;&lt;br /&gt;
const int Pin_RED_LED = 13;&lt;br /&gt;
const int Pin_RAM_CS = 15; // Enable pin for the RAM&lt;br /&gt;
&lt;br /&gt;
// LED anode through resistor to I/O pin&lt;br /&gt;
// LED cathode to Ground&lt;br /&gt;
#define LED_ON  HIGH&lt;br /&gt;
#define LED_OFF LOW&lt;br /&gt;
&lt;br /&gt;
// pre-processor convert to string&lt;br /&gt;
#define MAKE_STRING1(X) #X&lt;br /&gt;
#define MAKE_STRING(X) MAKE_STRING1(X)&lt;br /&gt;
&lt;br /&gt;
// define the E-Ink display&lt;br /&gt;
EPD_Class EPD(EPD_SIZE, Pin_PANEL_ON, Pin_BORDER, Pin_DISCHARGE, Pin_PWM, Pin_RESET, Pin_BUSY, Pin_EPD_CS, SPI);&lt;br /&gt;
LM75A_Class LM75A;&lt;br /&gt;
&lt;br /&gt;
//SRAM opcodes&lt;br /&gt;
#define RDSR 5&lt;br /&gt;
#define WRSR 1&lt;br /&gt;
#define READ 3&lt;br /&gt;
#define WRITE 2&lt;br /&gt;
&lt;br /&gt;
uint8_t SpiRAMRead8(uint16_t address) {&lt;br /&gt;
  uint8_t read_byte;&lt;br /&gt;
  digitalWrite(Pin_RAM_CS, LOW);&lt;br /&gt;
  delayMicroseconds(20);&lt;br /&gt;
  SPI.transfer(READ);&lt;br /&gt;
  SPI.transfer((char)(address &amp;gt;&amp;gt; 8));&lt;br /&gt;
  SPI.transfer((char)address);&lt;br /&gt;
  read_byte = SPI.transfer(0xFF);&lt;br /&gt;
  digitalWrite(Pin_RAM_CS, HIGH);&lt;br /&gt;
  delayMicroseconds(20);&lt;br /&gt;
  return read_byte;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SpiRAMRead(void *buffer, uint32_t address, uint16_t length) {&lt;br /&gt;
  uint8_t *p = (uint8_t *)buffer;&lt;br /&gt;
  for (uint16_t i=0; i&amp;lt;length; i++)&lt;br /&gt;
    p[i]=SpiRAMRead8(address+i);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SpiRAMWrite8(uint16_t address, uint8_t data_byte) {&lt;br /&gt;
  digitalWrite(Pin_RAM_CS, LOW);&lt;br /&gt;
  SPI.transfer(WRITE);&lt;br /&gt;
  SPI.transfer((char)(address &amp;gt;&amp;gt; 8));&lt;br /&gt;
  SPI.transfer((char)address);&lt;br /&gt;
  SPI.transfer(data_byte);&lt;br /&gt;
  digitalWrite(Pin_RAM_CS, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SpiRAMWrite(void *buffer, uint32_t address, uint16_t length) {&lt;br /&gt;
  uint8_t *p = (uint8_t *)buffer;&lt;br /&gt;
  for (uint16_t i=0; i&amp;lt;length; i++)&lt;br /&gt;
    SpiRAMWrite8(address+i,p[i]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint32_t lastupdate;&lt;br /&gt;
// I/O setup&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(Pin_RED_LED, OUTPUT);&lt;br /&gt;
  pinMode(Pin_PWM, OUTPUT);&lt;br /&gt;
  pinMode(Pin_BUSY, INPUT);&lt;br /&gt;
  pinMode(Pin_RESET, OUTPUT);&lt;br /&gt;
  pinMode(Pin_PANEL_ON, OUTPUT);&lt;br /&gt;
  pinMode(Pin_DISCHARGE, OUTPUT);&lt;br /&gt;
  pinMode(Pin_BORDER, OUTPUT);&lt;br /&gt;
  pinMode(Pin_EPD_CS, OUTPUT);&lt;br /&gt;
  pinMode(Pin_RAM_CS, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(Pin_RED_LED, LOW);&lt;br /&gt;
  digitalWrite(Pin_PWM, LOW);&lt;br /&gt;
  digitalWrite(Pin_RESET, LOW);&lt;br /&gt;
  digitalWrite(Pin_PANEL_ON, LOW);&lt;br /&gt;
  digitalWrite(Pin_DISCHARGE, LOW);&lt;br /&gt;
  digitalWrite(Pin_BORDER, LOW);&lt;br /&gt;
  digitalWrite(Pin_EPD_CS, HIGH);&lt;br /&gt;
  digitalWrite(Pin_RAM_CS, HIGH);&lt;br /&gt;
&lt;br /&gt;
  SPI.begin();&lt;br /&gt;
  SPI.setBitOrder(MSBFIRST);&lt;br /&gt;
  SPI.setDataMode(SPI_MODE0);&lt;br /&gt;
  SPI.setClockDivider(SPI_CLOCK_DIV4);&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
  for (uint32_t i=0; i&amp;lt;5808; i++)&lt;br /&gt;
    SpiRAMWrite8(i,0x00);&lt;br /&gt;
  for (uint32_t i=0; i&amp;lt;5808; i++)&lt;br /&gt;
    SpiRAMWrite8(i+5808,0xaa);&lt;br /&gt;
#if !defined(__MSP430_CPU__)&lt;br /&gt;
  // wait for USB CDC serial port to connect.  Arduino Leonardo only&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
  }&lt;br /&gt;
#endif&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  Serial.println(&amp;quot;Demo version: &amp;quot; DEMO_VERSION);&lt;br /&gt;
  Serial.println(&amp;quot;Display: &amp;quot; MAKE_STRING(EPD_SIZE));&lt;br /&gt;
  Serial.println();&lt;br /&gt;
  lastupdate=0;&lt;br /&gt;
  int temperature = LM75A.read();&lt;br /&gt;
  Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
  Serial.print(temperature);&lt;br /&gt;
  Serial.println(&amp;quot; Celsius&amp;quot;);&lt;br /&gt;
  EPD.begin(); // power up the EPD panel&lt;br /&gt;
  EPD.setFactor(temperature); // adjust for current temperature&lt;br /&gt;
  EPD.clear();&lt;br /&gt;
  EPD.end();   // power down the EPD panel&lt;br /&gt;
  // Change the nodeid and group id to support multiple fridge magnets:&lt;br /&gt;
  rf12_initialize(1, RF12_868MHZ, 100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
static int state = 0;&lt;br /&gt;
&lt;br /&gt;
// main loop&lt;br /&gt;
void loop() {&lt;br /&gt;
  uint32_t now = millis();&lt;br /&gt;
&lt;br /&gt;
  // check if there is a new packet to receive&lt;br /&gt;
  if (rf12_recvDone() &amp;amp;&amp;amp; rf12_crc == 0) {&lt;br /&gt;
    if (rf12_len == 1) {&lt;br /&gt;
      uint8_t buf[33];&lt;br /&gt;
      uint8_t i;&lt;br /&gt;
      // debugging code: show the contents of a line in RAM&lt;br /&gt;
      SpiRAMRead(buf,rf12_data[0]*33,33);&lt;br /&gt;
      Serial.print(&amp;quot;Line &amp;quot;);&lt;br /&gt;
      Serial.print(rf12_data[0]);&lt;br /&gt;
      for (i=0; i&amp;lt;33; i++) {&lt;br /&gt;
        Serial.print(&amp;quot;,&amp;quot;);&lt;br /&gt;
        Serial.print(buf[i]);&lt;br /&gt;
      }&lt;br /&gt;
      Serial.println('\n');&lt;br /&gt;
    } else {&lt;br /&gt;
      if (lastupdate == 0)&lt;br /&gt;
          lastupdate=now;&lt;br /&gt;
      SpiRAMWrite((void *)&amp;amp;(rf12_data[1]), rf12_data[0]*33, rf12_len-1);&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
      Serial.print(&amp;quot;Packet = &amp;quot;);&lt;br /&gt;
      Serial.println(rf12_len);&lt;br /&gt;
#endif&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  if (lastupdate &amp;gt; 0  &amp;amp;&amp;amp; now - lastupdate &amp;gt; 5000) {&lt;br /&gt;
    // five seconds after the first line of a new image arrived&lt;br /&gt;
    // it redraws the display contents&lt;br /&gt;
&lt;br /&gt;
    // turn off the radio during display refresh (unfortunately the SPI bus is shared&lt;br /&gt;
    rf12_sleep(0);&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
    Serial.print(now);  Serial.print(&amp;quot;&amp;lt;-&amp;gt;&amp;quot;);&lt;br /&gt;
    Serial.println(lastupdate);&lt;br /&gt;
#endif&lt;br /&gt;
    &lt;br /&gt;
    lastupdate=0;&lt;br /&gt;
&lt;br /&gt;
    int temperature = LM75A.read();&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
    Serial.print(&amp;quot;Temperature = &amp;quot;);&lt;br /&gt;
    Serial.print(temperature);&lt;br /&gt;
    Serial.println(&amp;quot; Celsius&amp;quot;);&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
    EPD.begin(); // power up the EPD panel&lt;br /&gt;
    EPD.setFactor(temperature); // adjust for current temperature&lt;br /&gt;
&lt;br /&gt;
    //erase the old image&lt;br /&gt;
    EPD.frame_cb_repeat(5808, SpiRAMRead, EPD_compensate);&lt;br /&gt;
    EPD.frame_cb_repeat(5808, SpiRAMRead, EPD_white);&lt;br /&gt;
    //show the new image&lt;br /&gt;
    EPD.frame_cb_repeat(0, SpiRAMRead, EPD_inverse);&lt;br /&gt;
    EPD.frame_cb_repeat(0, SpiRAMRead, EPD_normal);&lt;br /&gt;
    EPD.end();   // power down the EPD panel&lt;br /&gt;
    digitalWrite(Pin_EPD_CS, HIGH);&lt;br /&gt;
    //copy the new image in the old image area&lt;br /&gt;
    for (uint32_t i=0; i&amp;lt;5808; i++)&lt;br /&gt;
      SpiRAMWrite8(i+5808,SpiRAMRead8(i));&lt;br /&gt;
    //turn on the the rf12 module&lt;br /&gt;
    rf12_sleep(-1);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Renzo</name></author>
	</entry>
</feed>