DaveWare ledde styrelsen (3 / 5 steg)

Steg 3: Programmering datorn (teensy 3.1/3.2)



Det teensy 3.1/3.2 är en arduino kompatibel utveckling styrelsen som jag hade valt eftersom den har en stor mängd RAM-minne (64 Kb) som används för skärmbuffert. Kontinuerligt, den här skärmen buffert innehåll visas i 96 x 64 resolution LED-skärmen. Så, vi behöver en rutin/timerfunktion som utför denna uppgift .

Vi behöver en funktion för att få kommandon via WiFi nätverk genom modulen ESP8266. Detta kommer att läsa den information som skickas av PC (och även android i en nära framtid)

Men först måste vi ställa den Arduino IDE 1.6.5 programmeringsmiljön för stöd vår dator (teensy 3.1/3.2) och också ESP8266 - 01 WiFi modul. För detta, måste vi följa den här stammen:

  1. Hämta och installera den Arduino IDE 1.6.5 eller större
  2. Hämta och installera den Teensyduino filen (jag gjorde detta i Windows 7). Installationsprogrammet lägger till stödfiler som behövs till Arduino IDE för teensy 3.1/3.2 styrelsen/dator.
  3. Gjort, är vi redo för att programmera det teensy för kontroll RGB LED paneler arrangemanget med vår windows applikation av WiFi.

För det andra i teensy dator skissen måste vi definiera konfiguration av pins för ESP8266 (UART) och de första 32 x 32 RGB LED panelen.

/ * < br > *
* Ändrat av David Elías Flores Escalante, för hantera ett arrangemang av sex 32 x 32 RGB Led paneler för
* en 96 x 64 skärmupplösning.
*/

#include "glcdfont.h"
CONST uint8_t NPANELS = 6;
CONST uint8_t NTRAMA = 128;
CONST uint8_t SIZEX = 32 * NPANELS;
CONST uint8_t SIZEY = 32.

#include "logo.h"

#define swap (a, b) {int16_t t = a; en = b; b = t;}

PortC [0:11] = {15, 22, 23, 9, 10, 13, 11, 12, 28, 27, 29, 30}
PortD [0:7] = {2, 14, 7, 8, 6, 20, 21, 5}
Definiera pins
CONST uint8_t
PortC
APIN = 15, BPIN = 22, CPIN = 23, DPIN = 9,
CLOCKPIN = 10, LATCHPIN = 13, OEPIN = 11,
PortD
R1PIN = 2, R2PIN = 8,
G1PIN = 14, G2PIN = 6,
B1PIN = 7, B2PIN = 20;

uint8_t pinTable [13] = {
R1PIN, R2PIN, G1PIN, G2PIN, B1PIN, B2PIN,
APIN, BPIN, CPIN, DPIN, CLOCKPIN, LATCHPIN, OEPIN};

Tar 1/8 rader via en dekoder
uint16_t const A = 1, B = 2, C = 4, D = 8.
Fungerar som en 16-bitars skiftregister
uint16_t const SCLK = 16.
uint16_t const spärren = 32.
uint16_t const OE = 64;

uint16_t const abcVar [16] = {//Decoder counter var
0, A, B, A + B, C, C + A, C + B, A + B + C,
0 + D, A + D, B + D, A + B + D, C + D, C + A + D, C + B + D, A + B + C + D};

Data linjer för rad 1 röd och rad 9 röd, ect.
uint16_t const RED1 = 1, RED2 = 8;
uint16_t const GREEN1 = 2, GREEN2 = 16.
uint16_t const BLUE1 = 4, BLUE2 = 32.

statisk uint8_t gr, gg, gb;
statisk int peso = 25, patch = 1 / * minutos = 1, segundos = 0, * / modalidad = 1;
statisk int oldMinD = 60, oldMinU = 600, oldSegD = 60, oldSegU = 60, oldColor = 9393, tipo = 0;

Här är där data är alla läsa
statiska byte ScreenBuffer [SIZEX * SIZEY * 4];

int BufferIn [512];

