quinta-feira, 9 de novembro de 2017

Seu Android velhinho está lento? eu posso ter a resposta disso


Vamos ver se eu adivinho: Você tem seu smartphone Android a mais de 1 ano, e ele no começo até funcionava bem, mas apesar de todo cuidado, de um tempo pra cá ele se tornou horrívelmente lento, constantes travamentos, você reseta ele e logo ele volta a ficar lento e vêm a sua cabeça: "Preciso de um celular novo". Você sabe o que está acontecendo ai, isso se chama:

OBSOLÊNCIA PROGRAMADA!

Para o google, chegou a hora de você aposentar seu telefone e comprar outro "mais rápido". Mas como isso acontece? Aparentemente existe um artificio que torna seu celular cada vez mais lento, e um destes artifícios são as terríveis atualizações constantes. Sim ... updates updates updates updates updates updates, eles não param de chegar, e eu chego a me perguntar, isso tudo é realmente necessário? Eles dizem que é por questões de segurança, mas tem bug ai fazendo aniversário, servindo de exploit pra muito vírus manjado e eles não arrumam. Entenda que a Google não ta muto preocupada com você, ela ta preocupada em fazer os fabricantes venderem aparelho.

Tudo isso pode parecer conversa fiada sem solução, mas a verdade é que eu descobri uma forma de amenizar os efeitos da obsolência programada, e para isso, precisamos fazer com que o Google pare de monitorar o seu aparelho, congelando o Google Play Store e o App do Google. Para ter melhores resultados siga os passos a baixo:

1. Resete seu celular para as configurações de fábrica
2. Faça login e configure normalmente, deixe ele atualizar todos os apps
3. Se tiver root ou for rooteavel, integre as atualizações do sistema no sistema do Android, um aplicativo bom para fazer isso é o "Link2SD"
4. Agora vem a parte principal. Vá em configurar - Apps - Guia "Todos" - Procure por App do Google e clique nele, e logo em seguida clique em "Desativar", faça o mesmo com o "Google Play Store".



5. Verifique na guia "Desativados" que agora tanto o App do Google como o Google Play Store estão desativados.


A partir deste momento, logo após você reiniciar o dispositivo, seu aparelho não irá receber mais atualizações e esse é um dos motivos pelo qual ele se torna tão lento as vezes, além é claro do App do google entupir sua memoria RAM com lixo pra deixa-lo lento. Apesar dele ter sumido da sua lista de programas, você pode esporadicamente habilitar ele lá na guia "Desativados" para instalar novos apps ou dar uma atualizada geral nos programas, mas dai fica somente ao seu controle fazer isso.

domingo, 15 de outubro de 2017

PowerBank Solar - Apenas mais um "óleo de cobra" chinesa ?



Hoje eu matei a curiosidade desta "maravilha" vinda da China. Afinal de contas, ele só recarrega pelo sol com o telefone conectado? Ele realmente recarrega a bateria somente deixando na luz solar? A resposta é mais simples do que parece, mais ou menos.

A primeira coisa que notei ao abri-lo (sem um parafuso ou cola, apenas encaixes) é que aparentemente a questão "resistente à água" é furado, aquela borracha lateral apenas engana, se essa coisa pegar uma chuva diretamente, ela vai encharcar por dentro, tenha isso em mente.

Mas indo direto ao ponto, depois de comprar, eu vi que ele já veio com 75% de carga, após testar no meu celular, pelo menos percebi que ele carrega bem usando a bateria interna, em 30 minutos meu celular passou de 80% para 100% de carga e o powerbank caiu 1 ponto, indicando aparentemente 50% de carga. Manhã seguinte, deixei ele das 7:00 da manhã até 12:00 e ele continuava mostrando 50% de carga! após várias opiniões contrárias na internet, resolvi abrir para ver qual é a real, e não foi muito animador.

