summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2019-09-22 23:08:48 +0200
committerErich Eckner <git@eckner.net>2019-09-22 23:08:48 +0200
commitac8952d8aa16466ec9b813635922a57707e1c469 (patch)
tree1f530b095fccfe8765f6fc280c89d99c0e76b1c9
parent21d397bc2e3c5253647cd5af6c78a56853c7bcee (diff)
downloadraspi-sensor-ac8952d8aa16466ec9b813635922a57707e1c469.tar.xz
geht erst mal irgendwie
-rw-r--r--sensor.c40
1 files changed, 33 insertions, 7 deletions
diff --git a/sensor.c b/sensor.c
index 2c933da..f764817 100644
--- a/sensor.c
+++ b/sensor.c
@@ -23,16 +23,42 @@ int main() {
pinMode(9, PINMODE_OUTPUT);
digitalWrite(9, HIGH);
- pinMode(8, PINMODE_OUTPUT);
pinMode(9, PINMODE_INPUT);
+ pinMode(8, PINMODE_OUTPUT);
+
while(1) {
- printf("Writing to GPIO %d: High\n", 8);
+ // start bit
digitalWrite(8, HIGH);
-printf("Reading from GPIO %d: %d\n", 9, digitalRead(9));
- usleep(100000);
- printf("Writing to GPIO %d: Low\n", 8);
+ usleep(18000);
digitalWrite(8, LOW);
-printf("Reading from GPIO %d: %d\n", 9, digitalRead(9));
- usleep(100000);
+ long int cycles = 0;
+ int last_state = digitalRead(9);
+ // ignore 2 bits: reaction on command + "official" start bit
+ int bit = -2;
+ char data[5];
+ memset(&data[0], 0, 5);
+ while (cycles < 100000) {
+ cycles++;
+ if (last_state == digitalRead(9))
+ continue;
+ if (last_state == 1) {
+ if (bit >= 0) {
+ if (cycles>400) {
+ printf("1");
+ data[bit / 8] |= 1 << 7 - (bit % 8);
+ } else
+ printf("0");
+ if ((bit+1) % 8 == 0)
+ printf(" ");
+ }
+ bit++;
+ }
+ cycles = 0;
+ last_state = 1-last_state;
+ }
+ if ((bit == 40) && ((data[0]+data[1]+data[2]+data[3]-data[4]) % 255 == 0))
+ printf(" %f %f", data[0] + data[1]/256., data[2] + data[3]/256.);
+ printf("\n\n");
+ sleep(2);
}
}