BAM och avbryta variabler
uint8_t rowN = 0;
uint16_t BAM;
uint8_t BAMMAX = 7. nu 24 bitars färg! (0-7)

int cmd = 0;

byte prevVal1, prevVal2, val;
int datafromPC;
booleska dataIn = false;
int dataPos = 0;

Skissen ange modulen ESP8266 WiFi som AP (åtkomstpunkt), så, vi behöver inte ytterligare nätverksmaskinvara att ansluta våra laptop (eller dator med trådlös funktion) till LED styrelsen. För detta behöver vi att skicka till ESP8266 på kommandon av seriellt gränssnitt teensy UART stift:

/***************************************************************************<br> set ESP8266
***************************************************************************/
void setup_ESP8266()
{
Återställa ESP8266
Serial1.println("at+rst");
WaitOK();

Ställa in ESP8266 i CWMODE = 1: AP-läge
Serial1.println("at+CWMODE=1");
WaitOK();

Ställa in ESP8266 i CIPMODE = 1:
Serial1.println("at+CIPMODE=1");
WaitOK();

Be ESP8266 IP-nummer (AP och Station)
Serial1.println("at+CIFSR");
WaitOK();

AP-parametrarna. SSID, lösenord
Serial1.println("at+CWSAP=\"LED_BOARD\",\"321654\",5,0");
WaitOK();

Återställa ESP8266
Serial1.println("at+rst");
WaitOK();

Ange ESP8266 för flera anslutningar
Serial1.println("at+CIPMUX=1");
WaitOK();

Ställ in läge för ESP8266 Server, Port
Serial1.println("at+CIPSERVER=1,9999");
WaitOK();

Ange timeout för ESP8266 servern till 7200 sekunder
Serial1.println("at+CIPSTO=28800");
WaitOK();

}

Nu måste vi att läsa data från ESP8266 skickas av laptop/PC av WiFi.

