Olá. Como combinado, hoje é o grande dia, início de tudo.
Apresento hoje um projeto simples, onde um programa em C controla um circuito eletrônico através da porta USB. O video criado basicamente demonstrará a interação direta entre uma porta USB (através do FT232BL) e um carrinho de controle remoto. O que fiz foi uma interface que permite enviar comandos ao carrinho pelo computador. Isso possibilitará controlar todos os motores do carrinho de forma simples e programada.
O objetivo é fazer com que o carrinho estacionado saia do local, e volte, porém de forma oposta. Por exemplo, ele estará estacionado com a traseira para a parede, e ao executar o comando, ele então sairá e voltará a estacionar no mesmo local, porém desta vez de frente para a parede.
Isso tudo para demonstrar o básico de interação entre a máquina e um hardware externo. Sempre achei fantástica a ideia de poder controlar dispositivos externos, como lâmpada, portas, motores, través de um computador, e em breve demonstrarei aqui como podemos fazer isso.
Acredito que o video servirá para dar uma inspiração maior, afinal não é tão simples programar em C. Exige muita vontade e paciência acima de tudo.
Imagens do projeto:
Aqui o controle original do carrinho (à esquerda) e somente a placa de controle com os fios soldados (à direita).
Aqui o código fonte do programa:
#include <stdio.h> #ifdef __WIN32__ #define sleep(x) Sleep(x) #endif #include "ftdi.h" #define FRONT 2 #define REAR 4 #define RIGHT 8 #define LEFT 16 #define FRONT_RIGHT 10 #define FRONT_LEFT 18 #define REAR_RIGHT 12 #define REAR_LEFT 20 struct ftdi_context ftdic; void stopCommand() { fflush(stdout); ftdi_write_data(&ftdic, 0, 1); } void msleep(int ms) { struct timespec time; time.tv_sec = ms / 1000; time.tv_nsec = (ms % 1000) * (1000 * 1000); nanosleep(&time,NULL); } void goCar(int type, int msTime) { int f; char buf[1]; if (ftdi_init(&ftdic) < 0) { fprintf(stderr, "falha ao iniciar ftdi_init\n"); exit(-1); } f = ftdi_usb_open(&ftdic, 0x0403, 0x6001); if (f < 0 && f != -5) { fprintf(stderr, "Dispositivo ftdi não encontrado: %d (%s)\n", f, ftdi_get_error_string(&ftdic)); exit(-1); } printf("ftdi aberto com sucesso: %d\n",f); buf[0] = type; printf("enabling bitbang mode\n"); ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_BITBANG); fflush(stdout); ftdi_write_data(&ftdic, buf, 1); msleep(msTime); stopCommand(); printf("disabling bitbang mode\n"); ftdi_disable_bitbang(&ftdic); ftdi_usb_close(&ftdic); ftdi_deinit(&ftdic); } int main(int argc, char **argv) { goCar(FRONT_RIGHT, 700); goCar(RIGHT, 250); goCar(REAR, 150); msleep(800); goCar(REAR, 500); goCar(REAR_LEFT, 300); goCar(LEFT, 100); goCar(FRONT, 100); msleep(800); goCar(FRONT, 200); goCar(FRONT_RIGHT, 150); goCar(RIGHT, 100); goCar(FRONT, 130); }
Confira aqui o projeto funcionando:
Como dito anteriormente, estou usando o livro “C completo e total” como base para este curso. O livro promete muito, está numa linguagem simples de entender e é muito inspirador. Ele tem 30 capítulos incluindo apêndices. Se um capítulo for passado por aula, então em cerca de 8 meses o curso estará terminado.
Tentarei sempre trazer exemplos práticos de uso da linguagem, o post acima é um bom exemplo disto. Tenho muito a aprender ainda e tenho certeza de que este será um curso de muita utilidade para mim e todos aqueles que de uma forma ou outra desejam aprender essa incrível linguagem que é o C.
Gostei de sua iniciativa, já fiz alguns programas em C para pic e outros microcontrolador
Era meu passa tempo eletrônica e programação C, ainda lido com C mas em outra area
Olá Constantino, fico feliz que estejas também com interesse em aprender essa maravilhosa linguagem de programação.
Pausei um pouco o curso de programação em C, porém irei retornar semana que vem, nas férias. Ficarei aguardando novos comentários e eventuais dúvidas.
Abraços
Não me lembro como descobri seu blog, acho que foi pelo site Linha de Código.
Gostei da iniciativa de ensinar C sempre quis aprender essa linguagem, alias sempre quis ser programador. Fiz curso tecnico em informatica pelo SENAC e la "aprendi" a programar em VB.Net.
Sou iniciante em programar, mas sempre corro atraz de tutoriais e sites sobre o assunto.
Espero que voce mantenha seu blog e sempre o atualiaze, ja varios blogs sobre o assunto começar e depois o "dono" nunva mais atualizar. Prometo ser seguidor mas voce vai ter que manter o blog. :)
Abraços.
Oi Marcos,
fico feliz que tenha decidido voltar aqui…
Sempre que sobrar um tempinho estarei atualizando este blog,
obrigado pelo retorno!
admiro trabalhos assim, esta de parabens, eu que nunca programei ate me animei, entendo pouco de eletronica, vou acompanhar a evolução e estudar a linguagem C, estarei aqui. Em tempo, o que o Marco Aurelio comentou em manter o blog, reforço o que ele comentou
Abraços
Olá Constantino,
fico feliz que tenha se motivado ao estudo de programação, é uma área fascinante!
Tenho um material mais atualizado sobre programação que é voltado para iniciantes, e trabalhamos com o famoso Arduino, que facilita muito o aprendizado, confira aqui: http://www.paulotrentin.com.br/aulas/robotica-com-arduino/
Sobre manter o blog, é um projeto que a muito desejei, então vou mantê-lo para sempre, porém ainda não consigo me dedicar o quanto gostaria. Mas asseguro-lhe que vou continuar e melhorar conforme o tempo e a experiência me permitir.
Obrigado pelo retorno.
É lindo ver, que existe pessoas que-se dedicam não só, da sua vida profissional, mas também, com as das outras que JEOVA DEUS lhe abençoe por tudo quanto tens feicto de bom.
Maria,
muito obrigado pelo retorno!
Eu acredito que o vídeo não está mais disponível.
Oi Angélica, agora está tudo certo, obrigado!