<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Speicherplatz aktualisieren&#x2F;löschen]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich benutzen einen Arduino Microcontroller um einen Scrollenden Text anzuzeigen.</p>
<p>die loop() funktion ist die Hauptfunktion, die ausgeführt wird.</p>
<p>Wenn ich die Funktion scroll(.......) benutze, dann wird der eingegebene Text gescrollt.</p>
<p>Ich habe folgendes Problem in meinem Code:</p>
<p>wenn ich folgendes mache:<br />
char timearray[7] = &quot;&quot;;<br />
// Wertzuweisungen<br />
scroll(timearray, .....);</p>
<p>dann speichert er die Eingaben des Arrays bei jedem Durchlauf und jedesmal, wenn ich scroll mit einem Array neu aufrufe,</p>
<p>char datearray[16] = &quot;&quot;;<br />
// Wertzuweisungen<br />
scroll(datearray, ......);</p>
<p>dann zeigt es mir den inhalt vom timearray und vom datearray an, obwohl ich nur den inhalt vom datearray anzeigen wollte.</p>
<p>hingegen wenn ich</p>
<p>scroll(&quot;Text&quot;, ....)</p>
<p>schreibe, dann zeigt er mir wie gewünscht nur den eingegeben Text an.</p>
<p>Wie kann ich das machen, dass die Arrays sich nicht addieren?<br />
Muss ich den Speicherplatz freigeben, oder löschen?</p>
<p>Vielen Dank für eure Hilfe.</p>
<p>Gruss.</p>
<pre><code>// RTC
#include &quot;Wire.h&quot;
#define DS1307_ADDRESS 0x68

// Define SPI Pins
#define DATAOUT     11//MOSI MasterOutputSlaveInput (connect to --&gt; MISO of device)
#define DATAIN      12//MISO MasterInputSlaveOutput (connect to --&gt; MOSI of device)
#define SPICLOCK    13//sck
#define SLAVESELECT 10//ss

// RGB MATRIX definitions
int NUM_BOARDS = 1;
#define NUM_ROWS	8
#define NUM_COLUMNS	8
#define NUM_PIXELS	64
#define BUFFER	        4 // for 8 Matrixes = 10

// Screen Buffer
typedef struct{
  char pixel[NUM_PIXELS];
}
screen;
screen screenBuffer[BUFFER];  // Array of screens that represents the entire frame of matrices (if using a multi-board system)
screen myScreen[BUFFER];      // Array of screens used for scrolling text.

// Define the &quot;Normal&quot; 8 bit colors
#define BLACK	0
#define RED	0xE0
#define GREEN	0x1C
#define BLUE	0x03
#define ORANGE	RED|GREEN
#define MAGENTA	RED|BLUE
#define TEAL	BLUE|GREEN
#define WHITE	(RED|GREEN|BLUE)-0x60

// 8x8 font. 
const char letters[] = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //32/ --&gt; ' '
  0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x00, //33/ --&gt; !
  0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00, //34/ --&gt; &quot;
  0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00, //35/ --&gt; #
  0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00, //36/ --&gt; $
  0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00, //37/ --&gt; %
  0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00, //38/ --&gt; &amp;
  0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00, //39/ --&gt; '
  0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x00, //40/ --&gt; (
  0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00, //41/ --&gt; )
  0x00,0x14,0x08,0x3E,0x08,0x14,0x00,0x00, //42/ --&gt; *
  0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00, //43/ --&gt; +
  0x00,0x00,0x50,0x30,0x00,0x00,0x00,0x00, //44/ --&gt; ,
  0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00, //45/ --&gt; -
  0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00, //46/ --&gt; .
  0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00, //47/ --&gt; /
  0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00, //48/ --&gt; 0
  0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00, //49/ --&gt; 1
  0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00, //50/ --&gt; 2
  0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00, //51/ --&gt; 3
  0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00, //52/ --&gt; 4
  0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //53/ --&gt; 5
  0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00, //54/ --&gt; 6
  0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00, //55/ --&gt; 7
  0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //56/ --&gt; 8
  0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00, //57/ --&gt; 9
  0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x00, //58/ --&gt; :
  0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x00,  //59/ --&gt; ;
  0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00, //60/ --&gt; &lt;
  0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00, //61/ --&gt; =
  0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00, //62/ --&gt; &gt;
  0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00, //63/ --&gt; ?
  0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00, //64/ --&gt; @
  0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00, //65/ --&gt; A
  0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00, //66/ --&gt; B
  0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00, //67/ --&gt; C
  0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00, //68/ --&gt; D
  0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00, //69/ --&gt; E
  0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00, //70/ --&gt; F
  0x00,0x3E,0x41,0x49,0x49,0x3A,0x00,0x00, //71/ --&gt; G
  0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00, //72/ --&gt; H
  0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00, //73/ --&gt; I
  0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00, //74/ --&gt; J
  0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00, //75/ --&gt; K
  0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00, //76/ --&gt; L
  0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00, //77/ --&gt; M
  0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00, //78/ --&gt; N
  0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00, //79/ --&gt; O
  0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00, //80/ --&gt; P
  0x3E,0x41,0x51,0x21,0x5E,0x00,0x00,0x00, //81/ --&gt; Q
  0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00, //82/ --&gt; R
  0x00,0x46,0x49,0x49,0x49,0x31,0x00,0x00, //83/ --&gt; S
  0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00, //84/ --&gt; T
  0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00, //85/ --&gt; U
  0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00, //86/ --&gt; V
  0x00,0x3F,0x40,0x70,0x40,0x3F,0x00,0x00, //87/ --&gt; W
  0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00, //88/ --&gt; X
  0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00, //89/ --&gt; Y
  0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00, //90/ --&gt; Z
};

void setup()
{
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK, OUTPUT);
  pinMode(SLAVESELECT, OUTPUT);
  delay(10);
  digitalWrite(SLAVESELECT, HIGH); // disable RGB MATRIX
  delay(10);
  SPCR = 0b01010011;
  delay(5000);
  digitalWrite(SLAVESELECT, LOW);
  delay(10);
  spiTransfer('%');
  delay(10);
  digitalWrite(SLAVESELECT, HIGH);

  //Configure the correct number of boards
  digitalWrite(SLAVESELECT, LOW);
  delay(10);
  spiTransfer(NUM_BOARDS);
  delay(10);	
  digitalWrite(SLAVESELECT, HIGH);
  delay(10);
  Wire.begin();
  delay(5000);

}

void loop()
{
  String timestring = getTime();
  char timearray[7] = &quot;&quot;;
  timearray[0]=' ';
  timearray[6]=' ';
  for(int i=1; i&lt;6; i++){
    timearray[i]=timestring[i-1];
  }
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  free(timearray);

  String datestring = getDate();
  char datearray[16] = &quot;&quot;;
  datearray[0]=' ';
  datearray[15]=' ';
  for(int i=1; i&lt;15; i++){
    datearray[i]=datestring[i-1];
  }
  scroll(datearray, MAGENTA, 50);
  clear();
  free(datearray);

}

