Show Posts
Pages: 1 [2] 3 4 ... 19
16  International / Portugues / Re: Ligando 2 shift register em série com lógica (física) invertida on: July 23, 2014, 03:28:03 pm
Luis, acredito que o código é aquilo mesmo, estava com a cabeça tão cansada que não sabia direito o que estava fazendo e na tentativa e erro acabou funcionando para o que eu queria daquele jeito mas não conseguia trabalhar em cima do código.

No caso de mudar a sequencia, é só levar em consideração que a variável led contem os bytes pra cada registrador, e a variável i indica a posição do led na ordem em que ele está instalado.

Postei o vídeo do projeto "final" no outro tópico, mas vou por aqui também para referência futuras:

https://www.youtube.com/watch?v=Yu8I_pT2ZEY
17  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: July 23, 2014, 03:17:44 pm
Como prometido:
Como ficou o projeto adaptado > https://www.youtube.com/watch?v=Yu8I_pT2ZEY
18  International / Portugues / Re: Ligando 2 shift register em série com lógica (física) invertida on: July 22, 2014, 12:15:46 pm
as portas do Shift Register são de A à H (0 a 7). ao invés de eu ligar o led L0 a porta A (0), liguei a porta H (7) e inverteu todo o resto (L1 -> 6, L2 -> 5, etc). porém, no segundo shift register ficou certo, L8 na porta A, L9 na porta B, etc

Posso até postar o esquemático, mas não seria de grande ajuda sendo que o erro foi na instalação.

O correto aliás, seria eu corrigir a instalação, mas já me custou o domingo inteiro, prefiro tratar disso no software smiley-sweat
19  International / Portugues / Re: Ligando 2 shift register em série com lógica (física) invertida on: July 22, 2014, 11:30:58 am
http://arduino.cc/en/Reference/BitSet
http://arduino.cc/en/Reference/BitClear
Basicamente seta(1) ou zera o bit i na variável leds.
Creio que deve ser uma espécie de macro para leds |=  (1<<i) e leds &= ~(1<<i)

PS.: Estou quebrando a cabeça a horas, e acredito que está certo mesmo o que eu fiz visto que ordem dos leds é SRA[7..0],SRB[0..7]
20  International / Portugues / Ligando 2 shift register em série com lógica (física) invertida on: July 22, 2014, 09:42:15 am
Pessoal, preciso de ajuda pra desenvolver o raciocínio para melhorar o código da seguinte  questão:

Quero acender 12 leds (L1 à L12)  1 por vez usando dois shift registers em série (SRA e SRB).
A ligação no SRA acabou ficando invertida, o L1 está na porta H.
No SRB está OK.

Eu consegui (mais ou menos) fazer o que queria, porém o código está uma bagunça pois não consegui desenvolver o raciocínio lógico para tal.

Code:
for (int i=0; i<=totalSaidas; i++){
      bitSet(leds, i);
      shiftWrite(leds,i);
      delay(t);
    }
    delay(tempo);
    for (int i=0; i<=totalSaidas; i++){
      bitClear(leds, i);
      shiftWrite(leds,i);
      delay(t);
    }
e o controle do SR:
Code:
void shiftWrite(unsigned int _leds, unsigned int pos) {
  digitalWrite(latchPin, LOW);
  if (pos < 8) {
    shiftOut(dataPin, clockPin, MSBFIRST, _leds);
    shiftOut(dataPin, clockPin, MSBFIRST, _leds >> 8);
  }
  else{
    shiftOut(dataPin, clockPin, LSBFIRST, _leds);
    shiftOut(dataPin, clockPin, LSBFIRST, _leds >> 8);
  }
 
  digitalWrite(latchPin, HIGH);
}

No caso queria melhorar, porque assim preciso de outra função para praticamente cada sequencia diferente que tentar com os LEDs
21  International / Portugues / Re: Criar uma Rede RF entre arduinos... on: July 17, 2014, 09:27:32 am
xbee é legal mas é muito caro comparado aos módulos RF chineses, mas gostei da ideia da rede RF, está anotado para soluções de futuros problemas smiley

Ainda, ligando um dos Arduinos a um Ethernet shield, dá pra expandir ainda mais as possibilidades

