Todas as Discussões Marcadas 'of' - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
2024-03-29T08:44:08Z
https://labdegaragem.com/forum/topic/listForTag?tag=of&feed=yes&xn_auth=no
Música com arduino
tag:labdegaragem.com,2019-02-01:6223006:Topic:699642
2019-02-01T17:35:18.618Z
Bruno Raniere Araújo Diniz
https://labdegaragem.com/profile/brad
<p>Projeto para reproduzir uma música com buzzer no arduino.<br></br><br></br></p>
<p>Olá,</p>
<p>Pra quem gosta de música, entende um pouco de partitura e tem curiosidade de transformar o arduino num instrumento musical, fiz esse vídeo onde mostro como programar o arduino para executar uma música através de sua partitura. Gostaria de receber sugestões de melhorias e feedbacks. Muito obrigado!</p>
<p></p>
<p><a href="https://www.youtube.com/watch?v=3bTO0V2iWHM" rel="noopener" target="_blank">Tema Game…</a></p>
<p>Projeto para reproduzir uma música com buzzer no arduino.<br/><br/></p>
<p>Olá,</p>
<p>Pra quem gosta de música, entende um pouco de partitura e tem curiosidade de transformar o arduino num instrumento musical, fiz esse vídeo onde mostro como programar o arduino para executar uma música através de sua partitura. Gostaria de receber sugestões de melhorias e feedbacks. Muito obrigado!</p>
<p></p>
<p><a href="https://www.youtube.com/watch?v=3bTO0V2iWHM" target="_blank" rel="noopener">Tema Game Of Thrones com Arduino | código fonte explicado!</a></p>
Headless CNC com um Garagino para armazenar o firmware Grbl v_08c
tag:labdegaragem.com,2013-04-14:6223006:Topic:223812
2013-04-14T05:46:21.342Z
Milton Vilela
https://labdegaragem.com/profile/MiltonVilela
<p>A utilização de um Garagino simplificou a montagem do protótipo do vídeo abaixo.</p>
<p>O próximo passo será a substituição do outro Arduino por um Garagino e substituição dos Shields por componentes separados para facilitar a montagem como um único conjunto, mais acessível e mais compacto.</p>
<p>Material básico:</p>
<p>Arduino Uno R3;</p>
<p>Garagino do Laboratório de Garagem;</p>
<p>MicroSD da Sparkkfun;</p>
<p>LCD 16x2 e</p>
<p>3 x drives Pololu DRV8825. </p>
<p> </p>
<p>Link do…</p>
<p>A utilização de um Garagino simplificou a montagem do protótipo do vídeo abaixo.</p>
<p>O próximo passo será a substituição do outro Arduino por um Garagino e substituição dos Shields por componentes separados para facilitar a montagem como um único conjunto, mais acessível e mais compacto.</p>
<p>Material básico:</p>
<p>Arduino Uno R3;</p>
<p>Garagino do Laboratório de Garagem;</p>
<p>MicroSD da Sparkkfun;</p>
<p>LCD 16x2 e</p>
<p>3 x drives Pololu DRV8825. </p>
<p> </p>
<p>Link do vídeo:</p>
<p> </p>
<p><a href="http://www.youtube.com/watch?v=Y0ASDqrFbDs">http://www.youtube.com/watch?v=Y0ASDqrFbDs</a></p>
avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64 avrdude: stk500_cmd(): programmer is out of sync
tag:labdegaragem.com,2012-08-22:6223006:Topic:159311
2012-08-22T22:39:50.811Z
Alexandre Yoshikawa
https://labdegaragem.com/profile/AlexandreYoshikawa
<p>Galera boa noite.</p>
<p></p>
<p>Vê se alguém pode me ajudar.</p>
<p>Comprei um aplicativo no GooglePlay (EightControl) </p>
<p><a href="https://play.google.com/store/apps/details?id=at.klp.led1control#?t=W251bGwsMSwyLDIxMiwiYXQua2xwLmxlZDFjb250cm9sIl0.">https://play.google.com/store/apps/details?id=at.klp.led1control#?t=W251bGwsMSwyLDIxMiwiYXQua2xwLmxlZDFjb250cm9sIl0.</a></p>
<p></p>
<p>Após fazer todos os procedimentos que é solicitado(instalei na biblioteca as pastas Aes256 e Timer1 e o…</p>
<p>Galera boa noite.</p>
<p></p>
<p>Vê se alguém pode me ajudar.</p>
<p>Comprei um aplicativo no GooglePlay (EightControl) </p>
<p><a href="https://play.google.com/store/apps/details?id=at.klp.led1control#?t=W251bGwsMSwyLDIxMiwiYXQua2xwLmxlZDFjb250cm9sIl0.">https://play.google.com/store/apps/details?id=at.klp.led1control#?t=W251bGwsMSwyLDIxMiwiYXQua2xwLmxlZDFjb250cm9sIl0.</a></p>
<p></p>
<p>Após fazer todos os procedimentos que é solicitado(instalei na biblioteca as pastas Aes256 e Timer1 e o txt na W5100), abri o programa do Arduíno e ao tentar fazer upload do script abaixo está gerando o seguinte erro:</p>
<p></p>
<p><strong><span style="color: #ff0000;">avrdude: stk500_paged_write(): (a) protocol error, expect=0x14, resp=0x64</span></strong><br/><strong><span style="color: #ff0000;">avrdude: stk500_cmd(): programmer is out of sync</span></strong></p>
<p></p>
<p>Alguém pode me ajudar por favor?</p>
<p>Possuo um Arduíno Uno + Ethernet Shield W5100.</p>
<p></p>
<p></p>
<p></p>
<p><span style="color: #0000ff;">/********************************************************************************************</span><br/><span style="color: #0000ff;">Eight Control is a universal IP based remote control system. This is the server application,</span> <br/><span style="color: #0000ff;">it is controlled from an Android device. Written by Klaus Pintoffl in April 2012. Feel free</span> <br/><span style="color: #0000ff;">to distribute and modify the code.</span><br/><span style="color: #0000ff;">********************************************************************************************/</span></p>
<p><span style="color: #0000ff;">#include <SPI.h></span><br/><span style="color: #0000ff;">#include <Ethernet.h></span><br/><span style="color: #0000ff;">#include <SD.h></span><br/><span style="color: #0000ff;">#include <EEPROM.h></span><br/><span style="color: #0000ff;">#include <TimerOne.h></span><br/><span style="color: #0000ff;">#include <aes256.h></span><br/><span style="color: #0000ff;">#include <avr/wdt.h></span></p>
<p><br/><span style="color: #0000ff;">//network parameters</span><br/><span style="color: #0000ff;">byte IpArray[4];</span><br/><span style="color: #0000ff;">byte mac[6];</span><br/><span style="color: #0000ff;">byte GatewayArray[4];</span><br/><span style="color: #0000ff;">byte SubnetArray[4];</span><br/><span style="color: #0000ff;">int Port=0;</span><br/><span style="color: #0000ff;">//output pins</span><br/><span style="color: #0000ff;">int outPins[] = {</span><br/> <span style="color: #0000ff;">9,8,7,6,5,3,2,1,0};</span><br/><span style="color: #0000ff;">//delays in sec for auto-off</span> <br/><span style="color: #0000ff;">int Delay[] = {</span><br/> <span style="color: #0000ff;">-1,0,0,0,0,0,0,0,0};</span><br/><span style="color: #0000ff;">//substract from delays until 0</span> <br/><span style="color: #0000ff;">int DelayCounter[] = {</span><br/> <span style="color: #0000ff;">-1,0,0,0,0,0,0,0,0};</span><br/><span style="color: #0000ff;">//restore function?</span> <br/><span style="color: #0000ff;">boolean SaveState[] = {</span><br/> <span style="color: #0000ff;">true,false,false,false,false,false,false,false,false};</span><br/><span style="color: #0000ff;">//setings file from SD card</span> <br/><span style="color: #0000ff;">File file1;</span><br/><span style="color: #0000ff;">//incoming string from client</span><br/><span style="color: #0000ff;">String inString;</span><br/><span style="color: #0000ff;">//Random String sent to client</span><br/><span style="color: #0000ff;">String RandomString;</span><br/><span style="color: #0000ff;">//Encoded String generated at Server</span><br/><span style="color: #0000ff;">String encServer;</span><br/><span style="color: #0000ff;">//creates very first random</span> <br/><span style="color: #0000ff;">boolean firstRound = true;</span><br/><span style="color: #0000ff;">//context for encryption</span><br/><span style="color: #0000ff;">aes256_context ctx1;</span><br/><span style="color: #0000ff;">//strong background key, 32 byte</span><br/><span style="color: #0000ff;">uint8_t key[] = {</span> <br/> <span style="color: #0000ff;">107,99,89,10,79,109,105,102,116,112,80,113,86,106,77,116,</span> <br/> <span style="color: #0000ff;">112,57,105,120,97,6,103,118,7,81,107,78,76,80,67,114};</span></p>
<p><span style="color: #0000ff;">//set true for serial debugging</span><br/><span style="color: #0000ff;">boolean debug = false;</span> <br/><span style="color: #0000ff;">//if debug, 2 pins are needed for Serial</span><br/><span style="color: #0000ff;">int FnNr = 8;</span><br/><span style="color: #0000ff;">//set false if Arduino with bootloader used (conflicts)</span><br/><span style="color: #0000ff;">boolean watchdog = false;</span></p>
<p><span style="color: #0000ff;">void setup(){</span></p>
<p><br/> <span style="color: #0000ff;">//if watchdog used, set it to 8 sec first</span><br/> <span style="color: #0000ff;">if (watchdog) {</span><br/> <span style="color: #0000ff;">MCUSR=0;</span><br/> <span style="color: #0000ff;">wdt_enable(WDTO_8S);</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//if debug, use 6 functions and start Serial</span> <br/> <span style="color: #0000ff;">if (debug) {</span><br/> <span style="color: #0000ff;">FnNr = 6;</span> <br/> <span style="color: #0000ff;">Serial.begin(9600);</span><br/> <span style="color: #0000ff;">Serial.println("Debug true, 6 Functions used");</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//card has to be initialized for pin 4</span> <br/> <span style="color: #0000ff;">if (!SD.begin(4)) {</span> <br/> <span style="color: #0000ff;">//if (debug) Serial.println("Card init failed");</span><br/> <span style="color: #0000ff;">return;</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//Read the network and user config from SD Card:</span><br/> <span style="color: #0000ff;">file1 = SD.open("Settings.txt");</span></p>
<p><span style="color: #0000ff;">if (file1) {</span> <br/> <span style="color: #0000ff;">char allText[file1.available()];</span> <br/> <span style="color: #0000ff;">int length = file1.available();</span></p>
<p><span style="color: #0000ff;">//writes all bytes of text into the array</span><br/> <span style="color: #0000ff;">for (int x=0; x<length; x++){</span> <br/> <span style="color: #0000ff;">allText[x] = file1.read();</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">char* parts;</span><br/> <span style="color: #0000ff;">parts = strtok (allText, ",=. \n");</span></p>
<p><span style="color: #0000ff;">while (parts != NULL){</span><br/> <span style="color: #0000ff;">//buid a String from the token</span> <br/> <span style="color: #0000ff;">String s = String(parts);</span></p>
<p><span style="color: #0000ff;">//if IP type, then the next 4 bytes are the IP adress</span><br/> <span style="color: #0000ff;">if (s=="IP") {</span> <br/> <span style="color: #0000ff;">for (int i= 0; i<4; i++){</span><br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span><br/> <span style="color: #0000ff;">//define array of char with length of string s</span><br/> <span style="color: #0000ff;">char xy[s.length()];</span><br/> <span style="color: #0000ff;">//write s into array xy. 2nd parameter must be type int</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span><br/> <span style="color: #0000ff;">//atoi needs a char array, not a string</span> <br/> <span style="color: #0000ff;">int param = atoi(xy);</span> <br/> <span style="color: #0000ff;">IpArray[i] = param;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">//if MAC type, then the next 6 bytes are the MAC adress</span><br/> <span style="color: #0000ff;">if (s=="MAC") {</span> <br/> <span style="color: #0000ff;">for (int i= 0; i<6; i++){</span><br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n-");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span><br/> <span style="color: #0000ff;">char xy[s.length()];</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span> <br/> <span style="color: #0000ff;">int param = atoi(xy);</span> <br/> <span style="color: #0000ff;">mac[i] = param;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">//if Gateway type, then the next 4 bytes are the Gateway adress</span><br/> <span style="color: #0000ff;">if (s=="Gateway") {</span><br/> <span style="color: #0000ff;">for (int i= 0; i<4; i++){</span><br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span><br/> <span style="color: #0000ff;">char xy[s.length()];</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span> <br/> <span style="color: #0000ff;">int param = atoi(xy);</span> <br/> <span style="color: #0000ff;">GatewayArray[i] = param;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">//if Subnet type, then the next 4 bytes are the Subnet adress</span><br/> <span style="color: #0000ff;">if (s=="Subnet") {</span><br/> <span style="color: #0000ff;">for (int i= 0; i<4; i++){</span><br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span><br/> <span style="color: #0000ff;">char xy[s.length()];</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span> <br/> <span style="color: #0000ff;">int param = atoi(xy);</span> <br/> <span style="color: #0000ff;">SubnetArray[i] = param;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">//if Port type, then the next byte is the Port</span><br/> <span style="color: #0000ff;">if (s=="Port") {</span> <br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span><br/> <span style="color: #0000ff;">char xy[s.length()];</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span> <br/> <span style="color: #0000ff;">Port = atoi(xy);</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">//for the Delays 1 to 8:</span><br/> <span style="color: #0000ff;">if(s.indexOf("Delay")>-1) {</span><br/> <span style="color: #0000ff;">for (int x=1; x<=8; x++){</span><br/> <span style="color: #0000ff;">if (s=="Delay"+String(x)) {</span><br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span> <br/> <span style="color: #0000ff;">char xy[s.length()];</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span><br/> <span style="color: #0000ff;">Delay[x] = DelayCounter[x] = atoi(xy);</span><br/> <span style="color: #0000ff;">//only 1 possibilyty (Delay1 to Delay8)</span><br/> <span style="color: #0000ff;">break;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//If s is SaveState, than at least 1 function should be set on after reboot</span><br/> <span style="color: #0000ff;">if (s=="SaveState") {</span> <br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span> <br/> <span style="color: #0000ff;">for (int x=1; x<=8; x++){</span><br/> <span style="color: #0000ff;">if (s.indexOf (String(x)) >-1) SaveState[x] = true;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><br/> <span style="color: #0000ff;">//if Key, one round reads this code</span><br/> <span style="color: #0000ff;">if (s=="Key") {</span><br/> <span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span><br/> <span style="color: #0000ff;">String s = String(parts);</span> <br/> <span style="color: #0000ff;">char xy[s.length()];</span> <br/> <span style="color: #0000ff;">s.toCharArray(xy, s.length()+1);</span> <br/> <span style="color: #0000ff;">int loops = s.length()-1;</span> <br/> <span style="color: #0000ff;">if (loops>32)loops = 32; //max 32 digits of user key used, rest ignored</span></p>
<p><span style="color: #0000ff;">for (int x=0; x<loops; x++){</span><br/> <span style="color: #0000ff;">key[x] = (byte)(xy[x]);</span><br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">};</span></p>
<p><span style="color: #0000ff;">parts = strtok(NULL,",=. \n");</span> <br/> <span style="color: #0000ff;">}//end while (parts != NULL)</span></p>
<p><span style="color: #0000ff;">file1.close();</span></p>
<p><span style="color: #0000ff;">//Network config read from SD Card done.</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//SaveState wins over Delay: Both at the same time does not make sense</span><br/> <span style="color: #0000ff;">for (int x=1; x<=8; x++){</span><br/> <span style="color: #0000ff;">if (SaveState[x] == true) {</span><br/> <span style="color: #0000ff;">Delay[x]=0;</span><br/> <span style="color: #0000ff;">DelayCounter[x]=0;</span><br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//set the pins as outputs. 0 is ISR indicator</span><br/> <span style="color: #0000ff;">for (int x=0; x<=FnNr; x++){</span> <br/> <span style="color: #0000ff;">pinMode(outPins[x], OUTPUT);</span><br/> <span style="color: #0000ff;">}</span><br/> <br/> <span style="color: #0000ff;">//these pins are connected to USB and 0 is on by default</span><br/> <span style="color: #0000ff;">digitalWrite (0, LOW);</span> <br/> <span style="color: #0000ff;">digitalWrite (1, LOW);</span></p>
<p><span style="color: #0000ff;">//Check states of EEProms and switch outputs on if needed:</span><br/> <span style="color: #0000ff;">for (int x=1; x<=FnNr; x++){</span> <br/> <span style="color: #0000ff;">if ((SaveState[x])&& (EEPROM.read(x)==1)) digitalWrite (outPins[x], HIGH);</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//Uses TimerOne Library. Every second ISR1 is called.</span><br/> <span style="color: #0000ff;">Timer1.initialize(1000000);</span> <br/> <span style="color: #0000ff;">Timer1.attachInterrupt(ISR1);</span></p>
<p><span style="color: #0000ff;">Ethernet.begin(mac, IpArray,GatewayArray,SubnetArray);</span></p>
<p><span style="color: #0000ff;">//avoids mem fragmentation when appending to Strings</span><br/> <span style="color: #0000ff;">inString.reserve(51);</span><br/> <span style="color: #0000ff;">encServer.reserve(33);</span><br/> <span style="color: #0000ff;">RandomString.reserve(11);</span></p>
<p><span style="color: #0000ff;">}//end setup</span></p>
<p></p>
<p></p>
<p></p>
<p><br/><span style="color: #0000ff;">void loop(){</span></p>
<p><span style="color: #0000ff;">//reset watchdog</span><br/> <span style="color: #0000ff;">if (watchdog) wdt_reset();</span></p>
<p><span style="color: #0000ff;">//has both to be done here, after Port read</span> <br/> <span style="color: #0000ff;">EthernetServer server(Port);</span> <br/> <span style="color: #0000ff;">server.begin();</span></p>
<p><span style="color: #0000ff;">EthernetClient client = server.available();</span></p>
<p><span style="color: #0000ff;">if (client) {</span></p>
<p><span style="color: #0000ff;">//http request ends with a blank line</span><br/> <span style="color: #0000ff;">boolean current_line_is_blank = true;</span> <br/> <span style="color: #0000ff;">while (client.connected()) {</span></p>
<p><span style="color: #0000ff;">if (client.available()) {</span><br/> <span style="color: #0000ff;">char c = client.read();</span><br/> <span style="color: #0000ff;">//50 is 8 byte more than actually needed</span><br/> <span style="color: #0000ff;">if (inString.length() < 50) {</span> <br/> <span style="color: #0000ff;">inString.concat(c);</span><br/> <span style="color: #0000ff;">}</span></p>
<p><br/> <span style="color: #0000ff;">if (c == '\n' && current_line_is_blank) {</span></p>
<p><span style="color: #0000ff;">//if (debug) Serial.println(inString);</span></p>
<p><span style="color: #0000ff;">//send standard http response header</span><br/> <span style="color: #0000ff;">client.println("HTTP/1.1 200 OK");</span><br/> <span style="color: #0000ff;">client.println("");</span><br/> <span style="color: #0000ff;">client.println();</span></p>
<p><span style="color: #0000ff;">//if a AES-256 encoded String is returned</span><br/> <span style="color: #0000ff;">if(inString.indexOf("R")>0){</span></p>
<p><span style="color: #0000ff;">//substringmethod: start inclusive, end exclusive</span><br/> <span style="color: #0000ff;">String encClient = inString.substring(inString.indexOf("R")+1, inString.indexOf("S"));</span></p>
<p><span style="color: #0000ff;">//only if the 2 strings match, check and execute F-Functions, toggle pins, below</span> <br/> <span style="color: #0000ff;">if ((encClient==encServer) && (inString.indexOf("F")>0)) {</span></p>
<p><span style="color: #0000ff;">int NumPos = inString.indexOf("F")+1;</span></p>
<p><span style="color: #0000ff;">for (int x=1; x<=FnNr; x++){</span> <br/> <span style="color: #0000ff;">if(inString.indexOf(String(x)) == NumPos){</span> <br/> <span style="color: #0000ff;">if (!digitalRead(outPins[x])) digitalWrite(outPins[x], HIGH);</span> <br/> <span style="color: #0000ff;">else digitalWrite(outPins[x], LOW);</span> <br/> <span style="color: #0000ff;">if (SaveState[x]) {</span> <br/> <span style="color: #0000ff;">if(digitalRead(outPins[x])) EEPROM.write(x, 1);</span> <br/> <span style="color: #0000ff;">else EEPROM.write(x, 0);</span> <br/> <span style="color: #0000ff;">};</span><br/> <span style="color: #0000ff;">//one one F function possible per inString</span><br/> <span style="color: #0000ff;">break;</span> <br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">}</span><br/> <span style="color: #0000ff;">}//end if compare strings</span></p>
<p><span style="color: #0000ff;">else {</span> <br/> <span style="color: #0000ff;">delay(3000);</span><br/> <span style="color: #0000ff;">} //checksum does not match</span></p>
<p><span style="color: #0000ff;">//prepare next random string to send</span><br/> <span style="color: #0000ff;">prepareNextRandom();</span> <br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//S: Pin status to be returned</span><br/> <span style="color: #0000ff;">if(inString.indexOf("S")>0){</span></p>
<p><span style="color: #0000ff;">//do this only once after startup</span><br/> <span style="color: #0000ff;">if (firstRound){</span> <br/> <span style="color: #0000ff;">prepareNextRandom();</span> <br/> <span style="color: #0000ff;">firstRound=false;</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//get pin status</span><br/> <span style="color: #0000ff;">for (int x=1; x<=FnNr; x++){</span> <br/> <span style="color: #0000ff;">client.print("F");</span><br/> <span style="color: #0000ff;">client.print(x);</span><br/> <span style="color: #0000ff;">if(digitalRead(outPins[x])) client.print("p");</span> <br/> <span style="color: #0000ff;">else client.print("n");</span><br/> <span style="color: #0000ff;">}//end for</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//Y means client requests random number</span> <br/> <span style="color: #0000ff;">if(inString.indexOf("Y")>0){</span> <br/> <span style="color: #0000ff;">client.print("X");</span><br/> <span style="color: #0000ff;">client.print(RandomString);</span> <br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//K means client requests temp reading. Separate all readings by "_".</span> <br/> <span style="color: #0000ff;">if(inString.indexOf("K")>0){</span> <br/> <span style="color: #0000ff;">client.print("U");</span><br/> <br/> <span style="color: #0000ff;">//delete following line when using newest version of Eight Control, if you want to transmit values to Android app</span><br/> <span style="color: #0000ff;">client.print(analogRead(0));</span><br/> <br/> <span style="color: #0000ff;">//********************************use this code (uncomment) with newest Version from Eight Control*********************</span> <br/> <br/><span style="color: #0000ff;">// //make any calculation you want to transmit to the Android app</span> <br/><span style="color: #0000ff;">// float TMP36 = (5.0 / 1024.0 * analogRead(0) - 0.5) * 100;</span><br/><span style="color: #0000ff;">// float voltage = 5.0 / 1024.0 * analogRead(3);</span><br/><span style="color: #0000ff;">//</span> <br/><span style="color: #0000ff;">// //Value 1: Set title in Android app settings</span><br/><span style="color: #0000ff;">// client.print(TMP36);</span> <br/><span style="color: #0000ff;">// client.print("_");</span> <br/><span style="color: #0000ff;">//</span> <br/><span style="color: #0000ff;">// //Value 2: Set title in Android app settings</span><br/><span style="color: #0000ff;">// client.print(voltage);</span><br/><span style="color: #0000ff;">// client.print("_");</span> <br/><span style="color: #0000ff;">//</span> <br/><span style="color: #0000ff;">// //Value 3: Set title in Android app settings</span> <br/><span style="color: #0000ff;">// client.print(analogRead(1));</span><br/><span style="color: #0000ff;">// client.print("_");</span><br/><span style="color: #0000ff;">//</span> <br/><span style="color: #0000ff;">// //Value 4: Set title in Android app settings</span><br/><span style="color: #0000ff;">// client.print(analogRead(4));</span><br/><span style="color: #0000ff;">// client.print("_");</span><br/><span style="color: #0000ff;">//</span> <br/><span style="color: #0000ff;">// //Value 5 ff: Will be automatically named Value 5</span><br/><span style="color: #0000ff;">// client.print(analogRead(5));</span><br/><span style="color: #0000ff;">// // not needed for last: client.print("_");</span> <br/> <br/> <span style="color: #0000ff;">//********************************use this code with newest Version from Eight Control**********************************</span> <br/> <br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">break;</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//starting a new line:</span><br/> <span style="color: #0000ff;">if (c == '\n') {</span><br/> <span style="color: #0000ff;">current_line_is_blank = true;</span><br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">//a character on the current line</span><br/> <span style="color: #0000ff;">else if (c != '\r') {</span> <br/> <span style="color: #0000ff;">current_line_is_blank = false;</span><br/> <span style="color: #0000ff;">}</span><br/> <span style="color: #0000ff;">}</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//gives client time to receive the data</span><br/> <span style="color: #0000ff;">delay(1);</span><br/> <span style="color: #0000ff;">//reset the received string</span> <br/> <span style="color: #0000ff;">inString = "";</span> <br/> <span style="color: #0000ff;">client.stop();</span><br/> <span style="color: #0000ff;">}</span> <br/><span style="color: #0000ff;">}//end loop</span></p>
<p><span style="color: #0000ff;">void prepareNextRandom(){ //creates random, encodes it</span></p>
<p><span style="color: #0000ff;">randomSeed(millis());</span><br/> <span style="color: #0000ff;">//0 to highest possible long</span><br/> <span style="color: #0000ff;">long InitialRandom = random(2147483647);</span> <br/> <span style="color: #0000ff;">RandomString = "";</span><br/> <span style="color: #0000ff;">//Sent to client upon request</span><br/> <span style="color: #0000ff;">RandomString+=InitialRandom;</span></p>
<p><span style="color: #0000ff;">//update data array</span><br/> <span style="color: #0000ff;">uint8_t data[] = {</span><br/> <span style="color: #0000ff;">0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };</span></p>
<p><span style="color: #0000ff;">for (int x=0; x<RandomString.length(); x++){</span> <br/> <span style="color: #0000ff;">data[x] = RandomString[x];</span><br/> <span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//AES-256 encoding of data array</span> <br/> <span style="color: #0000ff;">aes256_init(&ctx1, key);</span><br/> <span style="color: #0000ff;">aes256_encrypt_ecb(&ctx1, data);</span> <br/> <span style="color: #0000ff;">aes256_done(&ctx1);</span></p>
<p><span style="color: #0000ff;">encServer = "";</span></p>
<p><span style="color: #0000ff;">for (int x=0; x<16; x++){</span> <br/> <span style="color: #0000ff;">int a = data[x];</span><br/> <span style="color: #0000ff;">String b = String (a, HEX);</span><br/> <span style="color: #0000ff;">if(b.length()==1) b="0"+b;</span> <br/> <span style="color: #0000ff;">encServer.concat(b);</span> <br/> <span style="color: #0000ff;">}</span> <br/><span style="color: #0000ff;">}</span></p>
<p><span style="color: #0000ff;">//interrupt service routine to handle delays</span></p>
<p><span style="color: #0000ff;">void ISR1(){</span></p>
<p><span style="color: #0000ff;">//toggle control led</span><br/> <span style="color: #0000ff;">if (digitalRead(outPins[0])) digitalWrite(outPins[0], LOW);</span> <br/> <span style="color: #0000ff;">else digitalWrite(outPins[0], HIGH);</span></p>
<p><span style="color: #0000ff;">//Check and decrement delays</span><br/> <span style="color: #0000ff;">for (int x=1; x<=FnNr; x++){</span></p>
<p><span style="color: #0000ff;">if (Delay[x] >0) {</span><br/> <span style="color: #0000ff;">if ((DelayCounter[x]>0) && (digitalRead(outPins[x])==HIGH)){</span> <br/> <span style="color: #0000ff;">DelayCounter[x]--;</span><br/> <span style="color: #0000ff;">}</span> <br/> <span style="color: #0000ff;">else {</span> <br/> <span style="color: #0000ff;">digitalWrite(outPins[x], LOW);</span><br/> <span style="color: #0000ff;">DelayCounter[x]=Delay[x];</span><br/> <span style="color: #0000ff;">}</span><br/> <span style="color: #0000ff;">}</span><br/> <span style="color: #0000ff;">}</span><br/><span style="color: #0000ff;">}</span></p>
<p></p>