collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Contadores de minutos millis()  (Lida 10442 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re: Contadores de minutos millis()
« Responder #15 em: 19 de Setembro de 2013, 14:48 »
Boa Tarde Pessoal,

Antes de mais, muito obrigado pela ajuda e pelo vosso tempo. Como o TigPT disse, se nos fizerem o trabalho todo nunca aprendemos nada, e por essa razão agradeço muito o teu tempo tarquinio, mas não vou utilizar o teu código, ou melhor vou utilizar na medida em que me vou orientar por o mesmo.

Alguém falou por ai na minha nota, isto é um projecto pessoal por isso não vou receber nada com o mesmo. :P

Vou agora dar uns toques no pedaço de código que tinha, seguir mais ou menos a lógica do código do amigo tarquinio, e qualquer duvida eu vou colocando aqui.

Os Melhoes Cumprimentos
AndréD.

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: Contadores de minutos millis()
« Responder #16 em: 19 de Setembro de 2013, 14:51 »
Força AndréD ;)

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Contadores de minutos millis()
« Responder #17 em: 20 de Setembro de 2013, 15:08 »
Pois mesmo tendo feito overkill e posto logo o código todo, a minha idéia tambem nunca foi simplesmente por o código para fazeres copy-paste directo, daí ter posto os comentários por todo o lado para conseguires seguir bem a linha de pensamendo ;)

Força nisso, tens de acabar isso rápido que o verão está a acabar e depois para testares isso com temperaturas maiores de 30º tens de esperar até ao ano que vem! :P

Offline andre_f_carvalho

  • Mini Robot
  • *
  • Mensagens: 1.469
    • Pro - andrefcarvalho
Re: Contadores de minutos millis()
« Responder #18 em: 20 de Setembro de 2013, 19:10 »
Pois mesmo tendo feito overkill e posto logo o código todo, a minha idéia tambem nunca foi simplesmente por o código para fazeres copy-paste directo, daí ter posto os comentários por todo o lado para conseguires seguir bem a linha de pensamendo ;)

Força nisso, tens de acabar isso rápido que o verão está a acabar e depois para testares isso com temperaturas maiores de 30º tens de esperar até ao ano que vem! :P


a fogueira também deve servir xD

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re: Contadores de minutos millis()
« Responder #19 em: 21 de Setembro de 2013, 23:50 »
Boas...

Tens razão, tenho de me despachar senão depois não há temperaturas maiores que 30 :P :P :P

Mais uma vez peço aqui ao pessoal uma ajudinha, já andei a ler umas coisas sobre referencias e etc, mas fiquei na mesma.

É o seguinte, preciso de passar um array como parâmetro para uma função, isto para não estar a escrever 50 vezes a mesma coisa que seria:

Código: [Seleccione]
digitalWrite(Saidas[0],HIGH);
digitalWrite(Saidas[1],LOW);
digitalWrite(Saidas[2],LOW);
digitalWrite(Saidas[3],LOW);
digitalWrite(Saidas[4],LOW);
digitalWrite(Saidas[5],LOW);
digitalWrite(Saidas[6],LOW);

Então a ideia passa por fazer o seguinte, receber o array na função, passar por todos os elementos e verificar se os mesmos são 1 ou 0 e se forem 1 colocar a Saída respectiva a HIGH e se for 0 Colocar a respectiva a LOW.

Criei um array "temporario", para guardar os valores que quero.
Código: [Seleccione]
int Values[] = {0,0,0,0,0,0,0};
E depois quando quisesse chamar a função faria o seguinte:

Código: [Seleccione]
Values[] = (1,1,0,0,0,0,0);
    Saida(Values);

Código: [Seleccione]
void Saida(int cenas[]){

  for(int i = 0; i <=6; i++){
    if(cenas[i] == 1) {
      digitalWrite(Saidas[i],HIGH);
    }
    else {
      digitalWrite(Saidas[i],LOW);
    }
}
}

No entanto isto não funciona. Será que podem dar uma mãozinha?

Desde já muito Obrigado pelo tempo e Ajuda
Os Melhores Cumprimentos
AndréD.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Contadores de minutos millis()
« Responder #20 em: 22 de Setembro de 2013, 00:06 »
Ok esta parte tá ok:
Código: [Seleccione]
int Values[] = {0,0,0,0,0,0,0};

Mas isto já n podes fazer:
Código: [Seleccione]
Values[] = (1,1,0,0,0,0,0);

tens de fazer posição a posição:
Código: [Seleccione]
Values[0] = 1;
Values[1] = 1;

E já agora, não é por aí que não funciona, mas podes simplificar o código da função sem precisar de ter o IF (porque ter High e Low é o mesmo que teres 0 ou 1)

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re: Contadores de minutos millis()
« Responder #21 em: 22 de Setembro de 2013, 00:36 »
Boas...

