Go Down

Topic: (RESOLVIDO) Ajuda com word e byte (Read 750 times) previous topic - next topic

mmoscz

Mar 16, 2013, 11:42 pm Last Edit: Mar 17, 2013, 06:54 pm by mmoscz Reason: 1
Quote

Eu estava bobeando e descobri que quando fazia o Entradas = ~Entradas ele ficava com 0xFFXX, e nunca ia ficar como o Entradas_OLD, pois eu setava apenas o primeiro byte do Entradas.


Estou fazendo um sistema para entrada de 16 botões, ainda não coloquei os dois 74166, mas mesmo não operando com os 16 bits.
Alguém pode dar uma olhada nesse código, pois se substituo o tipo das variáveis de byte para word, não acontece nada quando aperto os botões, mas se uso byte responde como esperado
Provavelmente deve ser alguma coisinha que estou esquecendo, mas depois de dois dias, já não sei mais o que tentar.

Code: [Select]

#define CI74166_DATAIN 11    // 74166 13
#define CI74166_CLOCK  12    // 74166 7
#define CI74166_CLOCK_INH 10 // 74166 6
#define CI74166_STROBE 7    // 74166 15

byte Entradas166;
byte Entradas166_OLD = 0xFF;
byte FinalButtons = 0x0000;
byte FinalButtons_OLD = 0x0000;

unsigned long LastRead;
int DebounceDelay = 50;

void setup()
 {
 pinMode(CI74166_DATAIN, INPUT);
 pinMode(CI74166_CLOCK, OUTPUT);
 pinMode(CI74166_CLOCK, OUTPUT);
 pinMode(CI74166_CLOCK_INH, OUTPUT);
 pinMode(CI74166_STROBE, OUTPUT);
 Serial.begin(9600);
 }
 
void loop()
 {
 shiftIn();
 if (Entradas166 != Entradas166_OLD)  
   {
   LastRead = millis();
   }
 if ((millis() - LastRead) > DebounceDelay)
   {                    
   FinalButtons = Entradas166;
   }
 if (FinalButtons != FinalButtons_OLD)
   {
   Serial.println(FinalButtons, BIN);
   FinalButtons_OLD = FinalButtons;
   }  
 Entradas166_OLD = Entradas166;
 }
 
void shiftIn()
{
 int BitEntrada = 0;
 digitalWrite(CI74166_CLOCK,0);
 digitalWrite(CI74166_STROBE,0);
 delayMicroseconds(2);
 digitalWrite(CI74166_CLOCK,1); // important
 digitalWrite(CI74166_STROBE,1);
 for (int i= 0; i <= 7; i++)
 {
   digitalWrite(CI74166_CLOCK,1);
   delayMicroseconds(2);
   bitWrite(Entradas166, 7 - i, digitalRead(CI74166_DATAIN));
   digitalWrite(CI74166_CLOCK,0);
   delayMicroseconds(2);
 }
 Entradas166 = ~Entradas166;
}    
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

tretas

Boas,

Visto que o

word

Description
A word stores a 16-bit unsigned number, from 0 to 65535. Same as an unsigned int.


Eu tentava com um unsigned int, pois eu não percebo é como pode funcionar com um byte visto que não cabe la dentro, mas eu pelo que tenho lido aqui no forum estou a anos luz de você a nível de codigo para o arduino ...

Cpts

Zé tretas
Arduino Mega 2560
Arduino Nano
Arduino UNO Rev3
Raspberry PI Model B
EasyPIC v4

mmoscz

Essa é o problema, eu não consigo usar os 16bits, pois quando altero para word que seria para armazenar os 16 botões, não faz nada.
4x Duemilanove (clone)
Uno torrado (clone)
Amiga 1200 40MB
Windows XP

Go Up