char spiTransfer(char value)
{
  SPDR = value;                   // Start the transmission
  while (!(SPSR &amp; (1&lt;&lt;SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}

char fillPixel(int screen, int row, int column, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((column &lt; 0) || column &gt; NUM_COLUMNS)return 0;
  if((row &lt; 0) || row &gt; NUM_ROWS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  screenBuffer[screen].pixel[row*8+column]=color;
}

char fillColumn(int screen, int column, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((column &lt; 0) || column &gt; NUM_COLUMNS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    screenBuffer[screen].pixel[column+(row*NUM_ROWS)]=color;
  }
  return 1;
}

char fillRow(int screen, int row, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((row &lt; 0) || row &gt; NUM_ROWS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int column=0; column&lt;NUM_COLUMNS; column++)
  {
    screenBuffer[screen].pixel[row*NUM_ROWS+column]=color;
  }
  return 1;	
}

char fillScreen(int screen, char color)
{
  if((screen &lt; 0) || (screen &gt; NUM_BOARDS))return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      screenBuffer[screen].pixel[row*NUM_ROWS+column]=color;
    }
  }
  return 1;
}

char fillChar(int screen, char letter, char color)
{
  int letter_offset=0;	//The position of the letter in the letters[] array.

  if((screen &lt; 0) || (screen &gt; NUM_BOARDS))return 0;
  if(color == 0x25 || color == 0x26)return 0;

  if(isalpha(letter))letter = toupper(letter);	//Convert to uppercase
  letter_offset = letter - 32;	//Find the offset in the letters[] array
  letter_offset *=8;
  if(letter == ' ')letter_offset=0;	//If we get a space or invalid character, display a space
  if(!isalpha(letter)&amp;&amp;(letter&gt;123||letter&lt;33))letter_offset=0;
  //Fill the screen with data from the letters[] array
  for(int column=0; column&lt;NUM_COLUMNS; column++)
  {
    for(int row=0; row&lt;NUM_ROWS; row++)
    {
      //Strange looking algorithm converts rows to columns and vice versa.
      if(letters[letter_offset+(7-column)] &amp; (1&lt;&lt;row))screenBuffer[screen].pixel[row*8+column]=color;
      else screenBuffer[screen].pixel[row*8+column]=BLACK;
    }
  }

  return 1;
}

void display(void)
{
  digitalWrite(SLAVESELECT, LOW);	//Select the LED matrices
  spiTransfer(0x26);				//SEnd the Start of frame character
  //Use the _num_boards parameter to determine how many frames to send
  for(int screen=0; screen&lt;NUM_BOARDS; screen++)
  {
    sendScreen(screenBuffer[screen].pixel);	//Send frame data over SPI.
  }
  digitalWrite(SLAVESELECT, HIGH);	//Unselect the LED matrices
}

void sendScreen(char * screen)
{
  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      spiTransfer(screen[(row*8)+column]);
    }
  }
}

void scrollBuffer(int speed)
{
  //This huge loop scrolls a character one column to the left each time through.
  for(int scroll = 7; scroll &gt;=0; scroll--)
  {
    for(int board = NUM_BOARDS+1; board &gt;=0; board--)
    {
      for(int row=0; row&lt;NUM_ROWS; row++)
      {
        for(int column=0; column&lt;NUM_COLUMNS; column++)
        {
          myScreen[board].pixel[row*NUM_ROWS+column]=screenBuffer[(column+scroll)/8+board].pixel[(row*NUM_ROWS)+(column+scroll)%8];
        }
      }
    }

    digitalWrite(SLAVESELECT, LOW);
    spiTransfer(0x26);
    //We start from the second index so that a character can be scrolled all the way off the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)sendScreen(myScreen[i].pixel);
    digitalWrite(SLAVESELECT, HIGH);
    delay(speed);
  }
}
//char
void scroll(char * message, char color, int speed)
{
  int messageLength=0;
  char disp[58]=&quot;&quot;;

  if(color == 0x25 || color == 0x26);
  else{

    //Precede the message with spaces so the message starts off of the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)disp[i]=' ';

    strcat(disp, message);
    //Find the length of the screen (including the spaces we added).

    messageLength=strlen(disp);

    //Scroll each character onto and off of the frame.
    for(int messageIndex=0; messageIndex&lt;messageLength; messageIndex++)
    {
      for(int screen=NUM_BOARDS+1; screen&gt;=0; screen--)
      {
        fillChar(NUM_BOARDS+1-screen, disp[messageIndex+screen], color);
      }
      scrollBuffer(speed);
    }	
  }
}

void clear(void)
{
  for(int board=0; board&lt;NUM_BOARDS; board++)
  {
    fillScreen(board, BLACK);
    //free(screenBuffer[board].pixel);
    //memset(&amp;screenBuffer[board].pixel, 0, sizeof (screen));
  }
  display();
}

