Metainformationen zur Seite
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
computer:raspberrypi:projekte:matrix [2013/08/03 08:46] ristigl |
computer:raspberrypi:projekte:matrix [2018/03/16 21:11] (aktuell) |
||
---|---|---|---|
Zeile 7: | Zeile 7: | ||
Dazu wird das Arduino Programm ([[computer:raspberrypi:mit_arduino_koppeln|RaspberryPi mit Arduino koppeln]]) an ein weiteres Programm, welches eine Laufschrift anzeigen lässt angepasst: | Dazu wird das Arduino Programm ([[computer:raspberrypi:mit_arduino_koppeln|RaspberryPi mit Arduino koppeln]]) an ein weiteres Programm, welches eine Laufschrift anzeigen lässt angepasst: | ||
- | <code> | + | <code cpp> |
const int zeilenstart=2; // Pin ab dem die Zeilen anfangen | const int zeilenstart=2; // Pin ab dem die Zeilen anfangen | ||
const int spaltenstart=10; // Pin ab dem die Spalten anfangen | const int spaltenstart=10; // Pin ab dem die Spalten anfangen | ||
Zeile 71: | Zeile 71: | ||
==== Raspberry Pi Programme ==== | ==== Raspberry Pi Programme ==== | ||
+ | Zunächst sollte man den Raspberry Pi auf die serielle Kommunikation vorbereiten (siehe [[computer:raspberrypi:mit_arduino_koppeln#raspberry_pi|RaspberryPi mit Arduino koppeln]]). | ||
Damit man nun nicht jedesmal die drei 0 an den Anfang setzen muss und der Raspberry Pi auch nur 8 Parameter übergibt wird das Programm für den Raspberry Pi aus "[[computer:raspberrypi:mit_arduino_koppeln|RaspberryPi mit Arduino koppeln]]" ein wenig angepasst: | Damit man nun nicht jedesmal die drei 0 an den Anfang setzen muss und der Raspberry Pi auch nur 8 Parameter übergibt wird das Programm für den Raspberry Pi aus "[[computer:raspberrypi:mit_arduino_koppeln|RaspberryPi mit Arduino koppeln]]" ein wenig angepasst: | ||
=== Parameterübergabe === | === Parameterübergabe === | ||
- | <code> | + | <code python> |
import serial | import serial | ||
import time | import time | ||
Zeile 102: | Zeile 103: | ||
Über diese Internetseite kann man die benötigten Werte an das Python-Programm weiterreichen. | Über diese Internetseite kann man die benötigten Werte an das Python-Programm weiterreichen. | ||
- | <code> | + | <code php> |
<?php | <?php | ||
$a = explode (",",$_GET["v"]); | $a = explode (",",$_GET["v"]); | ||
Zeile 112: | Zeile 113: | ||
passthru("/usr/bin/python senden ".implode(" ",$a)); | passthru("/usr/bin/python senden ".implode(" ",$a)); | ||
} else { | } else { | ||
- | echo 'Fehler bei der Eingabe!<br>Nicht genau 8 Werte!<br><br>Adresse muss folgende Form haben:<br><a href="?v=1,2,4,8,16,32,64,128 | + | echo 'Fehler bei der Eingabe!<br>Nicht genau 8 Werte!<br><br>Adresse muss folgende Form haben:<br><a href="?v=1,2,4,8,16,32,64,128">?v=1,2,4,8,16,32,64,128'; |
} | } | ||
?> | ?> | ||
Zeile 120: | Zeile 121: | ||
Da es auf Dauer wenig Spaß macht jedesmal die LEDs bzw. die Parameter auszurechnen, programmiert man sich kurz eine Internetseite, die das ganze durch anklicken einer virtuellen Martix für einen berechnet und sofort an über die anderen Programme (Internetseite, Parameterübergabe, etc.) an den Arduino bzw. die Matrix selbst weiterleitet. | Da es auf Dauer wenig Spaß macht jedesmal die LEDs bzw. die Parameter auszurechnen, programmiert man sich kurz eine Internetseite, die das ganze durch anklicken einer virtuellen Martix für einen berechnet und sofort an über die anderen Programme (Internetseite, Parameterübergabe, etc.) an den Arduino bzw. die Matrix selbst weiterleitet. | ||
Davor muss man sich jedoch noch folgendes runterladen, um nicht über andere Server gehen zu müssen (Vgl. [[computer:raspberrypi:projekte:blinken|Blinken]]): | Davor muss man sich jedoch noch folgendes runterladen, um nicht über andere Server gehen zu müssen (Vgl. [[computer:raspberrypi:projekte:blinken|Blinken]]): | ||
- | <code> | + | <code bash> |
wget http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js | wget http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js | ||
</code> | </code> | ||
- | <code> | + | <code html> |
<!DOCTYPE html> | <!DOCTYPE html> | ||
<html> | <html> | ||
Zeile 167: | Zeile 168: | ||
</code> | </code> | ||
+ | ==== Netzwerkkontrolle ==== | ||
+ | Wenn man den Raspberry Pi über Wlan steuert (siehe [[computer:raspberrypi:netzwerk|Netzwerk]] ), sollte man sicherstellen, dass der Pi nicht die Verbindung zum Netz verliert. Dazu gibt es ein Script (/home/pi/checkping), welches prüft ob eine Verbindung vorliegt und gegebenenfalls das Wlan deaktiviert und wieder aktiviert: | ||
+ | |||
+ | <code bash> | ||
+ | #!/bin/bash | ||
+ | IP=192.168.0.1 | ||
+ | DEV=wlan0 | ||
+ | |||
+ | ping -q -W 5 -c 3 $IP >/dev/null | ||
+ | if [ ! $? -eq "0" ] | ||
+ | then | ||
+ | ifdown $DEV | ||
+ | sleep 15 | ||
+ | ifup $DEV | ||
+ | fi | ||
+ | </code> | ||
+ | |||
+ | Damit dieses Script alle 5 Minuten ausgeführt wird speichert man eine Datei mit folgendem Inhalt im Ordner **/etc/cron.d** : | ||
+ | <code bash> | ||
+ | */5 * * * * root /home/pi/checkping > /dev/null 2>&1 | ||
+ | </code> | ||
+ | |||
+ | ==== Uhr ==== | ||
+ | Um eine Uhr auf der Matrix anzeigen zu lassen, die sich für 20 Sekunden durch ein über Website programmierstes Muster überschreiben lässt benötigt man folgendes Script: | ||
+ | <code python> | ||
+ | import serial | ||
+ | import time | ||
+ | import sys | ||
+ | import os | ||
+ | import os.path | ||
+ | |||
+ | delay = 0.01 | ||
+ | comunicacion = serial.Serial('/dev/ttyAMA0', 9600) | ||
+ | comunicacion.close() | ||
+ | comunicacion.open() | ||
+ | |||
+ | m=([0,0,0,0,0,0,0,0]) | ||
+ | h=([0,0,0,0,0,0,0,0]) | ||
+ | s=([0,0,0,0,0,0,0,0]) | ||
+ | |||
+ | H = 0 | ||
+ | M = 0 | ||
+ | S = 0 | ||
+ | |||
+ | while True: | ||
+ | try: | ||
+ | timea = os.path.getmtime("/tmp/block") | ||
+ | except: | ||
+ | timea = time.time() | ||
+ | if os.path.isfile("/tmp/block") and time.time()-timea>20: | ||
+ | H=time.localtime().tm_hour%12 | ||
+ | M=int(time.localtime().tm_min/5) | ||
+ | S=int(time.localtime().tm_sec/2) | ||
+ | while int(time.localtime().tm_sec/2)==S: | ||
+ | time.sleep(delay) | ||
+ | |||
+ | #----------------------------------------------------------------------- | ||
+ | #Minuten | ||
+ | |||
+ | m=[[0,0,0,1,1,0,0,0], | ||
+ | [0,0,0,0,0,1,1,0], | ||
+ | [0,0,0,0,0,0,0,6], | ||
+ | [0,0,0,0,0,0,0,24], | ||
+ | [0,0,0,0,0,0,0,96], | ||
+ | [0,0,0,0,0,128,128,0], | ||
+ | [0,0,0,128,128,0,0,0], | ||
+ | [0,128,128,0,0,0,0,0], | ||
+ | [96,0,0,0,0,0,0,0], | ||
+ | [24,0,0,0,0,0,0,0], | ||
+ | [6,0,0,0,0,0,0,0], | ||
+ | [0,1,1,0,0,0,0,0]] | ||
+ | #----------------------------------------------------------------------- | ||
+ | #Stunden | ||
+ | h=[[0,0,0,2,2,0,0,0], | ||
+ | [0,0,0,0,2,2,0,0], | ||
+ | [0,0,0,0,0,2,4,0], | ||
+ | [0,0,0,0,0,0,24,0], | ||
+ | [0,0,0,0,0,0,48,0], | ||
+ | [0,0,0,0,0,64,32,0], | ||
+ | [0,0,0,64,64,0,0,0], | ||
+ | [0,0,64,64,0,0,0,0], | ||
+ | [0,32,64,0,0,0,0,0], | ||
+ | [0,24,0,0,0,0,0,0], | ||
+ | [0,12,0,0,0,0,0,0], | ||
+ | [0,4,2,0,0,0,0,0]] | ||
+ | |||
+ | #----------------------------------------------------------------------- | ||
+ | #Sekunden | ||
+ | s=[[0,0,0,1,0,0,0,0], | ||
+ | [0,0,0,0,1,0,0,0], | ||
+ | [0,0,0,0,0,1,0,0], | ||
+ | [0,0,0,0,0,0,1,0], | ||
+ | [0,0,0,0,0,0,0,1], | ||
+ | [0,0,0,0,0,0,0,2], | ||
+ | [0,0,0,0,0,0,0,4], | ||
+ | [0,0,0,0,0,0,0,8], | ||
+ | [0,0,0,0,0,0,0,16], | ||
+ | [0,0,0,0,0,0,0,32], | ||
+ | [0,0,0,0,0,0,0,64], | ||
+ | [0,0,0,0,0,0,0,128], | ||
+ | [0,0,0,0,0,0,0,128], | ||
+ | [0,0,0,0,0,0,128,0], | ||
+ | [0,0,0,0,0,128,0,0], | ||
+ | [0,0,0,0,128,0,0,0], | ||
+ | [0,0,0,128,0,0,0,0], | ||
+ | [0,0,128,0,0,0,0,0], | ||
+ | [0,128,0,0,0,0,0,0], | ||
+ | [128,0,0,0,0,0,0,0], | ||
+ | [64,0,0,0,0,0,0,0], | ||
+ | [32,0,0,0,0,0,0,0], | ||
+ | [16,0,0,0,0,0,0,0], | ||
+ | [8,0,0,0,0,0,0,0], | ||
+ | [4,0,0,0,0,0,0,0], | ||
+ | [2,0,0,0,0,0,0,0], | ||
+ | [1,0,0,0,0,0,0,0], | ||
+ | [1,0,0,0,0,0,0,0], | ||
+ | [0,1,0,0,0,0,0,0], | ||
+ | [0,0,1,0,0,0,0,0]] | ||
+ | #----------------------------------------------------------------------- | ||
+ | |||
+ | |||
+ | for a in [0,0,0]: | ||
+ | comunicacion.write(chr( 0 )) | ||
+ | time.sleep(delay) | ||
+ | |||
+ | for i in range(0,8): | ||
+ | t_i = m[M][i] | h[H][i] | s[S][i] | ||
+ | print t_i | ||
+ | comunicacion.write(chr( int(t_i) )) | ||
+ | time.sleep(delay) | ||
+ | |||
+ | else: | ||
+ | time.sleep(1) | ||
+ | |||
+ | </code> | ||
+ | Damit das Programm uhr.py automatisch beim Start des Raspberry Pis im Hintergrund mitgestartet wird, fügt man folgende Zeilen in **/etc/rc.local** hinzu: | ||
+ | <code bash> | ||
+ | |||
+ | #!/bin/sh -e | ||
+ | # | ||
+ | # rc.local | ||
+ | # | ||
+ | # This script is executed at the end of each multiuser runlevel. | ||
+ | # Make sure that the script will "exit 0" on success or any other | ||
+ | # value on error. | ||
+ | # | ||
+ | # In order to enable or disable this script just change the execution | ||
+ | # bits. | ||
+ | # | ||
+ | # By default this script does nothing. | ||
+ | |||
+ | python /home/pi/uhr.py & | ||
+ | |||
+ | exit 0 | ||
+ | |||
+ | </code> |