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: arduino 7 segment counter  (Lida 6325 vezes)

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

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
arduino 7 segment counter
« em: 28 de Setembro de 2014, 16:35 »
Boa tarde amigos!

Preciso da vossa ajuda  :).
Tenho um projecto em que consiste fazer rodar um rotary encoder ao mesmo tempo que faz a contagem visual num display de 7 segmentos. Depois  de uma pesquisa, encontrei um código no google que basicamente é o que pretendo. O problema é que o código é para um segmento com um positivo comum e o display que tenho o comum é negativo. Que alterações devo fazer?

Agradeço antecipadamente a vossa ajuda

Código: [Seleccione]
/*



inspired by circuits at home
http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino

*/

#define encPinA 14                           // rotary encoder pin A
int encALast;
#define encPinB 15                           // rotary encoder pin B

int theNumber = 0; // 3.8.2011
int val;
int segments[7] = {12,13,3,4,5,10,9};       // pins, the segments are attached to

//int segments[7] = {3,4,9,11,12,5,6};       // pins, the segments are attached to
int digits[2] = {7,11};                    // common anode of each digit
int buttonPin = 2;                         // pin, where the start stop button is connected
int lastButtonState;

boolean timer = false;
long myStartTime;

long theSecond = 1000;

byte seven_seg_segments[10][7] = {
  {1,1,1,1,1,1,0},  // = 0
  {0,1,1,0,0,0,0},  // = 1
  {1,1,0,1,1,0,1},  // = 2
  {1,1,1,1,0,0,1},  // = 3
  {0,1,1,0,0,1,1},  // = 4
  {1,0,1,1,0,1,1},  // = 5
  {1,0,1,1,1,1,1},  // = 6
  {1,1,1,0,0,0,0},  // = 7
  {1,1,1,1,1,1,1},  // = 8
  {1,1,1,1,0,1,1}   // = 9
};

void setup() {   
//  Serial.begin(9600);                    // starts serial communication
  pinMode(encPinA, INPUT);                    // set rotary encoder A pin as input
  pinMode(encPinB, INPUT);                    // set rotary encoder B pin as input 
  digitalWrite(encPinA, HIGH);                // switches internal drop down resistors on
  digitalWrite(encPinB, HIGH);                // switches internal drop down resistors on

  pinMode(buttonPin,INPUT);

  for (int i=0; i<7; i++){
    pinMode(segments[i], OUTPUT);           // sets the seven segment outputs
  }

  for (int i=0; i<2; i++){
    pinMode(digits[i], OUTPUT);             // sets the seven segment outputs
  }
}

void sevenSegWrite(int thePosition, int digit) {  // write a number to a seven segment digit
  for (int i = 0; i < 7; i++) {         
    if (seven_seg_segments[digit][i] == 1){ 
      digitalWrite(segments[i], LOW);
    }
    else {
      digitalWrite(segments[i], HIGH);
    }
  }
  digitalWrite(digits[thePosition], HIGH);
  delayMicroseconds(200);
  digitalWrite(digits[thePosition], LOW);
  delayMicroseconds(200);
}

void clearDisplay() {                              // clear the display
  for (int i=0; i<5; i++){
    digitalWrite(digits[i], LOW);
  }
}

void showNumber(){                                 // show the number
    char szZahl[1];
    sprintf(szZahl, "%d", theNumber);
    int ergebnis = szZahl[0] - '0';
    if (ergebnis>-1){
      sevenSegWrite(1,ergebnis);
      delayMicroseconds(10);
    } else {
      sevenSegWrite(1,0);
      delayMicroseconds(10);
    }
    delay(1);
    clearDisplay();
}

void loop() {
  // read rotary encoder
  if (encALast!=digitalRead(encPinA)){
    if ((digitalRead(encPinA)==LOW)&&(digitalRead(encPinB)==LOW)) {
      theNumber++;
      if (theNumber>9) theNumber=0;
    }
    if ((digitalRead(encPinA)==LOW)&&(digitalRead(encPinB)==HIGH)) {
      theNumber--;
      if (theNumber<0) theNumber=9;
    }
  }
 
  encALast=digitalRead(encPinA);
 
  clearDisplay();
  showNumber();
  delay(1);
}

Offline dropes

  • Mini Robot
  • *
  • Mensagens: 2.189
Re: arduino 7 segment counter
« Responder #1 em: 28 de Setembro de 2014, 17:27 »
Comprar um display 7 segmentos de ânodo comum ou esperar que alguém escreva novo código para cátodo comum, de preferência com um circuito anexado para facilitar. 

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: arduino 7 segment counter
« Responder #2 em: 28 de Setembro de 2014, 18:12 »
Ou então aprender a escrever o próprio código... alterar de ânodo comum para cátodo comum é básico, se entendesses o que esse código faz era meio caminho andado e não demorava mais de 1 minuto...

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: arduino 7 segment counter
« Responder #3 em: 28 de Setembro de 2014, 19:42 »
Citar
Ou então aprender a escrever o próprio código... alterar de ânodo comum para cátodo comum é básico, se entendesses o que esse código faz era meio caminho andado e não demorava mais de 1 minuto...