//************ CLOCK FUNCTIONS *****************************************************************************************
// CONVERTERS ##########################################################################################################
byte decToBcd(byte val){
  // Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
// END: CONVERTERS #####################################################################################################
// TIME GETTERS ########################################################################################################
// GET TIME ------------------------------------------------------------------------------------------------------------
String getTime(){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  String h = hour;
  if(hour&lt;10) h = &quot;0&quot;+h;
  String m = minute;
  if(minute&lt;10) m = &quot;0&quot;+m; 
  String all = h+&quot;:&quot;+m;
  return all;
}
// END: GET TIME -------------------------------------------------------------------------------------------------------
// GET DATE ------------------------------------------------------------------------------------------------------------
String getDate(){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  String date;
  switch(weekDay){ // Weekdays in German
  case 1:
    date = &quot;MO&quot;;
    break;
  case 2:
    date = &quot;DI&quot;;
    break;
  case 3:
    date = &quot;MI&quot;;
    break;
  case 4:
    date = &quot;DO&quot;;
    break;
  case 5:
    date = &quot;FR&quot;;
    break;
  case 6:
    date = &quot;SA&quot;;
    break;
  case 7:
    date = &quot;SO&quot;;
    break;
  default: 
    break;
  }

  String monthDayString = monthDay;
  String monthString = month;

  if(monthDay&lt;10) monthDayString = &quot;0&quot;+monthDayString;
  if(month&lt;10) monthString = &quot;0&quot;+monthString;

  date = date+&quot;, &quot;+monthDayString+&quot;.&quot;+monthString+&quot;.20&quot;+year;
  return date;
}
// END: GET DATE -------------------------------------------------------------------------------------------------------
// END: TIME GETTERS ###################################################################################################
// TIME SETTERS ########################################################################################################
// CHANGE HOUR (DESIGNED FOR +-1) --------------------------------------------------------------------------------------
void changeHour(int h){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  if(hour==23) hour = 0;
  else hour = hour + h;

  setDateTime(second, minute, hour, weekDay, monthDay, month, year);  
}
// END: CHANGE HOUR ----------------------------------------------------------------------------------------------------
// CHANGE MINUTE (DESIGNED FOR +-1) ------------------------------------------------------------------------------------
void changeMinute(int m){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  if(minute==59) minute = 0;
  else minute = minute + m;

  setDateTime(second, minute, hour, weekDay, monthDay, month, year);  
}
// END: CHANGE MINUTE --------------------------------------------------------------------------------------------------
// SET TIME ------------------------------------------------------------------------------------------------------------
void setDateTime(int second, int minute, int hour, int weekDay, int day, int month, int year){

  byte s = (byte) second; //0-59
  byte m = (byte) minute; //0-59
  byte h = (byte) hour; //0-23
  byte w = (byte) weekDay; //1-7
  byte d = (byte) day; //1-31
  byte m2 = (byte) month; //1-12
  byte y  = (byte) year; //0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0); //stop Oscillator

  Wire.send(decToBcd(s));
  Wire.send(decToBcd(m));
  Wire.send(decToBcd(h));
  Wire.send(decToBcd(w));
  Wire.send(decToBcd(d));
  Wire.send(decToBcd(m2));
  Wire.send(decToBcd(y));

  Wire.send(0); //start 

  Wire.endTransmission();
}
// END: SET TIME -------------------------------------------------------------------------------------------------------
// END: TIME SETTERS ###################################################################################################
// END: ******* CLOCK FUNCTIONS ****************************************************************************************
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/289198/speicherplatz-aktualisieren-löschen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 19 Aug 2026 08:53:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289198.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Jun 2011 21:55:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 21:55:04 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich benutzen einen Arduino Microcontroller um einen Scrollenden Text anzuzeigen.</p>
<p>die loop() funktion ist die Hauptfunktion, die ausgeführt wird.</p>
<p>Wenn ich die Funktion scroll(.......) benutze, dann wird der eingegebene Text gescrollt.</p>
<p>Ich habe folgendes Problem in meinem Code:</p>
<p>wenn ich folgendes mache:<br />
char timearray[7] = &quot;&quot;;<br />
// Wertzuweisungen<br />
scroll(timearray, .....);</p>
<p>dann speichert er die Eingaben des Arrays bei jedem Durchlauf und jedesmal, wenn ich scroll mit einem Array neu aufrufe,</p>
<p>char datearray[16] = &quot;&quot;;<br />
// Wertzuweisungen<br />
scroll(datearray, ......);</p>
<p>dann zeigt es mir den inhalt vom timearray und vom datearray an, obwohl ich nur den inhalt vom datearray anzeigen wollte.</p>
<p>hingegen wenn ich</p>
<p>scroll(&quot;Text&quot;, ....)</p>
<p>schreibe, dann zeigt er mir wie gewünscht nur den eingegeben Text an.</p>
<p>Wie kann ich das machen, dass die Arrays sich nicht addieren?<br />
Muss ich den Speicherplatz freigeben, oder löschen?</p>
<p>Vielen Dank für eure Hilfe.</p>
<p>Gruss.</p>
<pre><code>// RTC
#include &quot;Wire.h&quot;
#define DS1307_ADDRESS 0x68

// Define SPI Pins
#define DATAOUT     11//MOSI MasterOutputSlaveInput (connect to --&gt; MISO of device)
#define DATAIN      12//MISO MasterInputSlaveOutput (connect to --&gt; MOSI of device)
#define SPICLOCK    13//sck
#define SLAVESELECT 10//ss

// RGB MATRIX definitions
int NUM_BOARDS = 1;
#define NUM_ROWS	8
#define NUM_COLUMNS	8
#define NUM_PIXELS	64
#define BUFFER	        4 // for 8 Matrixes = 10

// Screen Buffer
typedef struct{
  char pixel[NUM_PIXELS];
}
screen;
screen screenBuffer[BUFFER];  // Array of screens that represents the entire frame of matrices (if using a multi-board system)
screen myScreen[BUFFER];      // Array of screens used for scrolling text.

// Define the &quot;Normal&quot; 8 bit colors
#define BLACK	0
#define RED	0xE0
#define GREEN	0x1C
#define BLUE	0x03
#define ORANGE	RED|GREEN
#define MAGENTA	RED|BLUE
#define TEAL	BLUE|GREEN
#define WHITE	(RED|GREEN|BLUE)-0x60

// 8x8 font. 
const char letters[] = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //32/ --&gt; ' '
  0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x00, //33/ --&gt; !
  0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00, //34/ --&gt; &quot;
  0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00, //35/ --&gt; #
  0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00, //36/ --&gt; $
  0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00, //37/ --&gt; %
  0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00, //38/ --&gt; &amp;
  0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00, //39/ --&gt; '
  0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x00, //40/ --&gt; (
  0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00, //41/ --&gt; )
  0x00,0x14,0x08,0x3E,0x08,0x14,0x00,0x00, //42/ --&gt; *
  0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00, //43/ --&gt; +
  0x00,0x00,0x50,0x30,0x00,0x00,0x00,0x00, //44/ --&gt; ,
  0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00, //45/ --&gt; -
  0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00, //46/ --&gt; .
  0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00, //47/ --&gt; /
  0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00, //48/ --&gt; 0
  0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00, //49/ --&gt; 1
  0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00, //50/ --&gt; 2
  0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00, //51/ --&gt; 3
  0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00, //52/ --&gt; 4
  0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //53/ --&gt; 5
  0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00, //54/ --&gt; 6
  0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00, //55/ --&gt; 7
  0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //56/ --&gt; 8
  0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00, //57/ --&gt; 9
  0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x00, //58/ --&gt; :
  0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x00,  //59/ --&gt; ;
  0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00, //60/ --&gt; &lt;
  0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00, //61/ --&gt; =
  0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00, //62/ --&gt; &gt;
  0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00, //63/ --&gt; ?
  0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00, //64/ --&gt; @
  0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00, //65/ --&gt; A
  0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00, //66/ --&gt; B
  0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00, //67/ --&gt; C
  0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00, //68/ --&gt; D
  0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00, //69/ --&gt; E
  0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00, //70/ --&gt; F
  0x00,0x3E,0x41,0x49,0x49,0x3A,0x00,0x00, //71/ --&gt; G
  0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00, //72/ --&gt; H
  0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00, //73/ --&gt; I
  0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00, //74/ --&gt; J
  0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00, //75/ --&gt; K
  0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00, //76/ --&gt; L
  0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00, //77/ --&gt; M
  0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00, //78/ --&gt; N
  0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00, //79/ --&gt; O
  0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00, //80/ --&gt; P
  0x3E,0x41,0x51,0x21,0x5E,0x00,0x00,0x00, //81/ --&gt; Q
  0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00, //82/ --&gt; R
  0x00,0x46,0x49,0x49,0x49,0x31,0x00,0x00, //83/ --&gt; S
  0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00, //84/ --&gt; T
  0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00, //85/ --&gt; U
  0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00, //86/ --&gt; V
  0x00,0x3F,0x40,0x70,0x40,0x3F,0x00,0x00, //87/ --&gt; W
  0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00, //88/ --&gt; X
  0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00, //89/ --&gt; Y
  0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00, //90/ --&gt; Z
};