Medi a bateria interna e estava medindo 3.7V, após colocar no sol medi novamente e continuava medindo 3.7V ! ou seja, não tem carga nenhuma empurrando ai, apesar de medir o painel solar e este estar medindo 2.6V, vi que a solda e os cabos eram qualidade "xing-ling" e resolvi trocar, e já subiu para 2.8V! mesmo assim não parecia estar fazendo diferença na bateria, por isso eu desconectei a bateria e percebi que os mesmos 2.8V vindos do painel solar estavam sendo enviados aos contatos da bateria, ou seja, aparentemente esse painel solar talvez se tiver um sol de rachar cana chegue a uns 3.0V , mas o grande problema é que eu deixei ele descarregar totalmente e a bateria ainda media 3.01V, ou seja, mesmo deixando o dia todo debaixo do sol, ele não foi capaz de recarregar nem 1% da bateria do meu celular.

O mais bizarro é que eu resolvi medir a resistência interna entre o painel solar e a bateria e estava dando uma impedância de 5kR! Ou seja, ainda que seja pouca energia, internamente no circuito a energia precisa passar por 5000 R para chegar na bateria, por isso que eu resolvi ligar a placa solar diretamente na bateria, e liguei em série um pequeno led que iria servir como diodo, para ver se passa corrente, o resultado foi bem óbvio, mesmo debaixo de um solão, um led simples nem sequer deu sinal de vida, pois a tensão contrária vindo da bateria é maior, mesmo ela estando em carga mínima.

O resultado final é SIM, o carregador portátil solar é mais uma merda xing-ling que promete fazer algo que não cumpre, mesmo tendo os componentes para isso, pois tecnicamente falando é pessimamente mal projetado, mas ainda assim pode ser usado como um carregador portátil comum se você resolver carrega-lo na tomada, mas não acredite que ele irá salvar sua vida, numa situação em que você só tenha o sol como fonte primária de energia.

terça-feira, 1 de agosto de 2017

Enviando mensagem no WhatsApp, sem ter a pessoa nos contatos

Se você trabalha no comércio, assim como eu, sabe da importância do uso do WhatsApp para falar com clientes, principalmente pela questão da praticidade e custo quase zero. Porém um recurso que ainda falta é ter a capacidade de mandar uma mensagem para alguém, que não está na sua lista de contatos. Para isso existem "gambiarras" que dão certo, no caso se você quiser usar o próprio Android para fazer isso, vasta usar o Chat2x:

https://play.google.com/store/apps/details?id=in.saigopi.whatsappmessagestounsavednumber

Um excelente aplicativo, simples, sem propagandas e totalmente funcional que permite você mandar mensagem para alguém que não está na sua lista de contato.

Como no meu caso, eu uso mais o WhatsApp Web, ou seja no PC, eu mesmo desenvolvi um pequeno aplicativo que faz a mesma coisa, mas usando a plataforma https://web.whatsapp.com , tudo que você tem que fazer é parear o seu WhatsApp na plataforma, no seu navegador padrão e executar esse aplicativo, basta preecher o numero do telefone, incluindo o DDD que ele irá abrir a janela da conversa no whatsapp web. Simples não ? se quiser utilizar, disponibilizo o link aqui:

https://mega.nz/#!lwU0AbKK!hQVmlFy45lINdue7P7lLHfsya2n_Gn74DO-l9DfKdd8

quarta-feira, 21 de junho de 2017

Bitcoin à beira do precipício


Quem aqui está otimista com a grande valorização do Bitcoin, heis um conselho: VENDA TUDO !

O motivo é simples, o que era para ser uma moeda descentralizada, hoje é praticamente dominada pelos chineses, pois eles possuem mais de 60% de toda capacidade de mineração, e isso somado com a exponencial dificuldade de conseguir novas unidades, torna a mineração algo tão dificultoso e caro, que a maioria dos mineradores "médios" estão deixando de minerar para minerar altcoins. O resultado disso é a exigência de tarifas absurdas para verificar uma transação que pode levar várias para ser completada, e esse tempo de espera ainda abre uma brecha para a geração de gasto duplo, ou seja fraude. Imagine a seguinte situação: Você aceita bitcoin no seu comércio, chega um cliente e compra algo bem valioso e quer pagar em bitcoin. Ele faz a transação e já quer levar o produto. Você pede para ele esperar a transação se completar, mas essa já está demorando mais de 1h e nada. Impaciente, você libera a compra, ao chegar em casa com o produto, a transação ainda não foi confirmada, o cliente vai e faz um gasto duplo com uma tarifa bem maior. No final das contas você não recebe os bitcoins e fica no prejuízo, e deixa de aceitar a moeda, além de vender todos os bitcoins que tem guardados. Agora imagine todo mundo fazendo isso, aumenta a oferta em relação a procura o preço cai, o preço cai, aumenta o medo de perda e desencadeia em mais vendas e menor preço, até não valer quase nada.