Pois, foi o que li também, que só se podiam atribuir valores individualmente, mas isso vou escrever uma carrada de linhas na mesma, fazer,

Código: [Seleccione]
values[0]=1;
values[1]=1;
etc..

é igual a fazer,

Código: [Seleccione]
digitalWrite(Saidas[0],HIGH);
digitalWrite(Saidas[1],LOW);
digitalWrite(Saidas[2],LOW);
digitalWrite(Saidas[3],LOW);
digitalWrite(Saidas[4],LOW);
digitalWrite(Saidas[5],LOW);
digitalWrite(Saidas[6],LOW);

Era isto é que queria evitar... :P Estou agora aqui a lembrar-me, não existe uma maneira de passar um conjunto de Bits, e depois trata-los 1 por um?

Algo deste género B1000000 e depois ir pegando nos mais à direita ou esquerda e colocar nas saídas os respectivos 1's e 0's?

Os Melhores Cumprimentos
AndréD.
« Última modificação: 22 de Setembro de 2013, 01:29 por AndréD. »

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Contadores de minutos millis()
« Responder #22 em: 22 de Setembro de 2013, 01:09 »
Bem não sei exactamente o que é que pretendes fazer com a coisa... Mas tens várias opções.

A opção que disseste dá para fazer sim. Mas pelo que vejo ainda estás a aprender, e o projecto é é bastante simples, por isso sugeria talvez uma alternativa mais simples, que seria ter vários arrays para cada estado diferente, por exemplo:
Código: [Seleccione]
int estado_1[] = {0,0,0,0,0,0,0};
int estado_2[] = {1,0,1,0,1,0,1};

E depois é passares cada vector ao código que tu já tens. No fundo é igual à tua opção, so que passas vários conjuntos de bytes em vez de vários conjuntos de bits.

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re: Contadores de minutos millis()
« Responder #23 em: 22 de Setembro de 2013, 01:32 »
Boas,

Mais uma vez obrigado pela ajuda e pelo teu tempo tarquinio, mas é o seguinte se vou fazer um array para cada estado ainda fica mais "complicado" pois vou ter muitos estados possíveis nas saídas...

Vou continuando a pesquisar o assunto dos Bits, para ver se chego a alguma conclusão :P

Os Melhores Cumprimentos
AndréD.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Contadores de minutos millis()
« Responder #24 em: 22 de Setembro de 2013, 02:13 »
Fazendo com bits a idéia é a mesma, só que em vez de passares N arrays diferentes tens de passar N conjuntos de bits diferentes. Tambem terás de fazer 1 variável diferente para cada estado, o código não fica mais simples por aí. Vais poupar alguma memória, mas a nivel de código a complexidade é a mesma...

Se quiseres mesmo usar bit masks, tens de aprender a usar os operadores de bits >>,  <<,  &  e |

Por exemplo em vez de escreveres
Código: [Seleccione]
if (a[3] == 1)
fica algo do tipo
Código: [Seleccione]
if (a>>3 & B00000001)

Não estou a dizer que seja mau usar, apenas que a sintaxe é mais estranha até uma pessoa se habituar, e não estou a ver nenhuma forma disso simplificar o código no teu caso..

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re: Contadores de minutos millis()
« Responder #25 em: 22 de Setembro de 2013, 02:19 »
Boas,

 :o Tinha uma ideia errada sobre o assunto...

Peço desculpa pelo tempo que te fiz perder e que eu perdi também, mas já vi que não vai adiantar de grande coisa e o código vai ficar mais confuso.

De qualquer das formas e mais uma vez obrigado pela ajuda.

Os Melhores Cumprimentos
AndréD.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Contadores de minutos millis()
« Responder #26 em: 22 de Setembro de 2013, 02:24 »
Mas no meio disto tudo fiquei sem perceber... Isses outputs todos erm para controlar o que mesmo? :P
Pode ser que se arranje uma maneira alternativa mais simples se explicares mais especificamente o que queres fazer ;)

Offline AndréD.

  • Mini Robot
  • *
  • Mensagens: 180
    • AndreD Robotics
Re: Contadores de minutos millis()
« Responder #27 em: 22 de Setembro de 2013, 02:31 »
Boas,

Basicamente é para controlar um conjunto de reles...
São 7 outputs, que variam entre ON/OFF (HIGH/LOW) a certas horas do dia, e a certos dias.

Cumprimentos
AndréD.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Contadores de minutos millis()
« Responder #28 em: 22 de Setembro de 2013, 03:16 »
Bem se usares as bitmasks consegues fazer coisas numa linha do tipo
Código: [Seleccione]
state = state | B10101010;

que activa logo as posições 7, 5, 3 e um de uma vez, por exemplo. E de forma parecida,
Código: [Seleccione]
state = state & B11111000;

que por exemplo desliga as posições 0, 1 e 2. Não sei se este tipo de coisas ajudará...