void setup()
{
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK, OUTPUT);
  pinMode(SLAVESELECT, OUTPUT);
  delay(10);
  digitalWrite(SLAVESELECT, HIGH); // disable RGB MATRIX
  delay(10);
  SPCR = 0b01010011;
  delay(5000);
  digitalWrite(SLAVESELECT, LOW);
  delay(10);
  spiTransfer('%');
  delay(10);
  digitalWrite(SLAVESELECT, HIGH);

  //Configure the correct number of boards
  digitalWrite(SLAVESELECT, LOW);
  delay(10);
  spiTransfer(NUM_BOARDS);
  delay(10);	
  digitalWrite(SLAVESELECT, HIGH);
  delay(10);
  Wire.begin();
  delay(5000);

}

void loop()
{
  String timestring = getTime();
  char timearray[7] = &quot;&quot;;
  timearray[0]=' ';
  timearray[6]=' ';
  for(int i=1; i&lt;6; i++){
    timearray[i]=timestring[i-1];
  }
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  free(timearray);

  String datestring = getDate();
  char datearray[16] = &quot;&quot;;
  datearray[0]=' ';
  datearray[15]=' ';
  for(int i=1; i&lt;15; i++){
    datearray[i]=datestring[i-1];
  }
  scroll(datearray, MAGENTA, 50);
  clear();
  free(datearray);

}

char spiTransfer(char value)
{
  SPDR = value;                   // Start the transmission
  while (!(SPSR &amp; (1&lt;&lt;SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}

char fillPixel(int screen, int row, int column, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((column &lt; 0) || column &gt; NUM_COLUMNS)return 0;
  if((row &lt; 0) || row &gt; NUM_ROWS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  screenBuffer[screen].pixel[row*8+column]=color;
}

char fillColumn(int screen, int column, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((column &lt; 0) || column &gt; NUM_COLUMNS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    screenBuffer[screen].pixel[column+(row*NUM_ROWS)]=color;
  }
  return 1;
}

char fillRow(int screen, int row, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((row &lt; 0) || row &gt; NUM_ROWS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int column=0; column&lt;NUM_COLUMNS; column++)
  {
    screenBuffer[screen].pixel[row*NUM_ROWS+column]=color;
  }
  return 1;	
}

char fillScreen(int screen, char color)
{
  if((screen &lt; 0) || (screen &gt; NUM_BOARDS))return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      screenBuffer[screen].pixel[row*NUM_ROWS+column]=color;
    }
  }
  return 1;
}

char fillChar(int screen, char letter, char color)
{
  int letter_offset=0;	//The position of the letter in the letters[] array.

  if((screen &lt; 0) || (screen &gt; NUM_BOARDS))return 0;
  if(color == 0x25 || color == 0x26)return 0;

  if(isalpha(letter))letter = toupper(letter);	//Convert to uppercase
  letter_offset = letter - 32;	//Find the offset in the letters[] array
  letter_offset *=8;
  if(letter == ' ')letter_offset=0;	//If we get a space or invalid character, display a space
  if(!isalpha(letter)&amp;&amp;(letter&gt;123||letter&lt;33))letter_offset=0;
  //Fill the screen with data from the letters[] array
  for(int column=0; column&lt;NUM_COLUMNS; column++)
  {
    for(int row=0; row&lt;NUM_ROWS; row++)
    {
      //Strange looking algorithm converts rows to columns and vice versa.
      if(letters[letter_offset+(7-column)] &amp; (1&lt;&lt;row))screenBuffer[screen].pixel[row*8+column]=color;
      else screenBuffer[screen].pixel[row*8+column]=BLACK;
    }
  }

  return 1;
}

void display(void)
{
  digitalWrite(SLAVESELECT, LOW);	//Select the LED matrices
  spiTransfer(0x26);				//SEnd the Start of frame character
  //Use the _num_boards parameter to determine how many frames to send
  for(int screen=0; screen&lt;NUM_BOARDS; screen++)
  {
    sendScreen(screenBuffer[screen].pixel);	//Send frame data over SPI.
  }
  digitalWrite(SLAVESELECT, HIGH);	//Unselect the LED matrices
}

void sendScreen(char * screen)
{
  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      spiTransfer(screen[(row*8)+column]);
    }
  }
}

void scrollBuffer(int speed)
{
  //This huge loop scrolls a character one column to the left each time through.
  for(int scroll = 7; scroll &gt;=0; scroll--)
  {
    for(int board = NUM_BOARDS+1; board &gt;=0; board--)
    {
      for(int row=0; row&lt;NUM_ROWS; row++)
      {
        for(int column=0; column&lt;NUM_COLUMNS; column++)
        {
          myScreen[board].pixel[row*NUM_ROWS+column]=screenBuffer[(column+scroll)/8+board].pixel[(row*NUM_ROWS)+(column+scroll)%8];
        }
      }
    }

    digitalWrite(SLAVESELECT, LOW);
    spiTransfer(0x26);
    //We start from the second index so that a character can be scrolled all the way off the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)sendScreen(myScreen[i].pixel);
    digitalWrite(SLAVESELECT, HIGH);
    delay(speed);
  }
}
//char
void scroll(char * message, char color, int speed)
{
  int messageLength=0;
  char disp[58]=&quot;&quot;;

  if(color == 0x25 || color == 0x26);
  else{

    //Precede the message with spaces so the message starts off of the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)disp[i]=' ';

    strcat(disp, message);
    //Find the length of the screen (including the spaces we added).

    messageLength=strlen(disp);

    //Scroll each character onto and off of the frame.
    for(int messageIndex=0; messageIndex&lt;messageLength; messageIndex++)
    {
      for(int screen=NUM_BOARDS+1; screen&gt;=0; screen--)
      {
        fillChar(NUM_BOARDS+1-screen, disp[messageIndex+screen], color);
      }
      scrollBuffer(speed);
    }	
  }
}

void clear(void)
{
  for(int board=0; board&lt;NUM_BOARDS; board++)
  {
    fillScreen(board, BLACK);
    //free(screenBuffer[board].pixel);
    //memset(&amp;screenBuffer[board].pixel, 0, sizeof (screen));
  }
  display();
}