Ok...não era propriamente esse tipo de respostas que estava à espera.
Pode ser básico para vocês, mas para quem não sabe e quer aprender pergunta. E é o que estou a fazer...


Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: arduino 7 segment counter
« Responder #4 em: 28 de Setembro de 2014, 19:58 »
Tens de entender que apesar de teres vários membros deste fórum capazes de resolver essa situação num instante, torna-se chato ver uma grande parte das perguntas deste fórum parecerem pedidos de ajuda para resolver trabalhos de casa (que pode ser ou não o teu caso).
No teu caso,  pelo menos soubeste usar o google para te aproximares da resolução do problema (há quem nem isso saiba fazer :o), mas paraste aí. Não mostraste qualquer conhecimento sobre o código que enviaste, e pediste ajuda sem explicar qual o fim a que se destina o teu projeto, levantando dúvidas sobre se não é um trabalho que deverias utilizar para aprender em vez de arranjar quem to resolva. É que se for apenas esse o fim, há aqui pessoas que lhes pagam à hora para fazer isso.

Muda a pergunta de "ponham-me este código a fazer isto", para algo do género "entendi que este código faz XX e YY, não entendo as diferenças entre cátodo comum e ánodo comum, podiam explicar o que significam e como sugerem que altere o código", e vais ver que tens melhores respostas.

Considera que a comunidade não está aqui para te ajudar a resolver os problemas, mas a ajudar-te a aprenderes como tú próprio os resolver (seguindo o provérbio Chinês: "Não dê o peixe, ensine a pescar").

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: arduino 7 segment counter
« Responder #5 em: 28 de Setembro de 2014, 21:16 »
jm_araujo, se quiseres ajudar (o que agradeço), ajuda. Lições de moral dispenso de alguém que não conheço.
Posso ter formulado mal a questão. Não tenho que me justificar, mas posso dizer-te que não acordei hoje de manhã e lembrei-me disto..... Se consegues resolver num minuto os meus parabéns!!!

Não sou nenhum menino de escola que tem que apresentar nenhum trabalho. Sou apenas um individuo com curiosidade, gosta de programação e electrónica, não tenho qualquer formação académica nesta àrea. O pouco que sei foi a perguntar e a pesquisar no google.

Aliás, tenho a minha casa completamente domotizada graças ajuda de malta disponivel deste forum e de outros, mas isso já foi algum tempo atrás pois parece que agora os membros andam um pouco impacientes em ajudar.

E acho que é bom ficarmos por aqui.


StarRider

  • Visitante
Re: arduino 7 segment counter
« Responder #6 em: 28 de Setembro de 2014, 22:24 »
jm_araujo, se quiseres ajudar (o que agradeço), ajuda. Lições de moral dispenso de alguém que não conheço.
Posso ter formulado mal a questão. Não tenho que me justificar, mas posso dizer-te que não acordei hoje de manhã e lembrei-me disto..... Se consegues resolver num minuto os meus parabéns!!!

Não sou nenhum menino de escola que tem que apresentar nenhum trabalho. Sou apenas um individuo com curiosidade, gosta de programação e electrónica, não tenho qualquer formação académica nesta àrea. O pouco que sei foi a perguntar e a pesquisar no google.

Aliás, tenho a minha casa completamente domotizada graças ajuda de malta disponivel deste forum e de outros, mas isso já foi algum tempo atrás pois parece que agora os membros andam um pouco impacientes em ajudar.

E acho que é bom ficarmos por aqui.

Não sabemos quem está do outro lado, o que o Araujo escreveu é totalmente normal e não se trata nem de
longe nem de perto de lições de moral ... pessoalmente até acho que ele foi muito comedido, educado e
está subjacente a sua vontade de ajudar.

Mas numa coisa tens razão, falta a paciência e a pachorra para ajudar nestas situações que são constantes
... é o mal dos arduinos, digo eu, mas sou suspeito nesse tipo de comentários.


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: arduino 7 segment counter
« Responder #7 em: 28 de Setembro de 2014, 22:31 »
Não é impaciência, é tratarem do fórum como se se trata-se de um rent-a-coder gratuito..
Avr fanboy

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: arduino 7 segment counter
« Responder #8 em: 22 de Janeiro de 2015, 12:06 »
 Resultado final . Isto é um AP Altitude para o meu FSX. 

Offline Electropepper

  • Mini Robot
  • *
  • Mensagens: 116
    • Electropepper
Re: arduino 7 segment counter
« Responder #9 em: 22 de Janeiro de 2015, 12:41 »
Na função byte seven_seg_segments[10][7],
esperimenta inverter os uns e zeros, só assim derepente.

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: arduino 7 segment counter
« Responder #10 em: 23 de Janeiro de 2015, 07:59 »
Precisamente Electropepper, foi isso que na altura me ocorreu, experimentei e resultou!

Offline Electropepper

  • Mini Robot
  • *
  • Mensagens: 116
    • Electropepper
Re: arduino 7 segment counter
« Responder #11 em: 23 de Janeiro de 2015, 11:18 »
Boa, percebeste porquê ?

Offline m2snd

  • Mini Robot
  • *
  • Mensagens: 65
Re: arduino 7 segment counter
« Responder #12 em: 27 de Janeiro de 2015, 12:17 »
O google é um grande companheiro ;-) !