diff options
Diffstat (limited to 'Matrix_9x14/libraries/Charliplexing/.svn/text-base/Figure.cpp.svn-base')
-rw-r--r-- | Matrix_9x14/libraries/Charliplexing/.svn/text-base/Figure.cpp.svn-base | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/Matrix_9x14/libraries/Charliplexing/.svn/text-base/Figure.cpp.svn-base b/Matrix_9x14/libraries/Charliplexing/.svn/text-base/Figure.cpp.svn-base new file mode 100644 index 0000000..1b8c9db --- /dev/null +++ b/Matrix_9x14/libraries/Charliplexing/.svn/text-base/Figure.cpp.svn-base @@ -0,0 +1,125 @@ +/* + Figure drawing library + + Copyright 2009/2010 Benjamin Sonntag <benjamin@sonntag.fr> http://benjamin.sonntag.fr/ + + History: + 2010-01-01 - V0.0 Initial code at Berlin after 26C3 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include "Charliplexing.h" +#include "Figure.h" + +#if defined(ARDUINO) && ARDUINO >= 100 +#include "Arduino.h" +#else +#include "WProgram.h" +#endif +#include <inttypes.h> + + +uint8_t figuresData[][14][2] = { +{ {0,0}, {1,0}, {2,0}, {0,1}, {2,1}, {0,2}, {2,2}, {0,3}, {2,3}, {0,4}, {1,4}, {2,4}, {9,9}, {9,9} }, +{ {1,0}, {0,1}, {1,1}, {1,2}, {1,3}, {0,4}, {1,4}, {2,4}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {2,1}, {1,2}, {0,3}, {0,4}, {1,4}, {2,4}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {2,1}, {0,2}, {1,2}, {2,3}, {0,4}, {1,4}, {2,4}, {9,9}, {9,9}, {9,9}, {9,9} }, +{ {0,0}, {2,0}, {0,1}, {2,1}, {0,2}, {1,2}, {2,2}, {2,3}, {2,4}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {0,1}, {0,2}, {1,2}, {2,2}, {2,3}, {0,4}, {1,4}, {2,4}, {9,9}, {9,9}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {0,1}, {0,2}, {1,2}, {2,2}, {0,3}, {2,3}, {0,4}, {1,4}, {2,4}, {9,9}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {2,1}, {2,2}, {1,3}, {1,4}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {0,1}, {2,1}, {0,2}, {1,2}, {2,2}, {0,3}, {2,3}, {0,4}, {1,4}, {2,4}, {9,9} }, +{ {0,0}, {1,0}, {2,0}, {0,1}, {2,1}, {0,2}, {1,2}, {2,2}, {2,3}, {0,4}, {1,4}, {9,9}, {9,9}, {9,9} } +}; + + +/* ----------------------------------------------------------------- */ +/** Draws a figure (0-9). You should call it with set=1, + * wait a little them call it again with set=0 + * @param figure is the figure [0-9] + * @param x,y coordinates, + * @param set is 1 or 0 to draw or clear it + */ +void Figure::Draw(int figure,int x,int y,int set) { + for(int i=0;i<14;i++) { + if (figuresData[figure][i][0]==9) break; + if ( + figuresData[figure][i][0]+x<13 && + figuresData[figure][i][0]+x>=0 && + figuresData[figure][i][1]+y<8 && + figuresData[figure][i][1]+y>=0 + ) { + LedSign::Set(figuresData[figure][i][0]+x,figuresData[figure][i][1]+y,set); + } + } +} + + +/* ----------------------------------------------------------------- */ +/** Draw a figure in the other direction (rotated 90°) + * You should call it with set=1, + * wait a little them call it again with set=0 + * @param figure is the figure [0-9] + * @param x,y coordinates, + * @param set is 1 or 0 to draw or clear it +*/ +void Figure::Draw90(int figure,int x,int y,int set) { + for(int i=0;i<14;i++) { + if (figuresData[figure][i][0]==9) break; + if ( + (5-figuresData[figure][i][1])+x<13 && + (5-figuresData[figure][i][1])+x>=0 && + figuresData[figure][i][0]+y<8 && + figuresData[figure][i][0]+y>=0 + ) { + LedSign::Set((5-figuresData[figure][i][1])+x,figuresData[figure][i][0]+y,set); + } + } +} + + +/* ----------------------------------------------------------------- */ +/** Scroll a number from right to left + * remove unused figures (0 at the left) + * valid for up to 7 figures. + * @param value is the value to draw and scroll + * @param x is the coordinate where we put the top of the figure [0-13] +*/ +void Figure::Scroll90(unsigned long value,uint8_t x) { + int i,j,k; + uint8_t figures[]={ + (value%10000000)/1000000, + (value%1000000)/100000, + (value%100000)/10000, + (value%10000)/1000, + (value%1000)/100, + (value%100)/10, + (value%10) + }; + j=0; + while (figures[j]==0 && j<6) j++; + + for(i=0;i<9+(7-j)*5;i++) { + for(k=j;k<=6;k++) + Figure::Draw90(figures[k],3,-i+9+4*(k-j) ,1); + delay(100); + for(k=j;k<=6;k++) + Figure::Draw90(figures[k],3,-i+9+4*(k-j) ,0); + } +} + + |