Esse cenário é uma bomba relógio pronta para explodir no bolso daqueles "desavisados" que confiaram cegamente na moeda. O bitcoin ou qualquer outra altcoin não é, nuca foi e nunca será o substituto definitivo da moeda local, pois não há segurança em nada, pois se você perder tudo do dia pra noite, você não terá nada nem ninguém a quem recorrer ou processar.

A coisa ta tão feia que até um dos principais desenvolvedores do código Bitcoin, o Mike Hearn, disse publicamente que abandonou o projeto e vendeu todos o seus bitcoins guardados.

Eu falo por mim mesmo, que atualmente eu estou "zerado" em relação ao bitcoin. Eu perdi dinheiro com a moeda na tentativa de mineração, e logo depois recuperei esse dinheiro perdido com a sua alta valorização atual, eu me dei por satisfeito, e troquei todos os meus bitcoins por litecoins, por uma simples questão de conveniência. Atualmente o Ethereum está sendo uma boa jogada assim como o Blackcoin que é o percursor das altcoins que não utilizam mineradores, algo que o Ethereum está se convergindo também.

Ou seja, se hoje você quer investir em cryptomoedas, esqueça o bitcoin, invista em Ethereum.

Update 01/08/2017

Para aqueles que seguiram meu conselho, aparentemente se deram bem, pois o BTC não voltou mais ao patamar de > R$9000,00. Mas a boa noticia é que aparentemente o Fork para o BTH (Bitcoin Cash) está se tornando realidade e os problemas citados acima podem ser solucionados, principalmente a questão das taxas de envio.

Se você foi inteligente e manteve seus bitcoins numa carteira HD, você não tem o que se preocupar, principalmente se for no formato BIP32, pois nesse caso você não precisa fazer nada, caso opte por usar o BitCoin Cash, pois como é um fork, ou seja, uma derivação, basta você usar o caminho de derivação do BitCoin que é M/44H/0H/0H que suas moedas continuaram lá. Agora é esperar pra ver o que vai acontecer, mesmo assim, é uma boa notícia.

quinta-feira, 11 de maio de 2017

Windows 8.1 Patches - C++ 2015 e dot net 3.5



Não é de se estranhar que a M$ está desesperadamente tentando empurrar o Windows 10 a todo custo, há várias teorias sobre isso, e todas elas remetem a M$ simplesmente lucrar mais. Enfim, não estou aqui pra discutir isso, a questão aqui é que aparentemente para forçar o uso do Windows 10 a M$ está deixando o suporte de outros sistemas a "Deus Dará" e nesse caso estou falando do Windows 8.

Pra mim o Win8.1 + o Classic Start atualmente é o melhor sistema da M$ depois do Windows XP, é uma pena que aparentemente o suporte a ele esteja praticamente largado, pelo motivo já citado acima. Os 2 problemas que mais arranca os cabelos dos usuários do Win8.1 é o MS C++ 2015 responsável pelo erro da falta da DLL api-ms-win-crt-reap-l1-1-0.dll, que geralmente ocorre depois de instalar o Office 2016 o ITunes o Photoshop etc, e também a incapacidade de instalar o dot.net 3.5 automaticamente.

Vamos pelo mais fácil, o dot net 3.5 eu encontrei um instalador simples e eficaz o dotNetFx35_W8.1_x86_x64.exe, basta baixa-lo e o instalar e tudo estará resolvido.

Agora o MS C++ 2015 responsável pelo erro da dll "api-ms-win-crt-reap-l1-1-0.dll" é um pouco mais complicado, vamos no passo a passo:

1. Desative, mesmo que temporariamente o Windows Update: Painel de Controle --> Windows Update --> Alterar Configurações --> Nunca Verificar se há atualizações

2. Baixe e rode o Windows8.1-KB2999226-x64.msu (lembrando que esse é somente para versão x64)