om (Serial1.available()) < br > {
prevVal1 = prevVal2;
prevVal2 = val;
datafromPC = val = Serial1.read();

om (prevVal1 == 192 & & prevVal2 == 192) / / Peso
annat if (prevVal1 == "p" & & prevVal2 == "e" & & val =='s ")
{
dataPos = 0;
dataIn = sant;
CMD = 1;
IF(Serial)
Serial.println ("kommandot 1");

}

om (prevVal1 == 108 & & prevVal2 == 108) / / patch
annat if (prevVal1 == "i" & & prevVal2 =='n ' & & val =='t ')
{
dataPos = 0;
dataIn = sant;
CMD = 2;
IF(Serial)
Serial.println ("kommandot 2");
}

om (prevVal1 == 109 & & prevVal2 == 109) / / Modalidad
annat if (prevVal1 == är "& & prevVal2 =="o"& & val == hade")
{
dataPos = 0;
dataIn = sant;
CMD = 3;
IF(Serial)
Serial.println ("kommandot 3");
}

om (prevVal1 == 110 & & prevVal2 == 110) / / Cronometro
annat if (prevVal1 == är "& & prevVal2 =="o"& & val == hade")
{
dataPos = 0;
dataIn = sant;
CMD = 4;
IF(Serial)
Serial.println ("kommandot 4");
}

om (prevVal1 == 111 & & prevVal2 == 111) / / Atleta
annat if (prevVal1 == är "& & prevVal2 =="o"& & val == hade")
{
dataPos = 0;
dataIn = sant;
CMD = 5;
IF(Serial)
Serial.println ("kommandot 5");
}

om (prevVal1 == 112 & & prevVal2 == 112) / / Nombre Liga
annat if (prevVal1 == är "& & prevVal2 =="o"& & val == hade")
{
dataPos = 0;
dataIn = sant;
CMD = 6;
IF(Serial)
Serial.println ("kommandot 6");
}

om (prevVal1 == 140 & & prevVal2 == 140) / / Receso
{
dataPos = 0;
dataIn = sant;
CMD = 8.
IF(Serial)
Serial.println ("kommandot 8");
}

om (prevVal1 == 160 & & prevVal2 == 160) / / tipo pantalla
{
dataPos = 0;
dataIn = sant;
CMD = 9.
IF(Serial)
Serial.println ("kommandot 9");
}

om (prevVal1 == 170 & & prevVal2 == 170) / / nuevo
{
dataPos = 0;
dataIn = sant;
CMD = 20;
IF(Serial)
Serial.println ("kommandot 20");
}

om (prevVal1 == 113 & & prevVal2 == 113) / / Fecha y Hora
annat if (prevVal1 == är "& & prevVal2 =="o"& & val == hade")
{
dataPos = 0;
dataIn = sant;
CMD = 7.
IF(Serial)
Serial.println ("kommandot 7");
}

om (prevVal1 == 150 & & prevVal2 == 150 & & val == 150) / / FIN DE TRAMA
om (prevVal1 == 'f' & & prevVal2 == "i" & & val =='n ')
{
dataIn = false;
IF(CMD==1) //PESO
{
PrintScreen_Peso (& BufferIn[0]);
}

IF(CMD==2) //INTENTO
{
PrintScreen_Intento (& BufferIn[0]);

}

IF(CMD==3) //MODALIDAD
{
modalidad = BufferIn [0];

PrintScreen_Modalidad(modalidad);
}

IF(CMD==4) //CRONOMETRO
{
PrintScreen_Timer (& BufferIn[0]);

/ * om (sinne == 0 & & minU == 0 & & segD == 0 & & segU == 0)
oldMinD = oldMinU = oldSegD = 60. * /
}

IF(CMD==5) //ATLETA
{
PrintScreen_Atleta (& BufferIn[0]);
}

IF(CMD==8) //RECESO
{
PrintScreen_Receso (& BufferIn[0]);
}

IF(CMD==9) //tipo Pantalla
{
Tipo = BufferIn [0];

clrScreen();

Switch(Tipo)
{
fall 0:
PrintScreen_Logo();
bryta;

fall 1:
PrintScreen_Titulo_Levantamiento();
bryta;
fall 2:
PrintScreen_Titulo_Receso();
bryta;
fall 3:
TestScreen_01();
bryta;

};

PrintScreen_Tipo (& BufferIn[0]);
}

IF(CMD==7) //Fecha y Hora
{
PrintScreen_FechaHora (& BufferIn[0]);
}

CMD = 0;
val = "";
}

om (prevVal1 =='s "& & prevVal2 =="c"& & val =="c")
{
för (int jag = 0; jag < 4096 * NPANELS; i ++)
{
IF(Serial)
{
Serial.Print(ScreenBuffer[i]);
Serial.Print(",");
IF(i%96==0)
Serial.Print("\n\r");
}
}
val = "";
}

om (prevVal1 == "c" & & prevVal2 == 'l' & & val =='s ")
{
clrScreen();

IF(Serial)
{
Serial.println ("Pantalla Borrada");
}
val = "";

}

om (prevVal1 == 'f' & & prevVal2 == "i" & & val == 'l')
{
fillScreen (0xff, 0xff, 0x00);

IF(Serial)
{
Serial.println ("Prueba Pantalla");
}
val = "";
}

om (prevVal1 == 'r' & & prevVal2 =='s "& & val =='t ')
{
oldMinD = oldMinU = oldSegD = oldSegU = 60.

IF(Serial)
{
Serial.println ("Pantalla Reiniciada");
}

val = "";
}

om (prevVal1 == 'l' & & prevVal2 == "o" & & val == "g")
{
för (int jag = 0; jag < sizex * sizey * 4; i ++) = "" screenbuffer [i] = "logo [i];" = "" = "" = "" if(serial) = "" {= "" serial.println ("pantalla =" "muestra =" "logo =" "daveware"); = ""} = "" val = ""; = "" = ""} = "" = "" om (prevval1 = "='s '" & & = "" prevval2 = "="c"& &" {= "" string = "" msgstring = "DaveWare" msgstring.reserve(200); = "" scrooltext (0,0, msgstring = "", = "" 0x0000ff, = "" 1,50); = "" {= ""; = "" 1,25); = "" < = "" p = "" >< / sizex * sizey * 4; i ++) >

om (prevVal1 =='t ' & & prevVal2 =='s "& & val =="x")
{
TestScreen_01();
}

annat if(dataIn)
{
BufferIn [dataPos ++] = datafromPC;
}
}
}

Rutinen timer för dra slut buffert skärminnehåll LED styrelsen:

IntervalTimer timer1; < br >
void timerInit()
{
BAM = 0;
attackMatrix();
}

Uppdatera matrisen grejer händer här
varje par av rader tas genom dess BAM cykel
då rowNumber ökas och id gjort igen
void attackMatrix()
{
timer1.End();

uint16_t portData;
portData = 0; Tydliga data de kan ange
portData | = (abcVar [rowN]) | OE; ABC, OE
portData & = ~ spärren; SPÄRREN LÅG
GPIOC_PDOR = portData; Skriva till Port

uint8_t * starta = & ScreenBuffer [rowN * SIZEX * 8 + ((7-BAMMAX) + BAM) * 32 * NPANELS];
för (uint8_t jag = 0; jag < 32 * NPANELS; i ++)
{
GPIOD_PDOR = start [i]; Överföra data
GPIOC_PDOR | = SCLK; / / klocka hög
GPIOC_PDOR & = ~ SCLK; / / klocka låg
}

GPIOC_PDOR | = LATCH; / / spärren hög
GPIOC_PDOR & = ~ OE; / / OE låg, visar linje

#define LOOPTIME 1 //trial & fel får man både mjuka övergångar och lite flimmer
#define CALLOVERHEAD 0
timer1.BEGIN(attackMatrix,((LOOPTIME+CALLOVERHEAD) << bam)-calloverhead); = "" = "" om (bam = "" > = BAMMAX) //Checks BAMEN cykel till nästa gång.
{
IF(rowN == 15)
{
rowN = 0;
}
annat
{
rowN ++;
}
BAM = 0;
}
annat
{
BAM ++;
}
} < / bam)-calloverhead); >

Se Steg
Relaterade Ämnen

Ledde fara lampa för cyklar

normala broms/park-lampa cyklar förbrukar höga watt, säger i min cykel 12 volt 21 watt/5 watt, vilket suger batteriet och efter några år, batteriet dör och horn låter inte när bromsarna tillämpas. så jag konverterade min cykel fara ljus i led-lampa,b...

Kontrollerad Intel Edison temperatur Relay

Hej igen Karl instructablers!Jag släppt en live temperatur display för intel edison ett par dagar sedan och det verkade gå ganska bra,Jag har mixtra runt med edison lite mer och har lyckats få mitt huvud runt det kodning språket och hur saker fungera...

Charlieplexing lysdioder - teorin

detta instructable är mindre en bygga dina egna projekt och mer en beskrivning av teorin av charlieplexing. Den är lämplig för personer med grunderna i elektronik, men fullständig inte nybörjare. Jag har skrivit det som svar på de många frågor jag få...

Led bulb

Detta är en led lampa som jag gjort från en trasig CFL glödlampa och några lysdioder som jag hade liggandes.Jag redan gjort 2 led lampor. Den till vänster är 1 watt och den till höger är de 3 watt som im visar du nu.Dessa lampor är för 120v elnätet.(...

Drickbart 9v dark aktiveras ljus

Hej alla! Detta är min första instructable och jag börjar med en mycket enkel. Det är en enkel, lätt att göra drickbart mörkret aktiverad ljus, drivs av ett 9v batteri.Steg 1: Få det material som krävs Komponenter:IC 1---ne555C1---100nfC2---100uf/25v...

| Smartare superenkel kontinuitet testare |

| Smartare hemgjorda kontinuitet testaren |Till skillnad från andra kontinuitet testare kan The smartare kontinuitet testare testa spänningen att vara mycket lägre än spänningen används för ställdon och anmälarna att det finns en kort, och kan väljas...

DIY Night Vision gamla mobil

Hej alla,Detta är en steg för steg att ta bilder som om du har mörkerseende, så om du vill prova det här med din nya mobiltelefon, den du använder för allt och det är speciell för att ta selfies, mitt råd är gör det inte.Söka efter en annan eftersom...

TankWars: Ett fysiskt spel

detta instructable visar spelet TankWars, ett webbaserat spel som spelas på en iPad som driver en verklig robot tank att skjuta laser på en robot. När du träffar robot målet, är spelet uppdaterad.Tanken och målet är Arduinos utrustade med RN-XV WiFly...

Spegel "Tube" - LED optisk illusion

en dag, söker intressant system med ljuseffekter för att konstruera, kom över denna underbara effekt. Helt gillade idén men visste inte hur man kan uppnå är, tills en dag hittade vägen. Därefter bygga min egen spegel som hade att inte bara prova mina...

Hot-O-Ring

Har du någonsin undrat av en varmt lim ring som lyser? Presenterar nya lim ringen! Dess gjord helt av varmt lim och vissa lysdioderSteg 1: Samla materialHär är det material som krävs för varma ring:SMD LED storlek 0603 eller 0804 x 12Perforerad koppa...

Joule tjuv cykel ljus (tillbaka)

konvertera cykel ljus till joule tjuv cykel ljusSteg 1: Im kommer inte för att förklara hur j.t. krets fungerar, eller hur man gör en, de information du måste leta efter andra källor.Jag kommer att förklara hur man använder j.t. krets med cykel ljus...

LED animerade Christmas Tree 2015

Denna animerade julgran inomhus skyltfönster använder en kombination av fem WS2812 adresserbara pixel LED pinnar för stjärnan. Sexton enskild pixel lysdioder uppträdda tillsammans för julgransljus och en grön LED strip skuren i längder för att göra t...

Långvarig ultra liten super ljusa cykel ficklampa

efter att ha försökt misslyckat flera kommersiella cykel ficklampor, beslöt jag att göra mig en som täcker mina behov:-Lätt och mycket små.-Uppladdningsbara att förhindra fortsatt slöseri med AA-batterier.-Billigt!-Kraftfulla och långsiktiga för lång...

Häftigt humör ljus

detta häftigt humör ljus ser bra och är lätt att göra det också använder återvunnet materiel.Steg 1: Steg 1 Hacking ljus-sabel jag hittade detta ljus-saber lögnaktig runt omkring och trodde det skulle göra ett bra humör ljus eftersom det hade alla de...

Gesture controlled robot

Vill du styra saker från en enkel gest av fingrarna. Vill du allt som rör sig eller sluta enligt dina fingrar. Om så är fallet, då är du på rätt plats. Dessa dagar gester är av stor betydelse. I vårt dagliga liv använder vi en massa gester. Från best...

LinkIt en utjämnare

Inledning: Hej byggare! I detta projekt kommer du lära dig hur man gör en platt yta detektor. När du gör något som en tabell eller ett skrivbord måste du kontrollera om ytan inte lutar i en vinkel och sitter platt på marken. Om du är i en lutande skr...

WiFi kontrollerade trädgård ljus med ESP8266

Jag har lite av en sak för ljus och att kunna fjärrstyra dem. Jag särskilt såhär i trädgården och även bättre om jag kan solar power dem. Jag har några av lamporna pund/dollar store spel men de är ganska svag så jag började titta runt och hittade att...

NES patron extern hårddisk

förvandla din gamla NES patronen till en extern hårddisk, precis som den här killen gjorde, förutom med bättre steg för steg instruktion.Jag förändrat den inbyggda LED så att jag kunde ha egna röda lampor kommer ut i botten. Detta är en frivillig anp...

DIY High-Speed bok Scanner från skräp och billiga kameror

jag älskar böcker. Det finns några verkligt fantastiska kunskap och information dold ute i hårt för att hitta, sällsynta och inte kommersiellt gångbara böcker. Jag tycker att jag vill ha mina böcker med mig överallt. Men det är där problemen börjar....