//************ CLOCK FUNCTIONS *****************************************************************************************
// CONVERTERS ##########################################################################################################
byte decToBcd(byte val){
  // Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
// END: CONVERTERS #####################################################################################################
// TIME GETTERS ########################################################################################################
// GET TIME ------------------------------------------------------------------------------------------------------------
String getTime(){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  String h = hour;
  if(hour&lt;10) h = &quot;0&quot;+h;
  String m = minute;
  if(minute&lt;10) m = &quot;0&quot;+m; 
  String all = h+&quot;:&quot;+m;
  return all;
}
// END: GET TIME -------------------------------------------------------------------------------------------------------
// GET DATE ------------------------------------------------------------------------------------------------------------
String getDate(){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  String date;
  switch(weekDay){ // Weekdays in German
  case 1:
    date = &quot;MO&quot;;
    break;
  case 2:
    date = &quot;DI&quot;;
    break;
  case 3:
    date = &quot;MI&quot;;
    break;
  case 4:
    date = &quot;DO&quot;;
    break;
  case 5:
    date = &quot;FR&quot;;
    break;
  case 6:
    date = &quot;SA&quot;;
    break;
  case 7:
    date = &quot;SO&quot;;
    break;
  default: 
    break;
  }

  String monthDayString = monthDay;
  String monthString = month;

  if(monthDay&lt;10) monthDayString = &quot;0&quot;+monthDayString;
  if(month&lt;10) monthString = &quot;0&quot;+monthString;

  date = date+&quot;, &quot;+monthDayString+&quot;.&quot;+monthString+&quot;.20&quot;+year;
  return date;
}
// END: GET DATE -------------------------------------------------------------------------------------------------------
// END: TIME GETTERS ###################################################################################################
// TIME SETTERS ########################################################################################################
// CHANGE HOUR (DESIGNED FOR +-1) --------------------------------------------------------------------------------------
void changeHour(int h){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  if(hour==23) hour = 0;
  else hour = hour + h;

  setDateTime(second, minute, hour, weekDay, monthDay, month, year);  
}
// END: CHANGE HOUR ----------------------------------------------------------------------------------------------------
// CHANGE MINUTE (DESIGNED FOR +-1) ------------------------------------------------------------------------------------
void changeMinute(int m){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  if(minute==59) minute = 0;
  else minute = minute + m;

  setDateTime(second, minute, hour, weekDay, monthDay, month, year);  
}
// END: CHANGE MINUTE --------------------------------------------------------------------------------------------------
// SET TIME ------------------------------------------------------------------------------------------------------------
void setDateTime(int second, int minute, int hour, int weekDay, int day, int month, int year){

  byte s = (byte) second; //0-59
  byte m = (byte) minute; //0-59
  byte h = (byte) hour; //0-23
  byte w = (byte) weekDay; //1-7
  byte d = (byte) day; //1-31
  byte m2 = (byte) month; //1-12
  byte y  = (byte) year; //0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0); //stop Oscillator

  Wire.send(decToBcd(s));
  Wire.send(decToBcd(m));
  Wire.send(decToBcd(h));
  Wire.send(decToBcd(w));
  Wire.send(decToBcd(d));
  Wire.send(decToBcd(m2));
  Wire.send(decToBcd(y));

  Wire.send(0); //start 

  Wire.endTransmission();
}
// END: SET TIME -------------------------------------------------------------------------------------------------------
// END: TIME SETTERS ###################################################################################################
// END: ******* CLOCK FUNCTIONS ****************************************************************************************
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2086338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086338</guid><dc:creator><![CDATA[ndrizza]]></dc:creator><pubDate>Wed, 29 Jun 2011 21:55:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 21:57:29 GMT]]></title><description><![CDATA[<p>Bitte reduziere den Code auf ein Minimalbeispiel. Wir haben keine Lust deine Funktionen zu suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086339</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 29 Jun 2011 21:57:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:03:52 GMT]]></title><description><![CDATA[<p>Ich hab's jetzt nur überflogen, aber sowas sieht schonmal unsinnig aus:</p>
<pre><code class="language-cpp">char timearray[7] = &quot;&quot;;
  ...
  free(timearray);
</code></pre>
<p>free() wird verwendet für die Freigabe von dynamischem Speicher (d.h. per malloc() angefordert), nicht für Arrays, die du auf dem Stack angefordert hast.</p>
<p><s>PS: Soweit ich das überblicke, ist das im C Forum besser aufgehoben.</s></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086341</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:03:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:02:50 GMT]]></title><description><![CDATA[<p>Du wirst irgendwo den Sonderfall nicht behandeln, dass bereits das erste Zeichen \0 ist. Zum Suchen sind mir 500 Zeilen aber auch zu viel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086342</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:02:50 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:04:03 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>PS: Soweit ich das überblicke, ist das im C++ Forum besser aufgehoben.</p>
</blockquote>
<p>Meinst du das C-Unterforum?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086343</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:04:03 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:08:43 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Meinst du das C-Unterforum?</p>
</blockquote>
<p>Ja, aber ganz sicher bin ich mir da nicht - der Code ist ein grauenhaft geschriebener Hybrid, der irgendwo zwischen C und C++ liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086349</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:21:17 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>Meinst du das C-Unterforum?</p>
</blockquote>
<p>Ja, aber ganz sicher bin ich mir da nicht - der Code ist ein grauenhaft geschriebener Hybrid, der irgendwo zwischen C und C++ liegt.</p>
</blockquote>
<p>Haben Mikrocontroller das nicht an sich? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086357</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:21:17 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:32:02 GMT]]></title><description><![CDATA[<p>Keine Ahnung, so nahe bin ich noch keinem Mikrocontroller gekommen, um das beurteilen zu können (auch wenn ich mal an einem Programm gearbeitet habe, das mit einem kommuniziert hat).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086360</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:51:36 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>hier der reduzierte code.<br />
ev. findet ihr etwas.</p>
<p>es muss entweder mit dem struct, den Buffer oder den Arrays deklariert in loop zu tun haben.<br />
Irgendwie werden Chars angezeigt, die nebeneinander im Speicherort sind.</p>
<p>Danke für eure Hilfe</p>
<p>Gruss.</p>
<pre><code>// RGB MATRIX definitions
int NUM_BOARDS = 1;
#define NUM_ROWS    8
#define NUM_COLUMNS    8
#define NUM_PIXELS    64
#define BUFFER            4 // for 8 Matrixes = 10

// Screen Buffer
typedef struct{
  char pixel[NUM_PIXELS];
}
screen;
screen screenBuffer[BUFFER];  // Array of screens that represents the entire frame of matrices (if using a multi-board system)
screen myScreen[BUFFER];      // Array of screens used for scrolling text.

// Define the &quot;Normal&quot; 8 bit colors
#define BLACK    0
#define RED    0xE0
#define BLUE    0x03
#define MAGENTA    RED|BLUE

// 8x8 font.
const char letters[] = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //32/ --&gt; ' '
  0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x00, //33/ --&gt; !
  // usw.
  0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00, //90/ --&gt; Z
};

void loop()
{
  String timestring = getTime();
  char timearray[7] = &quot;&quot;;
  timearray[0]=' ';
  timearray[6]=' ';
  for(int i=1; i&lt;6; i++){
    timearray[i]=timestring[i-1];
  }
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();
  scroll(timearray, MAGENTA, 50);
  clear();

  String datestring = getDate();
  char datearray[16] = &quot;&quot;;
  datearray[0]=' ';
  datearray[15]=' ';
  for(int i=1; i&lt;15; i++){
    datearray[i]=datestring[i-1];
  }
  scroll(datearray, MAGENTA, 50);  // Problem: Beim zweiten Durchlauf der loop() Funktion (Undendiche Schleife)
                                    // Zeigt die Matrix den Inhalt von timearray und datearray an, obwohl ich nur den datearray anzeigen wollte.
                                     // Kann mir da jemand helfen?
  clear();
}

// Funktion muss für Problem nicht angeschaut werden
char spiTransfer(char value)
{
  SPDR = value;                   // Start the transmission
  while (!(SPSR &amp; (1&lt;&lt;SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}

void sendScreen(char * screen)
{
  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      spiTransfer(screen[(row*8)+column]);
    }
  }
}

void scrollBuffer(int speed)
{
  //This huge loop scrolls a character one column to the left each time through.
  for(int scroll = 7; scroll &gt;=0; scroll--)
  {
    for(int board = NUM_BOARDS+1; board &gt;=0; board--)
    {
      for(int row=0; row&lt;NUM_ROWS; row++)
      {
        for(int column=0; column&lt;NUM_COLUMNS; column++)
        {
          myScreen[board].pixel[row*NUM_ROWS+column]=screenBuffer[(column+scroll)/8+board].pixel[(row*NUM_ROWS)+(column+scroll)%8];
        }
      }
    }

    digitalWrite(SLAVESELECT, LOW);
    spiTransfer(0x26);
    //We start from the second index so that a character can be scrolled all the way off the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)sendScreen(myScreen[i].pixel);
    digitalWrite(SLAVESELECT, HIGH);
    delay(speed);
  }
}
//char
void scroll(char * message, char color, int speed)
{
  int messageLength=0;
  char disp[58]=&quot;&quot;;

  if(color == 0x25 || color == 0x26);
  else{

    //Precede the message with spaces so the message starts off of the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)disp[i]=' ';

    strcat(disp, message);
    //Find the length of the screen (including the spaces we added).

    messageLength=strlen(disp);

    //Scroll each character onto and off of the frame.
    for(int messageIndex=0; messageIndex&lt;messageLength; messageIndex++)
    {
      for(int screen=NUM_BOARDS+1; screen&gt;=0; screen--)
      {
        fillChar(NUM_BOARDS+1-screen, disp[messageIndex+screen], color);
      }
      scrollBuffer(speed);
    }   
  }
}

void clear(void)
{
  for(int board=0; board&lt;NUM_BOARDS; board++)
  {
    fillScreen(board, BLACK);
    //free(screenBuffer[board].pixel);
    //memset(&amp;screenBuffer[board].pixel, 0, sizeof (screen));
  }
  display(); // Funktion weggelassen
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2086363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086363</guid><dc:creator><![CDATA[ndrizza]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 22:47:47 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ich hab's jetzt nur überflogen, aber sowas sieht schonmal unsinnig aus:</p>
<pre><code class="language-cpp">char timearray[7] = &quot;&quot;;
  ...
  free(timearray);
</code></pre>
<p>free() wird verwendet für die Freigabe von dynamischem Speicher (d.h. per malloc() angefordert), nicht für Arrays, die du auf dem Stack angefordert hast.</p>
<p><s>PS: Soweit ich das überblicke, ist das im C Forum besser aufgehoben.</s></p>
</blockquote>
<p>Ja, der Versuch &quot;free&quot; war nur ein verzweifelter Test.:) Habs jetzt rausgenommen. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2086364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086364</guid><dc:creator><![CDATA[ndrizza]]></dc:creator><pubDate>Wed, 29 Jun 2011 22:47:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherplatz aktualisieren&#x2F;löschen on Wed, 29 Jun 2011 23:06:05 GMT]]></title><description><![CDATA[<p>Hab das Problem behoben.</p>
<p>Hab einfach die Arrays in Funktionen Abgekapselt.<br />
Danach gab es das Problem nicht mehr.</p>
<p>Vielen Dank für euere Hilfe.</p>
<p>Gruss</p>
<p>Hier noch der Code:</p>
<pre><code>// RTC
#include &quot;Wire.h&quot;
#define DS1307_ADDRESS 0x68

// Define SPI Pins
#define DATAOUT     11//MOSI MasterOutputSlaveInput (connect to --&gt; MISO of device)
#define DATAIN      12//MISO MasterInputSlaveOutput (connect to --&gt; MOSI of device)
#define SPICLOCK    13//sck
#define SLAVESELECT 10//ss

// RGB MATRIX definitions
int NUM_BOARDS = 1;
#define NUM_ROWS	8
#define NUM_COLUMNS	8
#define NUM_PIXELS	64
#define BUFFER	        4 // for 8 Matrixes = 10

// Screen Buffer
typedef struct{
  char pixel[NUM_PIXELS];
}
screen;
screen screenBuffer[BUFFER];  // Array of screens that represents the entire frame of matrices (if using a multi-board system)
screen myScreen[BUFFER];      // Array of screens used for scrolling text.

// Define the &quot;Normal&quot; 8 bit colors
#define BLACK	0
#define RED	0xE0
#define GREEN	0x1C
#define BLUE	0x03
#define ORANGE	RED|GREEN
#define MAGENTA	RED|BLUE
#define TEAL	BLUE|GREEN
#define WHITE	(RED|GREEN|BLUE)-0x60

// 8x8 font. 
const char letters[] = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //32/ --&gt; ' '
  0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x00, //33/ --&gt; !
  0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00, //34/ --&gt; &quot;
  0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00, //35/ --&gt; #
  0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00, //36/ --&gt; $
  0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00, //37/ --&gt; %
  0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00, //38/ --&gt; &amp;
  0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00, //39/ --&gt; '
  0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x00, //40/ --&gt; (
  0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00, //41/ --&gt; )
  0x00,0x14,0x08,0x3E,0x08,0x14,0x00,0x00, //42/ --&gt; *
  0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00, //43/ --&gt; +
  0x00,0x00,0x50,0x30,0x00,0x00,0x00,0x00, //44/ --&gt; ,
  0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00, //45/ --&gt; -
  0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00, //46/ --&gt; .
  0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00, //47/ --&gt; /
  0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00, //48/ --&gt; 0
  0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00, //49/ --&gt; 1
  0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00, //50/ --&gt; 2
  0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00, //51/ --&gt; 3
  0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00, //52/ --&gt; 4
  0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //53/ --&gt; 5
  0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00, //54/ --&gt; 6
  0x00,0x01,0x71,0x09,0x05,0x03,0x00,0x00, //55/ --&gt; 7
  0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //56/ --&gt; 8
  0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00, //57/ --&gt; 9
  0x00,0x00,0x36,0x00,0x00,0x00,0x00,0x00, //58/ --&gt; :
  0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x00,  //59/ --&gt; ;
  0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00, //60/ --&gt; &lt;
  0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00, //61/ --&gt; =
  0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00, //62/ --&gt; &gt;
  0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00, //63/ --&gt; ?
  0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00, //64/ --&gt; @
  0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00, //65/ --&gt; A
  0x00,0x7F,0x49,0x49,0x49,0x36,0x00,0x00, //66/ --&gt; B
  0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00, //67/ --&gt; C
  0x00,0x7F,0x41,0x41,0x22,0x1C,0x00,0x00, //68/ --&gt; D
  0x00,0x7F,0x49,0x49,0x49,0x41,0x00,0x00, //69/ --&gt; E
  0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00, //70/ --&gt; F
  0x00,0x3E,0x41,0x49,0x49,0x3A,0x00,0x00, //71/ --&gt; G
  0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00, //72/ --&gt; H
  0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00, //73/ --&gt; I
  0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00, //74/ --&gt; J
  0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00, //75/ --&gt; K
  0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00, //76/ --&gt; L
  0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00, //77/ --&gt; M
  0x00,0x7F,0x04,0x08,0x10,0x7F,0x00,0x00, //78/ --&gt; N
  0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00, //79/ --&gt; O
  0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00, //80/ --&gt; P
  0x3E,0x41,0x51,0x21,0x5E,0x00,0x00,0x00, //81/ --&gt; Q
  0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00, //82/ --&gt; R
  0x00,0x46,0x49,0x49,0x49,0x31,0x00,0x00, //83/ --&gt; S
  0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00, //84/ --&gt; T
  0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00, //85/ --&gt; U
  0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00, //86/ --&gt; V
  0x00,0x3F,0x40,0x70,0x40,0x3F,0x00,0x00, //87/ --&gt; W
  0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00, //88/ --&gt; X
  0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00, //89/ --&gt; Y
  0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00, //90/ --&gt; Z
};

void setup()
{
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK, OUTPUT);
  pinMode(SLAVESELECT, OUTPUT);
  delay(10);
  digitalWrite(SLAVESELECT, HIGH); // disable RGB MATRIX
  delay(10);
  SPCR = 0b01010011;
  delay(5000);
  digitalWrite(SLAVESELECT, LOW);
  delay(10);
  spiTransfer('%');
  delay(10);
  digitalWrite(SLAVESELECT, HIGH);

  //Configure the correct number of boards
  digitalWrite(SLAVESELECT, LOW);
  delay(10);
  spiTransfer(NUM_BOARDS);
  delay(10);	
  digitalWrite(SLAVESELECT, HIGH);
  delay(10);
  Wire.begin();
  delay(5000);

}

void loop()
{
  for(int i=0; i&lt;5; i++){
  displayTime();
  }
  displayDate();
}

void displayTime(){
  String timestring = getTime();
  char timearray[7] = &quot;&quot;;
  timearray[0]=' ';
  timearray[6]=' ';
  for(int i=1; i&lt;6; i++){
    timearray[i]=timestring[i-1];
  }
  scroll(timearray, MAGENTA, 50);
  clear();
}

void displayDate(){
  String datestring = getDate();
  char datearray[16] = &quot;&quot;;
  datearray[0]=' ';
  datearray[15]=' ';
  for(int i=1; i&lt;15; i++){
    datearray[i]=datestring[i-1];
  }
  scroll(datearray, MAGENTA, 50);
  clear();
}

char spiTransfer(char value)
{
  SPDR = value;                   // Start the transmission
  while (!(SPSR &amp; (1&lt;&lt;SPIF)))     // Wait for the end of the transmission
  {
  };
  return SPDR;                    // return the received byte
}

char fillPixel(int screen, int row, int column, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((column &lt; 0) || column &gt; NUM_COLUMNS)return 0;
  if((row &lt; 0) || row &gt; NUM_ROWS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  screenBuffer[screen].pixel[row*8+column]=color;
}

char fillColumn(int screen, int column, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((column &lt; 0) || column &gt; NUM_COLUMNS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    screenBuffer[screen].pixel[column+(row*NUM_ROWS)]=color;
  }
  return 1;
}

char fillRow(int screen, int row, char color)
{
  if((screen &gt; NUM_BOARDS) || (screen &lt; 0))return 0;
  if((row &lt; 0) || row &gt; NUM_ROWS)return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int column=0; column&lt;NUM_COLUMNS; column++)
  {
    screenBuffer[screen].pixel[row*NUM_ROWS+column]=color;
  }
  return 1;	
}

char fillScreen(int screen, char color)
{
  if((screen &lt; 0) || (screen &gt; NUM_BOARDS))return 0;
  if(color == 0x25 || color == 0x26)return 0;

  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      screenBuffer[screen].pixel[row*NUM_ROWS+column]=color;
    }
  }
  return 1;
}