3. Baixe e rode o vc_redist.x64.exe (também para versão x64)

Pronto ! parece simples quando está tudo mastigadinho né ? Todos os arquivos que você precisa estão nesse link: https://mega.nz/#F!sJR3FYzR!zCgIzRRrC2fKkn2swTdgjQ

Se seu Windows é a versão 32 bits, procure os arquivos equivalentes na versão 32, apesar que só aconselho você a usar esta versão se sua CPU não suporta x64, que venhamos e convenhamos, nesse caso nem deveria rodar o Windows 8.1.

sexta-feira, 21 de abril de 2017

Desisti do Linux, de novo !


Antes que você, xiita do código livre levante a mão para atirar a primeira pedra, já vou avisando, eu to nessa luta a provavelmente muito mais tempo que você !

É claro que eu, nem você jamais vai deixar de usar o Linux por definitivo, ele está por todo lugar, no seu celular, no seu roteador nas páginas da web etc, o que eu estou falando aqui é onde ele realmente não tem mais jeito, no computador pessoal. Não culpo o Linux em si, pois ele é somente o kernel, eu culpo as distribuições que aparentemente não sabem o que estão fazendo, e ficam criando firulas e perfumarias e esquecem de acertar o básico, a funcionalidade.

Vou contar um pouco da minha história no Linux. Desde o início a experiência não foi boa, isso foi a que, mais ou menos a 15 anos atras quando a Red Hat distribuía gratuitamente as ISOs na internet, sofrivelmente (a internet naquela época não era nada boa) eu baixei uma ISO e o resultado não foi muito bom, por falta de experiência minha eu acabei apagando todos os meus arquivos e ainda assim não consegui fazer ele rodar. Desisti, alguns anos depois surge o Kurumin, apesar de cheio de bugs e bem espalhafatoso, funcionava ! Que emoção ! Mesmo assim, depois de uma surra com o grub, eu consegui deixar como Dual Boot com o Windows, pois eu ainda queria rodar joguinhos como HalfLife, Counter Strike etc, Wine ?? nem pensar que naquela época ia rodar jogos.

Quando eu desisti de investir em Hardware, eu comprei um XBox 360, pois a ideia de ter jogos pirateados sempre me atraiu, eu já tinha um console cheio de jogos, desisti de ter um PC com jogos, sendo assim, fiquei livre para começar a usar o Ubuntu. Velhos problemas voltam a assombrar, como que eles ainda não resolveram isso ? Menus estranhos, falta de driver para impressora, atualizações bugadas, compartilhamento de arquivos sofrível pelo Samba, e muitas horas foram perdidas, com um comando mais cabeludo que o outro, encontrado em fóruns que jamais iria encontrar de novo até que finalmente deixei o sistema do jeito que eu queria.

Não vou mentir, fui feliz com o Ubuntu por alguns anos, sempre nessa luta de sempre ter que lapidar o sistema, e muitas horas eram perdidas para isso, não ligava, eu até que gostava do desafio. Até que terminei a faculdade e arrumei um emprego. O tempo era curto, mas colegas do trabalho gostavam de jogar o multiplayer do HL2 depois do serviço pela internet, ficaram decepcionados que eu não tinha placa de vídeo boa pra isso, até que um deles me deu sua placa de vídeo antiga, só pra eu me enturmar. Foi ai que os meus velhos problemas com o Linux voltaram.

O Driver da ATI era sofrível, e terrível pra instalar (para Windows era só next netxt finish), tudo bem, culpa da ATI, mas já não tinha mais tanto tempo como antes pra ficar brigando pra compilar pacotes deb, para ficar sem sistema a cada tentativa falha de instalação de driver de vídeo, mesmo assim eu consegui, mas não por muito tempo. Para o meu azar, a versão LTS do Ubuntu já estava no fim, e com o fim do suporte, eu atualizei para a versão seguinte, só que aquele driver de vídeo da ATI não funcionava mais, e nem teria mais um novo. Ok Windows, você venceu ! e é claro, magicamente tudo funcionava muito bem e de primeira no Windows, era até gratificante, a única coisa que enchia o saco eram os Adwares e Spywares da vida, mas tudo tem seu preço.

