This is featured post 2 title
Replace these every slider sentences with your featured post descriptions.Go to Blogger edit html and find these sentences.Now replace these with your own descriptions.
This is featured post 3 title
Replace these every slider sentences with your featured post descriptions.Go to Blogger edit html and find these sentences.Now replace these with your own descriptions.
quinta-feira, 30 de maio de 2013
quinta-feira, 23 de maio de 2013
3D Printer - Primeiras peças
16:22
Unknown
No comments
Começaram a chegar as primeiras peças da minha impressora 3d, logo logo vou começar a postar sobre a montagem dela e imprimir peças para meus projetos! :D
quinta-feira, 2 de maio de 2013
Temporizadores (por Threads) no Arduino
09:47
Unknown
No comments
Eu de novo em mais um post surpreendente, espetacular!! Uma coisa que não sabia que existia no arduino: Threads. Claro! O arduino processa código C, então dá pra fazer isso e muito mais. Em baixo vai o código de um temporizador que precisei fazer pro projeto Kerberos:
void requireStatus(){
Serial1.println("Status");
}
void requireModo(){
Serial1.println("Modo");
}
// Envio de mensagens para o controle
#define NUMBER_OF_ACTIONS 2
// Classe da Thread
typedef struct{
unsigned long previousTrigger;
unsigned int interval;
void (*function)();
}ProtoThread;
// Instancia da Thread
ProtoThread protoThreads[NUMBER_OF_ACTIONS] = {
{5000,10000,requireModo},
{2000,10000,requireStatus} //predelay 2000 milliseconds, then from then on always trigger every 1000 millisecond - REPETE CADA 1s
};
void loop(){
delay(100);
// Verifica Threads
for (byte i=0; i<NUMBER_OF_ACTIONS; i++) {
if ((millis() - protoThreads[i].previousTrigger) > protoThreads[i].interval) {
protoThreads[i].previousTrigger = millis();
protoThreads[i].function();
}
delay(100);
}
}
Dando uma explicada sobre o que tá acontecendo: o comando 'typedef struct' vai criar uma estrutura, uma classe chamada ProtoThread. Logo abaixo estamos instanciando ela passando o tempo para iniciar a partir do power on do arduino, o tempo de espera para ser executada novamente e a função que irá chamar. Veja que o Loop é o encarregado de fazer a verificação.
Por enquanto é só pessoal! Qualquer dúvida comenta ai.
ja ta ja ne
quarta-feira, 1 de maio de 2013
Tela TFT 3.2" / 2.4" Touch Screen
07:01
Unknown
No comments
Saudações! Neste post vou falar um pouco sobre a telinha TFT TouchScreen, muito legal de usar e pouco prático de programar, então criei uns métodos mais dinâmicos para criação de botões e comandos de toque. Estou usando a biblioteca do Henning Karlsen e uma dificuldade que tive foi 'adivinhar' qual constante usar não inicialização da classe, então coloquei aqui a lista de constantes encontrada em UTFT.h, já pra saber qual o CI da sua tela, você deve consultar o datasheet com o fabricante, as vezes também pode-se encontrar no site da loja.
Meu projeto de controle do Kerberos (Ainda falarei sobre ele) |
Em baixo vai um código que preparei para mostrar como criar telas, botões e chamar funções pelo touch.
#include <UTFT.h>
#include <ITDB02_Touch.h>
extern uint8_t BigFont[];
extern uint8_t SmallFont[];
// constantes do menu
const int MENU_PRINCIPAL = 1000;
const int ACT_BOTAO1 = 1001;
const int ACT_BOTAO2 = 1002;
const int ACT_BOTAO3 = 1003;
const int ACT_BOTAO4 = 1004;
// Aqui deve-se saber qual o CI de controle da sua tela, no meu caso o SSD1289
UTFT myGLCD(ITDB32S,38,39,40,41);
ITDB02_Touch myTouch(42,43,44,45,46);
// Constantes de Menu \ Ações
int x, y;
int coordTouchButton[6][5];
int qtdButtons = 0;
void printButton(String titulo, int id, int x1, int y1, int x2, int y2){
myGLCD.setColor(0, 0, 255);
myGLCD.fillRoundRect (x1, y1, x2, y2);
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (x1, y1, x2, y2);
myGLCD.setBackColor(0, 0, 255);
myGLCD.print(titulo, x1+10, centered(y1,y2));
coordTouchButton[qtdButtons][0] = x1;
coordTouchButton[qtdButtons][1] = y1;
coordTouchButton[qtdButtons][2] = x2;
coordTouchButton[qtdButtons][3] = y2;
coordTouchButton[qtdButtons][4] = id;
qtdButtons++;
}
void printMenuPrincipal(){
myTouch.InitTouch(orientation);
myGLCD.clrScr();
printButton("BOTAO 1", ACT_BOTAO1, 10, 30, 150, 80);
printButton("BOTAO 2", ACT_BOTAO2, 160, 30, 300, 80);
printButton("BOTAO 3", ACT_BOTAO3, 10, 90, 150, 140);
printButton("BOTAO 4", ACT_BOTAO4, 160, 90, 300, 140);
// Se precisar de mais botões
// printButton("", 10, 150, 150, 200);
// printButton("", 160, 150, 300, 200);
printTitle("Titulo Controle X");
printStatus("Status ok!");
}
void printStatus(String texto){
myGLCD.setBackColor(0, 0, 200);
myGLCD.print(" ", LEFT, 224);
myGLCD.setColor(0, 255, 0);
myGLCD.print(texto, LEFT, 224);
}
void printTitle(String texto){
myGLCD.setBackColor(0, 0, 102);
myGLCD.print(" ", LEFT, LEFT);
myGLCD.setColor(0, 255, 0);
myGLCD.print(texto, LEFT, LEFT);
}
void executeTouchCmd(int id){
switch (id)
{
case MENU_PRINCIPAL:
printMenuPrincipal();
menu_action = id;
break;
case BOTAO_1:
//executaAcao1();
menu_action = id;
break;
default:
Serial1.println(id);
break;
}
case BOTAO_1:
//executaAcao1();
menu_action = id;
break;
default:
Serial1.println(id);
break;
}
}
// Draw a red frame while a button is touched
void waitForIt(int x1, int y1, int x2, int y2)
{
myGLCD.setColor(255, 0, 0);
myGLCD.drawRoundRect (x1, y1, x2, y2);
while (myTouch.dataAvailable())
myTouch.read();
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (x1, y1, x2, y2);
}
int getButton(int x, int y){
for(int i=0;i<qtdButtons;i++){
if ((y>=coordTouchButton[i][1]) && (y<=coordTouchButton[i][3])){
if ((x>=coordTouchButton[i][0]) && (x<=coordTouchButton[i][2])){
tone(PIN_BUZZ, NOTE_C4, 8);
waitForIt(coordTouchButton[i][0], coordTouchButton[i][1], coordTouchButton[i][2], coordTouchButton[i][3]);
return coordTouchButton[i][4];
}
}
}
}
void getTouch(){
if (myTouch.dataAvailable()){
myTouch.read();
x=myTouch.getX();
y=map(myTouch.getY(), 0, 240, 240, 0);
// y=myTouch.getY();
Serial.print("x:");
Serial.println(x);
Serial.print("y:");
Serial.println(y);
executeTouchCmd(getButton(x,y));
}
}
void setup()
{
// Initial setup
myGLCD.InitLCD(orientation);
myGLCD.clrScr();
myTouch.InitTouch(orientation);
myTouch.setPrecision(PREC_HI);
myGLCD.setFont(SmallFont);
myGLCD.setBackColor(0, 0, 255);
printMenuPrincipal();
}
void loop(){
getTouch();
}
Enfim pessoal, qualquer dúvida ou sugestão manda comentário, inclusive se acharem algum bug no código ;)
ja ta ja ne!
terça-feira, 9 de abril de 2013
Módulo Wireless APC220
04:39
Unknown
1 comment
Os códigos que encontrei na web eram, no geral, criados para envio de char ou int. Eu queria algo mais dinâmico, usando String! Eis o código:
String serialRead() {
String msg;
while (!Serial1.available()) {
char c = (char) Serial1.read();
if (c == '\n') {
break;
}
msg += c;
delay(1);
}
msg.trim();
return msg;
}
// Esse método é disparado sempre
// que a porta serial recebe alguma coisa
// nesse caso a Serial1 do Arduino Mega
void serialEvent1() {
String msg;
while (1 == 1) {
char c = (char) Serial1.read();
if (c == '\n') {
break;
}
msg += c;
delay(1);
}
msg.trim();
Serial.println("mensagem recebida: " + msg);
}
void setup() {
// Initial setup
Serial.begin(9600);
Serial1.begin(9600);
}
void loop() {
}
O módulo APC vem com um adaptador USB, então você pode conectá-lo e enviar mensagens usando o monitor serial para testar. Esse código vai receber a mensagem do APC pela porta serial 1 e enviar para serial padrão.
quinta-feira, 4 de abril de 2013
Começando!
04:08
Unknown
1 comment
Eaê Galera!?
Este é o primeiro post do meu blog sobre Arduino. Meu objetivo, inicialmente é facilitar a vida de quem tá começando a se aventurar nesse mundo, pois tive algumas dificuldades para entender algumas coisas.
Então, pra começar, o que é o Arduino? Bem, costumo dizer que o Arduino é um "computadorzinho" em que, com simples comandos de programação você consegue controlar diversos dispositivos eletrônicos, desde LEDs a uma tela TFT (thin-film transistor). Muitos desses dispositivos são as "shields", módulos mais complexos feitos essencialmente para o Arduino.
Particulamente, eu sou mais prático que isso, vamos a um exemplo: o famoso Blink!
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}