char fillChar(int screen, char letter, char color)
{
  int letter_offset=0;	//The position of the letter in the letters[] array.

  if((screen &lt; 0) || (screen &gt; NUM_BOARDS))return 0;
  if(color == 0x25 || color == 0x26)return 0;

  if(isalpha(letter))letter = toupper(letter);	//Convert to uppercase
  letter_offset = letter - 32;	//Find the offset in the letters[] array
  letter_offset *=8;
  if(letter == ' ')letter_offset=0;	//If we get a space or invalid character, display a space
  if(!isalpha(letter)&amp;&amp;(letter&gt;123||letter&lt;33))letter_offset=0;
  //Fill the screen with data from the letters[] array
  for(int column=0; column&lt;NUM_COLUMNS; column++)
  {
    for(int row=0; row&lt;NUM_ROWS; row++)
    {
      //Strange looking algorithm converts rows to columns and vice versa.
      if(letters[letter_offset+(7-column)] &amp; (1&lt;&lt;row))screenBuffer[screen].pixel[row*8+column]=color;
      else screenBuffer[screen].pixel[row*8+column]=BLACK;
    }
  }

  return 1;
}

void display(void)
{
  digitalWrite(SLAVESELECT, LOW);	//Select the LED matrices
  spiTransfer(0x26);				//SEnd the Start of frame character
  //Use the _num_boards parameter to determine how many frames to send
  for(int screen=0; screen&lt;NUM_BOARDS; screen++)
  {
    sendScreen(screenBuffer[screen].pixel);	//Send frame data over SPI.
  }
  digitalWrite(SLAVESELECT, HIGH);	//Unselect the LED matrices
}