Assim foi durante muitos anos, e sempre tudo muito simples, afinal de contas, eu preciso de simplicidade, não sou mais aquele adolescente que tinha a tarde toda pra ficar procrastinando para deixar o sistema do jeito que eu queria, até porque meu XBox 360 já tinha se tornado obsoleto e voltara a usar o PC como principal fonte de jogos comprados pela Steam (agora eu tenho dinheiro pra comprar joguinhos, olha que evolução !), mas eu gosto de desafios, esse ano eu resolvi, vou dar mais uma chance para o Linux.

Comecei pelo Ubuntu novamente, e os mesmos velhos problemas, até pra criar um simples atalho, pra compartilhar arquivo na rede, etc etc etc, tudo me forçava a usar comandos no shell que eu sinceramente não tenho mais cabeça pra decorar, mais ainda interface é confusa e pesada, ahh, nesse meio tempo eu comprei um notebook também além do PC Desktop, e adivinha só, o Ubuntu não consegue ajustar o Brilho da tela ! claro que isso tinha solução, mas novamente tinha que lapidar arquivos de configuração do xorg que sinceramente já não tenho mais saco pra isso. Tentei várias distros, a maioria é claro, um fork do Ubuntu, todas elas, todas, apresentavam algum problema, seja ela qual for. A que mais funcionou bem pra mim foi o Ubuntu Mate, brilho da tela do meu notebook funcionava legal, instalava a maioria dos programas que eu precisava, só o Steam, que precisava novamente de alguma lapidação, outras coisas também, mas enfim ... no fim acabou funcionando.

Recentemente comprei um jogo no Steam, promoção boa, sabe como que é, um tal de "Layers Of Fear". Desempenho péssimo ! o jogo nem é tão bonito assim, eu sei que minha placa de vídeo recente uma ATI HD7700 aguentava o tranco, imagino que seja o Driver nativo do xorg, baixo o driver proprietário da ATI, especificamente para o modelo da minha placa de vídeo e para a versão do Ubuntu que estava usando, pra variar uma instalação tosca compactada que tem que ser rodada via terminal, instalação terminada com sucesso, mando reiniciar e ... o sistema não sobe mais.

Todo trabalho de deixar o sistema do jeito que eu queria foi em vão ... simplesmente fiquei na mão com uma tela preta e quer saber, novamente ... Windows você venceu ! Tudo funciona bem novamente, vou no ninite.com listo os programas que mais uso, instala tudo sozinho, baixo o driver da placa de vídeo, next next finish, Steam funciona de primeira, "Layers of Fear" rodando liso, coloco o Avast só por garantia e aqui estou eu feliz da vida.

Desisti, a Canonical foi a empresa que mais chegou perto de criar um SO baseado em Linux que realmente seja funcional, mas chegar perto não é chegar lá. Ainda acredito no poder do linux para dispositivos móveis, roteadores, servidores em geral, mas para Desktop, se em todos esses anos ninguém conseguiu até agora fazer a coisa direito, assino embaixo que nunca conseguira.

quinta-feira, 29 de dezembro de 2016

Conectando o controle sem fio do XBox360 no PC ou Raspberry Pi

Obviamente se você veio até aqui, é porque não quer comprar o receptor original do controle sem fio XBox360, está procurando uma solução mais "alternativa", primeiramente pelo preço absurdo de um hardware simples, segundo pela dificuldade de achar, e terceiro que na maioria das vezes você não quer mais um controle que acompanha o receptor, quer apenas usar o controle que já tem.

Infelizmente a MS ao contrário da Sony, não desenvolveu os controles sem fio baseado no protocolo bluetooth, que inviabiliza tentar qualquer "gambiarra" igual é feito com os controles do PS3 e PS4, a única coisa que é possível fazer é usar a própria placa de RF do XBox360, mais especificamente a placa que fica na parte frontal, que tem o botão de liga desliga e os leds. Como as primeiras versões do XBox360 deram problema "a rodo" com o famoso 3RL, tem dessas plaquinhas aos montes por ai, com certeza se você for a alguma assistência técnica de video game, você encontrará facilmente ela, pois é justamente o módulo de RF do XBox360 FAT que iremos usar nesse projeto, eu particularmente encontrei essa placa no mercado livre por uma média de R$ 10,00 bem mais em conta do que gastar R$ 70,00 no receptor original da Microsoft.