ps.: obrigado bubulindo pelo link
22  International / Portugues / Re: Como ler no arduino a porta serial criada pelo Bluetooth? on: July 17, 2014, 09:20:40 am
Primeiro entenda que seu problema é que a porta usada pelo módulo no PC é uma, e a usada pelo Arduino é outra. A não ser que exista algum software pronto na internet que apenas escreve o que recebe de uma porta em outra (é bastante simples, mas eu desconheço algo assim), você terá que programar algo no PC sim.

Aí entra na questão que bubulindo citou, se você vai programar no PC, porque programar mais um Arduino?
23  International / Portugues / Re: Máscara de bits on: June 30, 2014, 07:43:20 am
Eu também tinha dúvida de como funcionava especificamente o comando (1 << x). A resposta na verdade é mais simples do que imaginava: o número 1, só tem 1 bit "válido" (0000 0001), então deslocando este bit 'x' vezes, eu posso manipular facilmente o bit a ser escrito ou comparado.

"Traduzindo para o portugues" a expressão if (i & (1 << x)) seria algo como:
Se o bit atual sendo comparado (for (int x = 0; x <= 7; x++)) do byte (i) possui o bit (1<<x) válido, coloca no registrador (digitalWrite(data,HIGH);). Se não, coloca 0 (digitalWrite(data,LOW);).
O latch grava o bit.
24  International / Portugues / Re: manipular arquivo ini on: June 26, 2014, 03:11:33 pm
Não entendi direito o que deseja fazer, mas as funções na referencia da biblioteca não são suficientes?

http://arduino.cc/en/Reference/SD

25  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: June 25, 2014, 10:35:00 am
Não vou aguentar esperar chegarem meus sensores  smiley-sweat, achei um sensor infrared jogado aqui e vou implementar assim mesmo: Num lado o sensor infrared, do outro lado um interruptor (do tipo campainha). Vou comprar canaletas e cabo de rede neste final de semana para instalar. Quando os sensores ultrassom chegarem eu instalo no lugar e altero o software

Teste:
http://youtu.be/B1wzsMQ-zcY

Esquemático:
http://imgur.com/wvy21Po

Código modificado para sensor e botão:
Code:
#define SENSOR1 A0 // Analog input pin that  is attached to the sensor
#define SENSOR2 8 //D8
#define ADC_REF 5//reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
//board switches to 3V3, the ADC_REF should be 3.3


#define MAX_DISTANCE 1.0 // deve ser ajustado para distância de trigger desejada

float voltage;//the sensor voltage, you can calculate or find the distance
// to the reflective object according to the figures
//on page 4 or page 5 of the datasheet of the GP2Y0A21YK.


//Variáveis de uso dos registradores 74HC595
int latchPin = 10;  //Pino 8 conectado ao pino 12 do 74HC595 (Latch).
int dataPin = 11;  //Pino 11 conectado ao pino 14 do 74HC595 (Data).
int clockPin = 13; //Pino 12 conectado ao pino 11 do 74HC595 (Clock).

int totalSaidas = 16; // max 16
int t = 100; //tempo entre o acender dos leds.
int tempo = 2000; //tempo que fica aceso os leds para depois apagar.

unsigned int leds;

void setup()
{
  // initialize serial communications at 9600 bps: 
  Serial.begin(9600);
 
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(SENSOR2, INPUT_PULLUP); // porque é botao
  shiftWrite(0);
}
 