void sendScreen(char * screen)
{
  for(int row=0; row&lt;NUM_ROWS; row++)
  {
    for(int column=0; column&lt;NUM_COLUMNS; column++)
    {
      spiTransfer(screen[(row*8)+column]);
    }
  }
}

void scrollBuffer(int speed)
{
  //This huge loop scrolls a character one column to the left each time through.
  for(int scroll = 7; scroll &gt;=0; scroll--)
  {
    for(int board = NUM_BOARDS+1; board &gt;=0; board--)
    {
      for(int row=0; row&lt;NUM_ROWS; row++)
      {
        for(int column=0; column&lt;NUM_COLUMNS; column++)
        {
          myScreen[board].pixel[row*NUM_ROWS+column]=screenBuffer[(column+scroll)/8+board].pixel[(row*NUM_ROWS)+(column+scroll)%8];
        }
      }
    }

    digitalWrite(SLAVESELECT, LOW);
    spiTransfer(0x26);
    //We start from the second index so that a character can be scrolled all the way off the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)sendScreen(myScreen[i].pixel);
    digitalWrite(SLAVESELECT, HIGH);
    delay(speed);
  }
}
//char
void scroll(char * message, char color, int speed)
{
  int messageLength=0;
  char disp[58]=&quot;&quot;;

  if(color == 0x25 || color == 0x26);
  else{

    //Precede the message with spaces so the message starts off of the frame.
    for(int i=0; i&lt;NUM_BOARDS; i++)disp[i]=' ';

    strcat(disp, message);
    //Find the length of the screen (including the spaces we added).

    messageLength=strlen(disp);

    //Scroll each character onto and off of the frame.
    for(int messageIndex=0; messageIndex&lt;messageLength; messageIndex++)
    {
      for(int screen=NUM_BOARDS+1; screen&gt;=0; screen--)
      {
        fillChar(NUM_BOARDS+1-screen, disp[messageIndex+screen], color);
      }
      scrollBuffer(speed);
    }	
  }
}