Essa placa na verdade usa uma conexão USB para transmitir os dados do controle, a única diferença é que ela trabalha com 3.3V ao invés dos 5V de uma USB comum. Isso é facilmente corrigido usando um CI regulador de tensão 3.3V, ou um divisor de tensão usando resistores ou apenas 2 diodos comuns (1N4007) ligados em série. Porém o maior problema é que usando somente a USB, não é possível dar o comando de sincronismo entre a base e o controle para poder parear ambos. Esse comando de sincronismo é um código binário enviado em um outro pino na placa, e para enviar esse código sem o XBox360 é necessário um microcontrolador, nesse caso, o mais fácil seria usar um Arduíno.

Para resumir, temos 3 cenários:

1- Usar um XBox360 Fat funcional e puxar os 4 fios da USB da placa RF dele. É uma opção válida, você usa o próprio XBox360 para parear o controle, e como ele é funcional, você usa ele normalmente, quando quiser usar o modulo dele no seu PC, você teria que desligar ele da tomada, e conectar o cabo USB no computador. Como o controle já está pareado na placa, não é necessário mais nada para funcionar no PC

2- Usar uma placa de Arduíno temporariamente. Como é inviável usar uma placa de Arduíno exclusivamente somente para sincronizar o controle (por questão de tamanho e preço), é possível conectar uma placa de Arduíno somente para sincronizar o controle. Após parear o controle com a base, o Arduíno não é mais necessário, a não ser que você pareie esse controle em outro aparelho.

3- Utilizar um pequeno microcontrolador nesse caso o Attiny85 que é programado usando uma placa de Arduíno. Esta opção é deixar fixo um Attiny, que é um microcontrolador pequeno e barato para enviar o comando de sincronismo, a vantagem desta opção é ter sempre disponível a possibilidade de sincronizar qualquer controle, sem precisar de um XBox360.

Clique na imagem para ampliar

Basicamente vamos usar os 7 primeiros pinos do conector da placa RF. Os primeiros 4 primeiros pinos, olhando a placa de frente, e contando a partir do primeiro pino superior esquerdo, temos a conexão USB, com o diferencial de que a placa trabalha com 3.3V, como a USB trabalha com 5V vai ser necessário usar algo para baixar para 3.3V, nesse caso, foi usado 2 diodos de uso geral, ligados em série, a resistência interna somada dos diodos foi suficiente para baixar a tensão de 5 para 3.2V. Se você quer algo mais preciso, pode sem problema usar um CI regulador de tensão de 3.3V. Se você vai usar o modulo em conjunto com um XBox funcional, basta usar esses ligados na USB e pronto.

Os próximos 3 pinos, que seria a segunda fileira da esquerda pra direita, seria o pino do botão Power central, que será usado como entrada para dar o comando de sincronismo, o DATA e o CLOCK. Esses vão ser ligados ao Arduíno ou ao Attiny, para ser possível parear o controle sem ter um XBox360. Como deu pra ver, é bem simples, basta ligar 3 fios do modulo RF nas portas do Arduíno, como mostra a figura acima e programar o Arduíno com o seguinte código:

/* Arduino code to communicate with xbox 360 RF module.
 * Original work by (yaywoop) / additional ideas from Alexander Martinez - modified by dilandou (www.dilandou.com, www.diru.org/wordpress)
 * First sends LED initialisation code followed by LED startup animation code, then sleeps until a button press for sync command.
 * RF module must be powered with 3.3V, two diodes in series with USB 5v will do. Connect the USB wires to a host computer, and the data and serial wires to Arduino.
 * of course, make sure to have a common ground 
 */

#include

const int sync_pin = 2; //power button repurposed for sync button (pin 5 on the module)
const int data_pin = 3; //data line (pin 6 on the module)
const int clock_pin = 4; //clock line (pin 7 on module) 

int led_cmd[10] =  {0,0,1,0,0,0,0,1,0,0}; //Activates/initialises the LEDs, leaving the center LED lit.
int anim_cmd[10] = {0,0,1,0,0,0,0,1,0,1}; //Makes the startup animation on the ring of light.
int sync_cmd[10] = {0,0,0,0,0,0,0,1,0,0}; //Initiates the sync process.
volatile boolean sync_enable = 0;

