123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- #include <hx711.h>
- static long valA = 0 , valB = 0;
- static unsigned char gainA = 0;
- static unsigned char currentFront = 0;
- void hx711Init(unsigned char _gainA)
- {
- gainA = (_gainA != 0);
- digitalClear(HX711_SCK_PIN);
- pinModeDigitalOut(HX711_SCK_PIN);
- pinModeDigitalIn(HX711_DATA_PIN);
- }
- static unsigned char shiftIn()
- {
- unsigned char v = 0;
- unsigned char i = 8;
- while(i--) {
- v <<= 1;
- digitalSet(HX711_SCK_PIN);
-
- digitalClear(HX711_SCK_PIN);
- if(digitalRead(HX711_DATA_PIN)) v += 1;
- }
- return v;
- }
- static long format(unsigned long in)
- {
- #if 0
- in = ~in;
- if( ((in & 0x00FF0000) != 0x00800000) && (in != 0xFF7FFFFF))
- in &= 0x00FFFFFF;
- in += 1;
- return (long)in;
- #endif
- return in^0x800000;
- }
- void hx711Service()
- {
- static unsigned long tmpVal;
- static unsigned char curBit = 0;
-
- if(((curBit == 0) || (curBit == 25)) && digitalRead(HX711_DATA_PIN)) return;
- if((curBit == 0) || (curBit == 26)) tmpVal = 0;
-
- curBit += 1;
- digitalSet(HX711_SCK_PIN);
- Nop();
- Nop();
- Nop();
- Nop();
- digitalClear(HX711_SCK_PIN);
-
- tmpVal <<= 1;
- if(digitalRead(HX711_DATA_PIN)) tmpVal += 1;
-
- if(curBit == 24) valA = format(tmpVal);
- if(curBit == 50) valB = format(tmpVal);
-
- if((gainA==0) && (curBit == 51)) curBit = 0;
- if(curBit >= 53) curBit = 0;
- }
- long hx711Read(unsigned char channel)
- {
- if(channel == 0) return valA;
- else return valB;
- #if 0
- unsigned char i;
- unsigned long value = 0;
- unsigned char data[3] = { 0 };
- unsigned char filler = 0x00;
-
- if(mode>2) mode=2;
- mode += 1;
-
- data[2] = shiftIn();
- data[1] = shiftIn();
- data[0] = shiftIn();
-
- for (i = 0; i < mode; i++) {
- digitalSet(HX711_SCK_PIN);
- digitalClear(HX711_SCK_PIN);
- }
-
-
- data[2] = ~data[2];
- data[1] = ~data[1];
- data[0] = ~data[0];
-
- if ( data[2] & 0x80 ) {
- filler = 0xFF;
- } else if ((0x7F == data[2]) && (0xFF == data[1]) && (0xFF == data[0])) {
- filler = 0xFF;
- } else {
- filler = 0x00;
- }
-
- value = (unsigned long)(filler) << 24
- | ((unsigned long)(data[2]) << 16)
- | ((unsigned long)(data[1]) << 8)
- | ((unsigned long)(data[0]) );
- value += 1;
-
- return value;
- #endif
- }
|