void loop()
{
  leds=0;
  voltage = getVoltage();
  Serial.println(voltage);
  if(voltage > MAX_DISTANCE) {
    for (int i=0; i<=totalSaidas; i++){
      bitSet(leds, i);
      shiftWrite(leds);
      delay(t);
    }
    delay(tempo);
    for (int i=0; i<=totalSaidas; i++){
      bitClear(leds, i);
      shiftWrite(leds);
      delay(t);
    }
  }
   
  if (!digitalRead(SENSOR2))
  {
    for (int i=0; i<totalSaidas; i++){
      bitSet(leds, totalSaidas-i);
      shiftWrite(leds);
      //mega.shiftWrite(totalSaidas+1-i, HIGH);
      delay(t);
    }
       
    while(voltage < MAX_DISTANCE) {
      voltage = getVoltage();
    }
   
    for (int i=0; i<totalSaidas; i++){
      bitClear(leds, totalSaidas-1-i);
      shiftWrite(leds);
      //mega.shiftWrite(totalSaidas+1-i, LOW);
      delay(t);   
    }
    voltage = 0;
  }
   
  // wait 500 milliseconds before the next loop
  delay(100);
}
/****************************************************************************/
/*Function: Get voltage from the sensor pin that is connected with analog pin*/
/*Parameter:-void      */
/*Return: -float,the voltage of the analog pin      */
float getVoltage()
{
int sensor_value;
int sum; 
// read the analog in value:
for (int i = 0;i < 20;i ++)//Continuous sampling 20 times
{
sensor_value = analogRead(SENSOR1);
sum += sensor_value;
}
sensor_value = sum / 20;
float voltage;
voltage = (float)sensor_value*ADC_REF/1024;
return voltage;
}

void shiftWrite(unsigned int _leds) {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, _leds);
  shiftOut(dataPin, clockPin, MSBFIRST, _leds >> 8);
  digitalWrite(latchPin, HIGH);
}
26  International / Portugues / Re: Arduino Mega 2560 (Não pode ser usado Codigo 10) on: June 23, 2014, 08:25:17 am
Tem outro Arduino e/ou outro cabo pra testar? Outro PC se possível também. Se o computador reconhece como dispositivo não identificado o problema é a porta usb, o cabo, ou o dispositivo conectado (o Arduino no seu caso), tenta isolar o erro
27  International / Portugues / Re: Escada Inteligente - A realização de um sonho on: June 23, 2014, 08:23:02 am
Muitooo legal, excelente ideia smiley-grin
Já encomendei 4 sensores, vou implementar a ideia do HugoPT. usando 2 sensores no alto, e 2 sensores embaixo da escada, medindo assim a velocidade da pessoa e acendendo dinamicamente os leds. Uma pena que tá demorando séculos para chegar encomendas internacionais no Brasil, mas com certeza lembrarei de compartilhar quando estiver pronto (entre 2 a 4 meses para chegar)
28  International / Portugues / Re: Problema com serial on: June 23, 2014, 08:01:25 am
Code:
const unsigned int Led = 8;
char Ch;

void setup() {
  Serial.begin(9600);
  pinMode(8,OUTPUT);
  Serial.println("Sistema pronto!");
}

void loop(){
  String Msg = "";
  if(Serial.available() == 0) return;
  while(Serial.available()){
//Serial.println(Serial.available()); // esta linha imprime 4 3 2 1, que é o valor retornado pela função Serial.available() no seu caso
    Ch = Serial.read();
    Msg.concat(Ch);
  }
  Serial.println(Msg);
  delay(1000);
}
29  International / Portugues / Re: EasyVR e modo Stand_BY on: June 23, 2014, 07:58:29 am
http://playground.arduino.cc/Learning/ArduinoSleepCode
30  International / Portugues / Re: "Pegar" a porta COM. on: June 23, 2014, 07:46:26 am
Amigo, infelizmente o que deseja não é tão trivial, você teria que configurar uma espécie de "handshake", algo do tipo:
1) verifica as portas disponíveis,
2) para cada porta, envia um "Hello" e aguarda 1 segundo pela resposta (por exemplo), se não receber, fecha a porta e abre a próxima.
3) no Arduino, ele trava em um while esperando o "Hello", quando recebe responde "I'm alive" e inicia a execução do código.
4) no pc de novo, quando recebe "I'm alive", salva as configurações da porta e inicia o código

Veja, esta é uma forma que encontrei de fazer isto, pode tanto não funcionar dependendo de o que você tem ligado nas outras portas do PC, quanto pode haver maneiras mais simples ou algo pronto na internet.

ps.: perceba que "Hello" e "I'm alive" no caso é apenas uma espécie de protocolo que acabei de inventar, você pode simplificar para um sinal qualquer

ps2.: no momento que abri seu tópico não havia a segunda resposta do luizsilva, ele disse a mesma coisa que eu basicamente smiley
Pages: 1 [2] 3 4 ... 19