void sendData(int cmd_do[]) {
  pinMode(data_pin, OUTPUT);
  digitalWrite(data_pin, LOW);    //start sending data.
  int prev = 1;
  for(int i = 0; i < 10; i++){

    while (prev == digitalRead(clock_pin)){} //detects change in clock
    prev = digitalRead(clock_pin);
      // should be after downward edge of clock, so send bit of data now
    digitalWrite(data_pin, cmd_do[i]);

    while (prev == digitalRead(clock_pin)){} //detects upward edge of clock
    prev = digitalRead(clock_pin);
  }
  digitalWrite(data_pin, HIGH);
  pinMode(data_pin, INPUT);
}

void initLEDs(){
  sendData(led_cmd);
  delay(50);
  sendData(anim_cmd);
  delay(50);
}

void wakeUp(){
  sync_enable = 1;
}

void sleepNow() {
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // set sleep mode
  sleep_enable(); //enable sleep bit
  attachInterrupt(0, wakeUp, LOW);
  sleep_mode();
  sleep_disable(); //disable sleep bit
  detachInterrupt(0); // disables interrupt 0 on pin 2
}

void setup() {
  Serial.begin(9600);
  pinMode(sync_pin, INPUT);
  digitalWrite(sync_pin,HIGH);
  pinMode(data_pin, INPUT);
  pinMode(clock_pin, INPUT);
  delay(2000);
  initLEDs();
}

void loop(){
  Serial.println("Sleeping.");
  sleepNow();
  delay(200);
  if(sync_enable==1) {
    Serial.println("Syncing.");
    sendData(sync_cmd);
    sync_enable = 0;
  }
}

Feito o upload do programa no Arduíno, agora é hora de ligar o módulo RF no computador, ligue primeiro o modulo RF e somente depois ligue o Arduíno, o LED central deve ficar aceso, se não ficar, algo deu errado com a comunicação do Arduíno, se você checou tudo e ainda assim o led não acende, no final do post eu tenho um macete que pode ajudar a fazer funcionar, lembrando que o Arduíno só é necessário para parear o controle, mesmo com todos os leds apagados, uma vez pareado o controle, ele funciona normal. 

Ao conectar na USB, ele irá reconhecer (se não reconhecer ou ficar conectando e desconectando intermitentemente, tem algo errado), mas ao abrir o gerenciador de dispositivos, o windows vai mostrar que falta driver. O Driver que vamos usar é do próprio receptor wireless para controle XBox360, sendo assim entre na página da MS e baixe o driver conforme a versão do seu Windows:


Depois de baixar e instalar o driver, ao entrar no gerenciador de dispositivos, você vai ver que mesmo assim o receptor não está instalado, ele provavelmente vai estar como "dispositivo desconhecido" isso é devido que esse driver não foi feito específico para essa placa. Sendo assim vamos ter que forçar a instalação do driver neste dispositivo, o driver que você deverá instalar forçado está em:

C:\Program Files\Microsoft Xbox 360 Accessories

Se você não sabe como instalar um driver forçado, acompanhe esse video, ele usa o "cenário 1", sem a necessidade de ter um Arduíno, mas funciona em todos os casos:


Após o driver instalado e funcional, agora sim é hora de sincronizar o controle (se ele ainda não foi pareado), se o led central estiver aceso, basta apertar o pequeno botão da placa que seria o botão "Power" do XBox360 que os leds vão começa a rodar, dai você já sabe, basta apertar o botão sync do controle também, e pronto ! Para testar o controle, mande executar (Windows + R): joy.cpl que se tudo estiver Ok, ele irá aparecer lá.

Agora se mesmo depois de ter checado tudo e mesmo assim o LED não quer ligar, existe um macete que pode te ajudar. Alguns módulos de RF necessitam de 2 resistores Pull UP nos pinos DATA e CLOCK, se você não sabe o que é isso, não tem problema, basta ligar 2 resistores de 10K um no pino DATA e outro no pino CLOCK (pinos 6 e 7 do modulo RF), ambos os resistores ligados no +5V da USB, se esse for o seu caso (foi o meu caso ...), vai funcionar na hora.


