01.12.2018, 14:45
(Dieser Beitrag wurde zuletzt bearbeitet: 01.12.2018, 15:11 von Bernhard45.)
Hallo zusammen,
ich hatte vor einigen Tagen schon mal eine eMail bekommen mit der Frage wie man mit einem Drehencoder von Sunfounder (https://www.sunfounder.com/learn/Super_K...rrypi.html)
eine Programmumschaltung bei unserem Internetradio machen kann. Ob ich nicht die Demo von obig verlinkten Programm abändern könnte. Nun das will ich hiermit nachholen, vielleicht stellt sich ja jemand anderes auch diese Frage.
@Jupp: Wie bereits per PN besprochen, kannst Du deinen Tiny-Controller damit ebenfalls ersetzen.
Nun erstmal zum Drehencoder und wie er am Raspberry angeschlossen wird:
Raspberry Pi Rotary Encoder Module
3.3V ‘+’
GND GND
GPIO0 DT
GPIO1 CLK
Angeschlossen sieht das so aus:
Nun noch kurz das Programm angepasst, ich passe aber nur den C-Code an, denn nur dieser läuft auch auf den Ur-Raspberrys schnell.
Wie Ihr seht wurden nur die Befehle zum Umschalten auf die nächste Station system("echo \"next\" | nc 127.0.0.1 9294 -N");
und auf die vorherige Station eingefügt: system("echo \"prev\" | nc 127.0.0.1 9294 -N");
Die Ausgaben des Demoprogramms von Sunfounder habe ich entfernt, wir bauchen diese hier nicht.
Wie übersetzt man das Programm? Nachdem der modifizierte Democode in einer Textdatei zum Beispiel rotary.c abgespeichert wurde, öffnet man eine Konsole und wechselt in das Verzeichnis in dem die Datei rotary.c liegt.
Zum Kompilieren gibt man dann ein:
gcc rotary.c -o rotary -lwiringPi
Das fertige Programm kann über den Befehl: sudo ./rotary & ausgeführt werden. Nach dem Programmstart schaltet man dann mit dem Drehencoder durch die Senderliste von VLC.
Kopiert man zum Beispiel das Programm rotary nach /usr/bin und fügt den oben genannten Befehl inklusive Dateipfad in die Datei /etc/rc.local ein (bitte vor exit 0 einfügen), dann wird das Programm bei jedem Systemstart automatisch ausgeführt. Jetzt kann man noch ein zweites Programm für das holen der Senderinfos und deren Ausgabe auf einem Display schreiben, es ebenso wie rotary beim Systemstart automatisch ausführen lassen und das ganze Internetradio läuft modular und jede Aufgabe ist für sich gut getrennt.
Gar nicht so schwer oder?
Gruß Bernhard
ich hatte vor einigen Tagen schon mal eine eMail bekommen mit der Frage wie man mit einem Drehencoder von Sunfounder (https://www.sunfounder.com/learn/Super_K...rrypi.html)
eine Programmumschaltung bei unserem Internetradio machen kann. Ob ich nicht die Demo von obig verlinkten Programm abändern könnte. Nun das will ich hiermit nachholen, vielleicht stellt sich ja jemand anderes auch diese Frage.
@Jupp: Wie bereits per PN besprochen, kannst Du deinen Tiny-Controller damit ebenfalls ersetzen.
Nun erstmal zum Drehencoder und wie er am Raspberry angeschlossen wird:
Raspberry Pi Rotary Encoder Module
3.3V ‘+’
GND GND
GPIO0 DT
GPIO1 CLK
Angeschlossen sieht das so aus:
Nun noch kurz das Programm angepasst, ich passe aber nur den C-Code an, denn nur dieser läuft auch auf den Ur-Raspberrys schnell.
Code:
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <wiringPi.h>
#define RoAPin 0
#define RoBPin 1
unsigned char flag;
unsigned char Last_RoB_Status;
unsigned char Current_RoB_Status;
void rotaryDeal(void)
{
Last_RoB_Status = digitalRead(RoBPin);
while(!digitalRead(RoAPin)){
Current_RoB_Status = digitalRead(RoBPin);
flag = 1;
}
if(flag == 1){
flag = 0;
if((Last_RoB_Status == 0)&&(Current_RoB_Status == 1)){
system("echo \"next\" | nc 127.0.0.1 9294 -N");
}
if((Last_RoB_Status == 1)&&(Current_RoB_Status == 0)){
system("echo \"prev\" | nc 127.0.0.1 9294 -N");
}
}
}
int main(void)
{
if(wiringPiSetup() < 0){
fprintf(stderr, "Unable to setup wiringPi:%s\n",strerror(errno));
return 1;
}
pinMode(RoAPin, INPUT);
pinMode(RoBPin, INPUT);
while(1){
rotaryDeal();
}
return 0;
}
Wie Ihr seht wurden nur die Befehle zum Umschalten auf die nächste Station system("echo \"next\" | nc 127.0.0.1 9294 -N");
und auf die vorherige Station eingefügt: system("echo \"prev\" | nc 127.0.0.1 9294 -N");
Die Ausgaben des Demoprogramms von Sunfounder habe ich entfernt, wir bauchen diese hier nicht.
Wie übersetzt man das Programm? Nachdem der modifizierte Democode in einer Textdatei zum Beispiel rotary.c abgespeichert wurde, öffnet man eine Konsole und wechselt in das Verzeichnis in dem die Datei rotary.c liegt.
Zum Kompilieren gibt man dann ein:
gcc rotary.c -o rotary -lwiringPi
Das fertige Programm kann über den Befehl: sudo ./rotary & ausgeführt werden. Nach dem Programmstart schaltet man dann mit dem Drehencoder durch die Senderliste von VLC.
Kopiert man zum Beispiel das Programm rotary nach /usr/bin und fügt den oben genannten Befehl inklusive Dateipfad in die Datei /etc/rc.local ein (bitte vor exit 0 einfügen), dann wird das Programm bei jedem Systemstart automatisch ausgeführt. Jetzt kann man noch ein zweites Programm für das holen der Senderinfos und deren Ausgabe auf einem Display schreiben, es ebenso wie rotary beim Systemstart automatisch ausführen lassen und das ganze Internetradio läuft modular und jede Aufgabe ist für sich gut getrennt.
Gar nicht so schwer oder?
Gruß Bernhard
Ansprechpartner für Umbau oder Modernisierung von Röhrenradios mittels SDR,DAB+,Internetradio,Firmwareentwicklung.
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")
Unser Open-Source Softwarebaukasten für Internetradios gibt es auf der Github-Seite! Projekt: BM45/iRadio (Google "github BM45/iRadio")