void clear(void)
{
  for(int board=0; board&lt;NUM_BOARDS; board++)
  {
    fillScreen(board, BLACK);
    //free(screenBuffer[board].pixel);
    //memset(&amp;screenBuffer[board].pixel, 0, sizeof (screen));
  }
  display();
}

//************ CLOCK FUNCTIONS *****************************************************************************************
// CONVERTERS ##########################################################################################################
byte decToBcd(byte val){
  // Convert normal decimal numbers to binary coded decimal
  return ( (val/10*16) + (val%10) );
}
byte bcdToDec(byte val)  {
  // Convert binary coded decimal to normal decimal numbers
  return ( (val/16*10) + (val%16) );
}
// END: CONVERTERS #####################################################################################################
// TIME GETTERS ########################################################################################################
// GET TIME ------------------------------------------------------------------------------------------------------------
String getTime(){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  String h = hour;
  if(hour&lt;10) h = &quot;0&quot;+h;
  String m = minute;
  if(minute&lt;10) m = &quot;0&quot;+m; 
  String all = h+&quot;:&quot;+m;
  return all;
}
// END: GET TIME -------------------------------------------------------------------------------------------------------
// GET DATE ------------------------------------------------------------------------------------------------------------
String getDate(){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  String date;
  switch(weekDay){ // Weekdays in German
  case 1:
    date = &quot;MO&quot;;
    break;
  case 2:
    date = &quot;DI&quot;;
    break;
  case 3:
    date = &quot;MI&quot;;
    break;
  case 4:
    date = &quot;DO&quot;;
    break;
  case 5:
    date = &quot;FR&quot;;
    break;
  case 6:
    date = &quot;SA&quot;;
    break;
  case 7:
    date = &quot;SO&quot;;
    break;
  default: 
    break;
  }

  String monthDayString = monthDay;
  String monthString = month;

  if(monthDay&lt;10) monthDayString = &quot;0&quot;+monthDayString;
  if(month&lt;10) monthString = &quot;0&quot;+monthString;

  date = date+&quot;, &quot;+monthDayString+&quot;.&quot;+monthString+&quot;.20&quot;+year;
  return date;
}
// END: GET DATE -------------------------------------------------------------------------------------------------------
// END: TIME GETTERS ###################################################################################################
// TIME SETTERS ########################################################################################################
// CHANGE HOUR (DESIGNED FOR +-1) --------------------------------------------------------------------------------------
void changeHour(int h){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  if(hour==23) hour = 0;
  else hour = hour + h;

  setDateTime(second, minute, hour, weekDay, monthDay, month, year);  
}
// END: CHANGE HOUR ----------------------------------------------------------------------------------------------------
// CHANGE MINUTE (DESIGNED FOR +-1) ------------------------------------------------------------------------------------
void changeMinute(int m){
  // Reset the register pointer
  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_ADDRESS, 7);

  int second = bcdToDec(Wire.receive());
  int minute = bcdToDec(Wire.receive());
  int hour = bcdToDec(Wire.receive() &amp; 0b111111); //24 hour time
  int weekDay = bcdToDec(Wire.receive()); //0-6 -&gt; sunday - Saturday
  int monthDay = bcdToDec(Wire.receive());
  int month = bcdToDec(Wire.receive());
  int year = bcdToDec(Wire.receive());

  if(minute==59) minute = 0;
  else minute = minute + m;

  setDateTime(second, minute, hour, weekDay, monthDay, month, year);  
}
// END: CHANGE MINUTE --------------------------------------------------------------------------------------------------
// SET TIME ------------------------------------------------------------------------------------------------------------
void setDateTime(int second, int minute, int hour, int weekDay, int day, int month, int year){

  byte s = (byte) second; //0-59
  byte m = (byte) minute; //0-59
  byte h = (byte) hour; //0-23
  byte w = (byte) weekDay; //1-7
  byte d = (byte) day; //1-31
  byte m2 = (byte) month; //1-12
  byte y  = (byte) year; //0-99

  Wire.beginTransmission(DS1307_ADDRESS);
  Wire.send(0); //stop Oscillator

  Wire.send(decToBcd(s));
  Wire.send(decToBcd(m));
  Wire.send(decToBcd(h));
  Wire.send(decToBcd(w));
  Wire.send(decToBcd(d));
  Wire.send(decToBcd(m2));
  Wire.send(decToBcd(y));

  Wire.send(0); //start 

  Wire.endTransmission();
}
// END: SET TIME -------------------------------------------------------------------------------------------------------
// END: TIME SETTERS ###################################################################################################
// END: ******* CLOCK FUNCTIONS ****************************************************************************************
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2086370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2086370</guid><dc:creator><![CDATA[ndrizza]]></dc:creator><pubDate>Wed, 29 Jun 2011 23:06:05 GMT</pubDate></item></channel></rss>