Essa foi a plaquinha que eu montei, no meu caso eu usei um Attiny 85 permanente colado na placa. Repare que eu usei um pedaço de cabo flat que eu cortei de um cabo de HDD sata, e como eu não tinha a mão um CI regulador de 3.3V, acabei usando 2 diodos em série mesmo. Caso você também queira usar um Attiny para fazer o sincronismo eu aconselho você usar outro código:

/* Arduino code to communicate with xbox 360 RF module.
 * Original work by (yaywoop) / additional ideas from Alexander Martinez - modified by dilandou (www.dilandou.com, www.diru.org/wordpress)
 * First sends LED initialisation code followed by LED startup animation code, then sleeps until a button press for sync command.
 * RF module must be powered with 3.3V, two diodes in series with USB 5v will do. Connect the USB wires to a host computer, and the data and serial wires to Arduino.
 * of course, make sure to have a common ground
 * 
 * Modified to the Attiny by dantavares
 */

#include
#include

const int sync_pin = 3;  //power button repurposed for sync button (pin 5 on the module) do not change this !
const int data_pin = 2;  //data line (pin 6 on the module)
const int clock_pin = 1; //clock line (pin 7 on module) 

int led_cmd[10] =  {0, 0, 1, 0, 0, 0, 0, 1, 0, 0}; //Activates/initialises the LEDs, leaving the center LED lit.
int anim_cmd[10] = {0, 0, 1, 0, 0, 0, 0, 1, 0, 1}; //Makes the startup animation on the ring of light.
int sync_cmd[10] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0}; //Initiates the sync process.
volatile boolean sync_enable = 0;

void sendData(int cmd_do[]) {
  pinMode(data_pin, OUTPUT);
  digitalWrite(data_pin, LOW);    //start sending data.
  int prev = 1;
  for (int i = 0; i < 10; i++) {

    while (prev == digitalRead(clock_pin)) {} //detects change in clock
    prev = digitalRead(clock_pin);
    // should be after downward edge of clock, so send bit of data now
    digitalWrite(data_pin, cmd_do[i]);

    while (prev == digitalRead(clock_pin)) {} //detects upward edge of clock
    prev = digitalRead(clock_pin);
  }
  digitalWrite(data_pin, HIGH);
  pinMode(data_pin, INPUT);
}

void initLEDs() {
  sendData(led_cmd);
  delay(50);
  sendData(anim_cmd);
  delay(50);
}

void sleep() {
    GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts
    PCMSK |= _BV(PCINT3);                   // Use PB3 as interrupt pin
    ADCSRA &= ~_BV(ADEN);                   // ADC off
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // replaces above statement

    sleep_enable();                         // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
    sei();                                  // Enable interrupts
    sleep_cpu();                            // sleep

    cli();                                  // Disable interrupts
    PCMSK &= ~_BV(PCINT3);                  // Turn off PB3 as interrupt pin
    sleep_disable();                        // Clear SE bit
    ADCSRA |= _BV(ADEN);                    // ADC on

    sei();                                  // Enable interrupts
}

ISR(PCINT0_vect) {
  // This is called when the interrupt occurs, but I don't need to do anything in it
  sync_enable = 1;
}

void setup() {
  pinMode(sync_pin, INPUT);
  digitalWrite(sync_pin, HIGH);
  pinMode(data_pin, INPUT);
  pinMode(clock_pin, INPUT);
  delay(2000);
  initLEDs();
}

void loop() {
  sleep();
  delay(200);
  if (sync_enable == 1) {
    sendData(sync_cmd);
    sync_enable = 0;
  }
}

Lembrando que esse código deve ser compilado usando o Arduíno e pode usar a própria placa do Arduíno UNO para programa-lo. Se você não sabe fazer isso, o google esta ai cheio de tutorial pra você aprender. No meu caso, eu setei ele como 16Mhz Internal PPL.

Caso você queira usa-lo no Raspberry Pi, para mim funcionou perfeitamente no RecalBox, a única coisa que tive que fazer é editar o arquivo de configuração e desativar o suporte ao controle PS3 e habilitar o suporte ao controle XBox360.