summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2018-03-30 17:41:26 +0100
committerdakkar <dakkar@thenautilus.net>2018-03-30 17:41:26 +0100
commitebf6be044251ea506cd74467834f2a6095ac7e95 (patch)
treeb903a3cd1be243eef34e2919f7cb8a1f60feacbe
parentwe may be able to send from the CHIP (diff)
downloadthermostat-ebf6be044251ea506cd74467834f2a6095ac7e95.tar.gz
thermostat-ebf6be044251ea506cd74467834f2a6095ac7e95.tar.bz2
thermostat-ebf6be044251ea506cd74467834f2a6095ac7e95.zip
the script does *something*, but the timing is awful
the pulses are all wrong
-rw-r--r--trasmitter/sender-chip.pl57
1 files changed, 43 insertions, 14 deletions
diff --git a/trasmitter/sender-chip.pl b/trasmitter/sender-chip.pl
index 27ae20e..f6d3dd3 100644
--- a/trasmitter/sender-chip.pl
+++ b/trasmitter/sender-chip.pl
@@ -3,12 +3,12 @@ use strict;
use warnings;
use Time::HiRes qw(usleep sleep gettimeofday tv_interval);
-my $base = do {
- open my $fh,'<','/sys/class/gpio/gpiochip405/base' or die "can't get base: $!";
- my $line = <$fh>;
- chomp($line);
- $line;
-};
+# my $base = do {
+# open my $fh,'<','/sys/class/gpio/gpiochip405/base' or die "can't get base: $!";
+# my $line = <$fh>;
+# chomp($line);
+# $line;
+# };
sub gpio_enable {
my ($pin,$state) = @_;
@@ -49,14 +49,43 @@ gpio_write($pin,0);
$SIG{INT} = sub {warn"disabling";gpio_enable($pin,0) };
END { warn"disabling";gpio_enable($pin,0) }
-my $width = 400; # this seems to provide pulse widths close enough to
+my $width = 370; # this seems to provide pulse widths close enough to
# what we need, it's 106 samples at 192kHz
-while (1) {
- for (0..50) {
- gpio_write($pin,1);
- usleep($width);
- gpio_write($pin,0);
- usleep($width);
+
+sub send_array {
+ my $state = 1;
+ for (@_) {
+ gpio_write($pin,$state);
+ usleep($width*$_);
+ $state = $state ? 0 : 1;
}
- sleep(0.5);
}
+
+my @prologue = (
+ 1,1, 1,1, 1,1, 1,1, 1,1, 1,1,
+ 2,3, 1,1, 2,2, 1,1, 1,1, 2,1,
+ 1,1, 1,1, 1,2, 1,1, 1,1, 1,1,
+ 1,1, 1,1,
+);
+my @epilogue = (
+ 1,2, 2,2, 1,3, # the last value doesn't much matter
+);
+
+my @on_signal = (
+ 2,2, 1,1, 1,1, 1,1, 1,1, 2,1, 1,1,
+);
+my @off_signal = (
+ 1,1, 1,1, 1,1, 1,1, 1,1, 2,2, 2,1,
+);
+
+my @train = (
+ @prologue,
+ ( $ARGV[0] ? @on_signal : @off_signal ),
+ @epilogue,
+);
+
+send_array(@train);
+sleep(1);
+send_array(@train);
+sleep(2);
+send_array(@train);