Ir ao conteúdo
  • Cadastre-se

Quero criar um sistema de linha de chegada


Niggul

Posts recomendados

ficaria mais ou menos assim (com 6 pistas)

Mas este reedswitch tem que ser do tipo NA.

E tem que medir bem as distancias para o imã de um não afetar o outro...

reed CARROS ARDUINO.jpg

adicionado 2 minutos depois
agora, Niggul disse:

@BloodCeltics Lopes Seria entao um circuito de toque quando o carrinho passa e empurra a alavanca rela no fio que vem do GND com o da alavanca ai quando se tocarem ele conta como o carrinho chegou? É isso ? 

exatamente... o fio que encostar no GND primeiro registra a pista vencedora...

(Mas antes de gastar todo este material, veja a opinião dos mais experientes para saber sobre a velocidade do arduino... se ele será capaz de atender bem o projeto proposto...

Aqui funcionou mas não tenho a pista para testar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@BloodCeltics Lopes Entendi entao o fio que vai na alavanca enconta no GND e mostra a pista campeã, ai ela fica quantos segundos mostrando o vencedor ? Dai tem que apertar o botao de reset para resetar o codigo? ou ele reseta sozinho ? Comprei um botao de reset bem legal que daria para colocar como posso fazer isso?

 

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Niggul disse:

@BloodCeltics Lopes Entendi entao o fio que vai na alavanca enconta no GND e mostra a pista campeã, ai ela fica quantos segundos mostrando o vencedor ? Dai tem que apertar o botao de reset para resetar o codigo? ou ele reseta sozinho ? Comprei um botao de reset bem legal que daria para colocar como posso fazer isso?

 

ele fica parado no numero vencedor até que se aperte o botão reset (se usar este código)...

mas o código pode ser alterado para ficar um determinado tempo...

 

quanto ao reset externo vou fazer um desenho aqui..

 

adicionado 9 minutos depois
12 minutos atrás, Niggul disse:

Comprei um botao de reset bem legal que daria para colocar como posso fazer isso?

Tenho feito assim:

 

reset arduino nano.jpg

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

9 horas atrás, Niggul disse:

preciso ligar o resistor no display? Ou nao precisa? 

Precisa sim... eu usei um de 220 ohms no fio comum (que vai pro GND).

Este vai regular o brilho do display e a tensão que vai pra ele, pois o display deve trabalhar com tensões em torno de 3V e os pinos do Arduíno saem 5V.

Se deixar direto vai funcionar por um tempo mas depois vai queimar o display.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Boa contribuição do amigo @BloodCeltics Lopes

void Mostrar(int valor) {
  if (valor == 0)
        { 
        digitalWrite(A0, HIGH); 
        digitalWrite(A1, HIGH);
        digitalWrite(A2, HIGH);
        digitalWrite(A3, HIGH);
        digitalWrite(A4, HIGH);
        digitalWrite(A5, HIGH);
        digitalWrite(12, LOW);
         } else
  if (valor == 1)
        { 
        digitalWrite(A0, LOW);
        digitalWrite(A1, HIGH);
        digitalWrite(A2, HIGH);
        digitalWrite(A3, LOW);
        digitalWrite(A4, LOW);
        digitalWrite(A5, LOW);
        digitalWrite(12, LOW);
         }

Mostra como acender cada segmento literalmente bit a bit o que é excelente pra etapa inicial.

No futuro, queira considerar uma outra maneira indexada, o que torna o código menor e mais enxuto tanto no fonte como na flash. Algo como...

unsigned char const tabela[10]=
{
0b01111111, //0
0b00001100, //1
//... crie os outros "desenhos" dos dígitos
0b11111111, //8
0b11011111, //9
}

void Mostrar(unsigned char valor) 
{
digitalWrite(A0, (tabela[valor]>>0)&1); 
digitalWrite(A1, (tabela[valor]>>1)&1); 
digitalWrite(A2, (tabela[valor]>>2)&1); 
digitalWrite(A3, (tabela[valor]>>3)&1); 
digitalWrite(A4, (tabela[valor]>>4)&1); 
digitalWrite(A5, (tabela[valor]>>5)&1); 
digitalWrite(12, (tabela[valor]>>6)&1); 
}

A essência...

p.ex. ao fazer Mostrar(9), acompanhe o trajeto de 1 bit só...

digitalWrite(A2, (tabela[valor]>>2)&1);

diz:

-pegue o valor da tabela cujo endereço ou indexador é "valor". Ok.. peguei "9" tabela[9]=0b11011111,

-eu quero escrever um bit no pino de saída A2. Mas lembre-se, só admito 0 ou 1, então...

-eu quero o 3º bit em A2 então vou deslocar 2 bits tudo pra direita >>2, certo?

-estou na IDE do arduíno, preciso fazer um & AND com 1, ok? &1, tudo bem? (se fosse C nem precisava)

Então tá no fim das contas eu fiz... digitalWrite(A2,HIGH), percebestes?

 

Sei lá... post de 5ª... kk e digitado online. Se o amigo @BloodCeltics Lopes possuidor do arduino sentir vontade compilar, gravar ou simular pra ver... tamozaí pra eventuais correções...

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Código melhorado com os comandos de Isadora Ferraz:

*Obs: os números foram redesenhados conforme pinagem do circuito que propus.

*Obs2: Veja que no código agora mostro uma linha que se for comentada (colocando duas barras no começo) o mostrador iniciará apagado em vez de mostrar "0".

//Versão 2.0
unsigned char const tabela[10]=
{
// GFEDCBA
0b00111111, //0
0b00000110, //1
0b01011011, //2
0b01001111, //3
0b01100110, //4
0b01101101, //5
0b01111101, //6
0b00000111, //7
0b01111111, //8
0b01101111, //9
};


void Mostrar(unsigned char valor) 
{
digitalWrite(A0, (tabela[valor]>>0)&1); 
digitalWrite(A1, (tabela[valor]>>1)&1); 
digitalWrite(A2, (tabela[valor]>>2)&1); 
digitalWrite(A3, (tabela[valor]>>3)&1); 
digitalWrite(A4, (tabela[valor]>>4)&1); 
digitalWrite(A5, (tabela[valor]>>5)&1); 
digitalWrite(12, (tabela[valor]>>6)&1); 
}


int Terminou;
const int Pista1 =  2;
const int Pista2 =  3;
const int Pista3 =  4;
const int Pista4 =  5;
const int Pista5 =  6;
const int Pista6 =  7;
const int Pista7 =  8;
const int Pista8 =  9;
const int Pista9 =  10;

void setup() {
pinMode(A0, OUTPUT); //Segmento "A" do display.
pinMode(A1, OUTPUT); //Segmento "B" do display.
pinMode(A2, OUTPUT); //Segmento "C" do display.
pinMode(A3, OUTPUT); //Segmento "D" do display.
pinMode(A4, OUTPUT); //Segmento "E" do display.
pinMode(A5, OUTPUT); //Segmento "F" do display.
pinMode(12, OUTPUT); //Segmento "G" do display. 

pinMode(Pista1,INPUT_PULLUP);
pinMode(Pista2,INPUT_PULLUP);
pinMode(Pista3,INPUT_PULLUP);
pinMode(Pista4,INPUT_PULLUP);
pinMode(Pista5,INPUT_PULLUP);
pinMode(Pista6,INPUT_PULLUP);
pinMode(Pista7,INPUT_PULLUP);
pinMode(Pista8,INPUT_PULLUP);
pinMode(Pista9,INPUT_PULLUP);
Terminou = 0;
Mostrar(0); //Se quiser que o mostrador inicie todo apagado, comente esta linha.
}

void loop(){

if (Terminou == 0){

  if (digitalRead(Pista1) == LOW)
    {     
    Mostrar(1); 
    Terminou = 1;   
    }else
  if (digitalRead(Pista2) == LOW)
    {     
    Mostrar(2); 
    Terminou = 1;   
    }else  
  if (digitalRead(Pista3) == LOW)
    {     
    Mostrar(3); 
    Terminou = 1;   
    }else   
  if (digitalRead(Pista4) == LOW)
    {     
    Mostrar(4); 
    Terminou = 1;   
    }else   
 
   if (digitalRead(Pista5) == LOW)
    {     
    Mostrar(5); 
    Terminou = 1;   
    }else   
 
   if (digitalRead(Pista6) == LOW)
    {     
    Mostrar(6); 
    Terminou = 1;   
    }else   
 
   if (digitalRead(Pista7) == LOW)
    {     
    Mostrar(7); 
    Terminou = 1;   
    }else   
 
   if (digitalRead(Pista8) == LOW)
    {     
    Mostrar(8); 
    Terminou = 1;   
    }else   
 
   if (digitalRead(Pista9) == LOW)
    {     
    Mostrar(9); 
    Terminou = 1;   
    }       
}
}

Aqui funcionou muito bem com o novo código também.

adicionado 3 minutos depois
5 horas atrás, Isadora Ferraz disse:

diz:

-pegue o valor da tabela cujo endereço ou indexador é "valor". Ok.. peguei "9" tabela[9]=0b11011111,

-eu quero escrever um bit no pino de saída A2. Mas lembre-se, só admito 0 ou 1, então...

-eu quero o 3º bit em A2 então vou deslocar 2 bits tudo pra direita >>2, certo?

-estou na IDE do arduíno, preciso fazer um & AND com 1, ok? &1, tudo bem? (se fosse C nem precisava)

Então tá no fim das contas eu fiz... digitalWrite(A2,HIGH), percebestes?

Estou estudando a lógica... a Linguagem "Arduinica" não é o meu forte... rsrsrs

Link para o comentário
Compartilhar em outros sites

@BloodCeltics Lopes @BloodCeltics Lopes O sketch usa 1386 bytes (4%) de espaço de armazenamento para programas. O máximo são 30720 bytes.
Variáveis globais usam 21 bytes (1%) de memória dinâmica, deixando 2027 bytes para variáveis locais. O máximo são 2048 bytes.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x5b
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x5b
Problema ao carregar para a placa. Veja http://www.arduino.cc/en/Guide/Troubleshooting#upload para sugestões.

 

está dando esse erro!

Link para o comentário
Compartilhar em outros sites

Selecionou a placa corretamente?

se for arduino nano, dependendo da versão você tem que escolher a opção "old bootloader" para funcionar.

veja tambem se seu arduino nano tem o chip central 168 ou 328 (daí você seleciona isso no programa do arduino)

verifique tambem a porta que ele está instalado (veja no gerenciador de dispositivos)

11e5a45d6929c914688751ac64049ce988e90cc5

Teste nestas diferentes opções (328p ou 168 ou 328p oldbootloader)

e faça testes nas diferentes portas COM que podem ser selecionadas

Veja se seu arduino está instalado corretamente no gerenciador de dispositivos.

Se for original acho que precisa do driver obtido no site da FTDI

Se for paralelo provavelmente precisa do driver CH340 (acho que náo tem site oficial... tem que achar na net)

 

MAs... se estiver no windows 10 deve reconhecer direto... (pelo menos um CH340 chinês reconheceu direto em um teste que fiz)

 

se for arduino paralelo deve aparecer assim no gerenciador de dispositivos:

image.png.09533c2cfda81cde8e443723e112fe56.png

Link para o comentário
Compartilhar em outros sites

Outro dia estava com um problema destes... nada transmitia para o dispositivo...

no fim descobri que o cabo usb que usei não estava muito bom... peguei um mais curto...

mas mesmo assim o problema não foi resolvido... no fim era a porta USB do notebook que estava ruim...

por algum motivo nenhuma porta do note funcionava... então instalei tudo em outro PC (de mesa)

e aí tudo funcionou de boa.

Seu problema parece ser relacionado a comunicação do arduino com o PC (já que você disse que verificou as opções de modelo da placa)

Então pode testar com outro cabo ou em outro PC.

 

Olhe em cima do maior chip preto da plaquinha e veja qual o modelo tem escrito.

Link para o comentário
Compartilhar em outros sites

O seu é a versão pequena (nano) como mostrada no esquema aqui certo?

Bom, então você tem que testar no Atmega328P ou Atmega328p (Oldbootloader)

Se tiver mais de uma porta COM, teste em cada uma delas.

Teste tambem nas outras portas USB, se possível em outro PC.

Verifique seu Cabo USB (tem uns que não transmitem dados, e servem só para carregar dispositivos)

 

Teste tambem um código simples de exemplo (tem no próprio programa do arduino), chama-se blink conforme foto abaixo... tente enviar ele pro arduino:

learn_arduino_opening_blink_example.jpg?

Link para o comentário
Compartilhar em outros sites

Bom, todas as vezes que me deparei com erro semelhante era comunicação com o arduino ou modelo errado selecionado.

 

O código podemos descartar erro, pois nem com o blink funcionou.

 

Outro dia eu resolvi erro semelhante da seguinte forma:

desinstalei o programa do arduino (inclusive apagando a pasta dele no "arquivos de programas/program files")

e depois instalei uma versão antiga da IDE:

que pode ser baixada aqui:

https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

pode ser um erro com a nova plataforma... para mim resolveu.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!