- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 11 bis 20 von 46

Thema: Internetradio

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #15
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    54
    Beiträge
    765
    So, der Wiki Artikel ist erstmal fertig. Jetzt lass ich mich überraschen, was da noch geändert wird.
    Damit nichts verloren geht, stelle ich jetzt hier auch nochmal die aktuellen Quellcodes ein.

    empfangen
    Code:
    // Kompilieren mit: GCC /var/scripte/empfangen.c -o /var/scripte/empfangen
    
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    
    
    #define BAUDRATE B19200
    char MODEMDEVICE[]= "/dev/ttyAMA0";                        // Schnittstelle
    
    /*
    Sx          x=0 aktuellen Sender neu abspielen Nach Stop oder zum neu puffern, x>49 Sender x-48 abspielen
    Bx          x=0 abspielen stoppen, x=1 mpd neu starten
    Px            x=0 einen Senderplatz zurück x=1 einen Senderplatz hoch
    Tx            Taste x am Gerät gedrückt
    resetreset     Reboot des Raspi
    */
    char eingang[255]="";
    char d[1]="";
    int anzahl=0;
        
    int laenge=0;
    int logg=0;
    int    fd;                // File descriptor
    int sender;
    int lautst=95;
    long int time_back;
    long int time_ok;
    
    struct    termios newtio={};
    
    unsigned char eingangleer()                            //Eingangstring leeren
    {
        int i;
        for(i=0; i < laenge; i++){
            eingang[i] = 0;
        }
      laenge=0;    
    }
    
    unsigned char platzlautsenden()                        //Lautstärke und Senderplatz auf den kleinen Zahlen ausgeben
    {                                                    //Lautstärke 100% und Senderplatz 3 wird zu 100:03
        char nummer[3];
        int i=0;
        char befehl[255]="";
    
        sprintf(nummer,"%d",lautst);
        strcpy(befehl,"/var/scripte/senden 2");
        if (strlen(nummer)<3){
            strcat(befehl,"0");
        }
        if (strlen(nummer)<2){
            strcat(befehl,"0");
        }
        strcat(befehl,nummer);
        strcat(befehl,":");
        i=sender;
        if(i>99){                                        //Die Anzeige ist 2-Stellig
            i=99;
        }
        sprintf(nummer,"%d",i);
        if (strlen(nummer)<2){
            strcat(befehl,"0");
        }
        strcat(befehl,nummer);
        system(befehl);
    }
    
    unsigned char radioein()                            //gewählten Platz in der Playlist abspielen
    { 
        char nummer[3];
        char befehl[255]="";
    
        sprintf(nummer,"%d",sender);
        strcpy(befehl,"mpc -q play ");
        strcat(befehl,nummer);
        system(befehl);
        platzlautsenden();
    }
    
    unsigned char initmpd()                                //Schnittstelle parametrieren und öffnen
    {
        char befehl[30]="";
        char s[2]="";
        lautst=95;
        system("/var/scripte/radio2.sh");                //InitScript für mpd
        sleep(1);
        system("mpc playlist > /tmp/mpdlist");            //Playlist zwischenspeichern
        sleep(1);
        FILE *f;
        char Text[300]="";
        char Text1[70]="";
        char Text2[7]="volume";
        f = fopen("/tmp/mpdlist","r");
        anzahl=0;                                            //Anzahl Einträge der Senderliste zählen
        if(f!=NULL){
            fgets(Text, sizeof(Text), f);
            if(strlen(Text)<2){
                fclose(f);
                return;
            }else{
                anzahl=1;
                while( fgets(Text, sizeof(Text), f) !=0 ){
                    if(strlen(Text)>2){
                        anzahl++;
                    }
                    if(anzahl>199){                            //Nicht mehr wie 200
                        break;
                    }
                }
            }
            fclose(f);
        }
        strcpy(befehl,"/var/scripte/senden 6");                //kleine Symbole im Display anzeigen lassen
        s[0]=208;                                            //Antennensymbol + FM anzeigen, als Zeichen für Bereit
        strcat(befehl,s);
        system(befehl);
        strcpy(befehl,"/var/scripte/senden 7");                
        s[0]=130;                                            //Stereo anzeigen
        strcat(befehl,s);
        system(befehl);    
    }
    
    unsigned char abspielen()                                //Wiedergabe fortsetzen. Ist noch nichts abgespielt worden, Platz 1 abspielen
    {
        if (anzahl>0){
            if (sender==0){
                sender=1;
            }else{ if(sender>anzahl){
                sender=anzahl;
                }
                radioein();
            }
        }
    }
    
    unsigned char platzplus()                                //Senderplatz um 1 erhöhen
    {                                                        //Bei weniger Sendern in Liste auf Platz 1 zurück
        if (anzahl>0){
            sender++;                                    
            if (sender>anzahl){                            
                sender=1;
            }
            radioein();
        }    
    }
    
    unsigned char platzminus()                                //Senderplatz um 1 verringern
    {                                                        //Bei 0 auf letzten Platz springen
        if (anzahl>0){
            sender--;                                    
            if (sender<1){                                
                sender=anzahl;
            }
            radioein();
        }    
    }
    
    unsigned char lautsetzen()                                //Lautstärke einstellen
    {
        char nummer[3];
        char befehl[255]="";
    
        sprintf(nummer,"%d",lautst);
        strcpy(befehl,"mpc -q volume ");
        strcat(befehl,nummer);
        system(befehl);
        platzlautsenden();
    }
    
    unsigned char lauter()                                    //Senderplatz um 5 Prozentpunkte erhöhen
    {
        if (lautst<96){
            lautst+=5;                                    
            lautsetzen();
        }    
    }
    
    unsigned char leiser()                                    //Senderplatz um 5 Prozentpunkte verringern
    {
        if (lautst>5){
            lautst-=5;                                    
        }else{
            lautst=0;
        }
        lautsetzen();
    }
    
    unsigned char radioaus()                                //Wiedergabe anhalten
    {
        system("mpc -q stop");
        system("/var/scripte/senden 45");
        sleep(1);
    }
    
    unsigned char auswerten()                                //Angekommene Daten auswerten
    { int i;    
      int fd1;
      int zeile;
      char ret;
      char farbe[6]="";
      
      /* Zum Schreiben öffnen */
        if ((strcmp(eingang,"resetreset") ==0 )){
            system("reboot");
        }
        if (eingang[0] == 83){                              // S
            zeile=eingang[1]-48;                            //Werte von 48-255 = 207 mögliche Sender, wird auf 200 limitiert
            if (zeile == 0){                                // bei 0 einfach weiter abspielen oder Platz 1 beginnen
                abspielen();
            }else if (zeile<=anzahl){
                sender=zeile;
                radioein();
            }
          }
        if (eingang[0] == 84){                              // T
            if (eingang[1]>49&&eingang[1]<57){                //Wert soweit OK, Taste 1 = Powertaste und wird vom AVR ausgewertet
                if (eingang[1]==50){                        //2 - OK Taste
                    abspielen();
                }
                if (eingang[1]==51){                        //3 - Wippe rechts
                    lauter();    
                }
                if (eingang[1]==52){                        //4 - BACK Taste
                    radioaus();
                }
                if (eingang[1]==53){                        //5 - Menü Taste
                    system("/var/scripte/senden");
                }
                if (eingang[1]==54){                        //6 - Wippe hoch
                    platzplus();
                }
                if (eingang[1]==55){                        //7 - Wippe links
                    leiser();
                }
                if (eingang[1]==56){                        //8 - Wippe runter
                    platzminus();
                }
            }
        }
        if (eingang[0] == 80){                              // P
            if (eingang[1]==49){                             //1
                platzplus();
            }else{
                platzminus();
            }
          }
        if (eingang[0] == 66){                              // B
            if (eingang[1]==48){                             //0 Wiedergabe stoppen
                radioaus();
            }
            if (eingang[1]==49){                             //1 mpd zurücksetzen
                initmpd();
            }
        }
        eingangleer();
     }
    
    unsigned char receive()                                    //Zeichen empfangen
    {
        int res;
        unsigned char buffer;
    
        res = read(fd, &buffer, 1);
        return buffer;
    }
    
    int init()                                                //Schnittstelle parametrieren und öffnen
    {
        //O_RDONLY, O_WRONLY or O_RDWR -
        //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
        // man 2 open fuer mehr Infos - see "man 2 open" for more info
        // O_NOCTTY No ControllTeleType 
    
        fd = open(MODEMDEVICE, O_RDONLY | O_NOCTTY);
        if (fd < 0){
            printf("Fehler beim oeffnen von %s\n", MODEMDEVICE);
            exit(-1);
        }
        memset(&newtio, 0, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;    //setzt die neuen Porteinstellungen
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;         /* set input mode (non-canonical, no echo, ...) */
        newtio.c_cc[VTIME] = 0;     /* inter-character timer unused */
        newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);
        return fd;
    }
    
    int main(int argc, char** argv)        //Programmstart
    {
        char c;
         init();                            //Schnittstelle parametrieren und öffnen
        sleep(5);                         //warten bis mpd gestartet ist
         initmpd();                        //mpd auf definierten Zustand bringen
        while (1)
            {
            c=receive();                //Zeichen holen
            if((c==13)){                //CR als Abschluß einer Zeile
                auswerten();        
            }else if(c>13&&c<128){        //Alles von ASCii 14 bis 127 wird akzetpiert
                eingang[laenge]=c;        
                laenge++;                
                if (laenge >254){        //Bei 254 Zeichen im Puffer wird automatisch ausgewertet
                    auswerten();
                }
            }
        } 
        close (fd);
        return 0;
    }
    senden
    Code:
    // Kompilieren mit: GCC /var/scripte/senden.c -o /var/scripte/senden
     
    //#include <iostream>
    //using namespace std;
    #include <sys/types.h>                        //nicht benötigtes scheint keinen Platz zu verschwenden...
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <time.h>
    
    #define BAUDRATE B19200
    char MODEMDEVICE[]= "/dev/ttyAMA0";    // !!!
    
    int    fd;                // File descriptor
    struct    termios newtio={};
    
    unsigned char send(char c)
    {
        int res=write(fd, &c, 1);
        if (res<0) printf("Fehler beim Senden\n");
        return res;
    }
    
    int init()                                                //Schnittstelle parametrieren und öffnen
    {
        /*** Init ***/
        
        //O_RDONLY, O_WRONLY or O_RDWR -
        //O_NDELAY (geht weiter, wenn keine Daten da sind und gibt "-1" zurueck)
        // man 2 open fuer mehr Infos - see "man 2 open" for more info
        // O_NOCTTY No ControllTeleType 
        fd = open(MODEMDEVICE, O_WRONLY | O_NOCTTY);
        if (fd < 0){
            printf("Fehler beim oeffnen von %s\n", MODEMDEVICE);
            exit(-1);
        }
        memset(&newtio, 0, sizeof(newtio));
        newtio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD;    //setzt die neuen Porteinstellungen
        newtio.c_iflag = IGNPAR;
        newtio.c_oflag = 0;
        newtio.c_lflag = 0;         /* set input mode (non-canonical, no echo, ...) */
        newtio.c_cc[VTIME] = 0;     /* inter-character timer unused */
        newtio.c_cc[VMIN] = 1;    /* blocking read until 1 chars received */
    
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);
        return fd;
    }
    int einmal()                                //Sucht bereits laufende Instanzen und zählt diese
    {
        int i=0;
        int anzahl=0;
        int laenge=0;
        char *ptr;
        FILE *in;
        extern FILE *popen();
        char buff[30];
    
        if(!(in = popen("pidof senden", "r"))){
            exit(1);
        }
        
        fgets(buff, sizeof(buff), in);
        pclose(in);
        laenge=strlen(buff);
        for(i=0;i<laenge;i++)
        {
            if(buff[i]==' ') anzahl++;
        }
        return anzahl;    
    }
    
    
    int main(int argc, char** argv)                                            //Programmstart
    {
        char vBuf[100]="",*pBuf;
        char buffer [100]="";
        char buffer1 [100]="";
        int i=0;
        int anzahl;
        anzahl=einmal();
        if (anzahl>0){
            anzahl++;
            sleep(anzahl);
        }
         init();
        if (argc == 1) {                                                    //Wenn nichts angegeben, dann Uhrzeit und Datum senden
            time_t rawtime;
            
            struct tm * timeinfo;
            time ( &rawtime );
            timeinfo = localtime ( &rawtime );
            strftime (buffer,80,"U%H:%M:%S",timeinfo);                        //Uhh:mm:ss
            pBuf=buffer;
            strcat(pBuf,"\r");
            while(pBuf && *pBuf)                                            //Zeichen einzeln senden
                send(*pBuf++);
    
            strftime (buffer,80,"D%d.%m.%y",timeinfo);                        //Dtt.mm.yy
            pBuf=buffer;
            strcat(pBuf,"\r");
            sleep(1);
            while(pBuf && *pBuf)                                            //Zeichen einzeln senden
                send(*pBuf++);
        }else{                                                                //Sonst Parameter einlesen und senden    
            if(strlen(argv[1])>75){                                            //Puffer im AVR ist auf 80 gestellt
                strncpy(buffer,argv[1],76);                
                buffer[76]='\0';
            }else{
                strcpy(buffer,argv[1]);
                if (argc >2){
                    for (i=2;i<argc;i++){
                        if(strlen(buffer)+strlen(argv[i])>75){
                            strcat(buffer," ");                                
                            strncat(buffer,argv[i],(76-strlen(buffer)));
                            buffer[76]='\0';
                            break;                                            //exit for in c...
                        }else{
                            strcat(buffer," ");
                            strcat(buffer,argv[i]);
                        }
                    }
                }
            }
            int o=0;                                                    //Umlaute anpassen, ASCii 195 verwerfen
            for(i=0;i<strlen(buffer);i++){
                buffer1[o]=buffer[i];
                if (buffer1[o]==164){                                    //ä
                    buffer1[o]= 228;
                }
                if (buffer1[o]==188){                                    //ü
                    buffer1[o]= 252;
                }
                if (buffer1[o]==182){                                    //ö
                    buffer1[o]= 246;
                }
                if (buffer1[o]==132){                                    //Ä
                    buffer1[o]= 196;
                }
                if (buffer1[o]==156){                                    //Ü
                    buffer1[o]= 220;
                }
                if (buffer1[o]==150){                                    //Ö
                    buffer1[o]= 214;
                }
                if (buffer1[o]==159){                                    //ß
                    buffer1[o]= 223;
                }
                if (buffer1[o]==138){                                    //&
                    buffer1[o]= 38;
                }
                if (buffer1[o] != 195){                                    //Initialisierung Umlaut
                    o++;
                }
            }
            pBuf=buffer1;
            strcat(pBuf,"\r");                                                //CR (ASCii13) anfügen, damit der AVR auswertet        
            while(pBuf && *pBuf){                                            //Zeichen einzeln senden
                send(*pBuf++);
            }
        } 
        close (fd);
        return 0;
    }
    mpcout (Der Überwacher)
    Code:
    // Kompilieren mit: GCC /var/scripte/mpcout.c -o /var/scripte/mpcout
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    char Textalt[75]="";
    int anzahl=0;
    
    int wachhund()                                //Sucht bereits laufende Instanzen und zählt diese
    {
        char *ptr;
        FILE *in;
        extern FILE *popen();
        char buff[30];
    
        if(!(in = popen("pidof mpd", "r"))){
            exit(1);
        }
        
        fgets(buff, sizeof(buff), in);
        pclose(in);
        anzahl=(strlen(buff));
    }
    
    unsigned char aktualisieren()
    {     
        int i=0;    
        int o=0;
        char befehl[255]="";
        FILE *f;
    
        if(!(f = popen("mpc current", "r"))){
            exit(1);
        }
        char Text[300]="";
        char Text1[75]="";
        fgets(Text, sizeof(Text), f);
        fclose(f);
        if(strlen(Text)<2){
            strcpy(Text1,"");
            if((strcmp(Text1, Textalt)) != 0){
                strcpy(Textalt, Text1);
                system("/var/scripte/senden 0");
                system("/var/scripte/senden 45");
            }
        }else{
            o=0;
            for (i=0;i<strlen(Text);i++){
                if (Text[i]==38){                                //&
                    Text1[o]=138;                                //+
                }else{
                    Text1[o]=Text[i];
                }
                o++;
                if (o>74){
                    break;
                }
            }
            Text1[o]='\0';
            if((strcmp(Text1, Textalt)) != 0){
                strcpy(Textalt, Text1);
                    strcpy(befehl,"/var/scripte/senden '1");    // \" funktioniert nicht, ' schon
                    strcat(befehl,Text1);
                    strcat(befehl,"'");
                    system(befehl);
                    system("/var/scripte/senden 44");
            }
        }
    }
    
    int main(int argc, char** argv)
    {    
        while (1)
            {     sleep(2);
                anzahl=0;
                wachhund();
                if (anzahl <2){
                    system("/var/scripte/radio2.sh");
                }
                aktualisieren();
        } 
        return 0;
    }
    radio2.sh (Initialisert den mpd)
    Code:
    #!/bin/bash 
    #
    # Radio starten
    #
    # 
    /etc/init.d/mpd restart     #Versetzt den mpd in einen definierten Zustand
    mpc -q clear                #Nicht nötig, wenn man kein Status File nutzt, schadet aber auch nicht, wenn man keines nutzt...
    mpc -q load radiosender        #lädt die von uns erstellte Playlist
    mpc -q volume 95            #setzt die Lautstärke auf 95 %
    exit 0
    autostart.sh (wird von rc.local aufgerufen)
    Code:
    #!/bin/bash
    #
    # Autostart
    #
    # 
    
    ##sound
    amixer cset numid=3 1 
    amixer -c 0 cset numid=2 on,off
    amixer set PCM 95%
    aplay /var/sounds/start.wav
    nice -1 /var/scripte/empfangen &
    nice -1 /var/scripte/mpcout &
    Geändert von peterfido (27.08.2012 um 19:05 Uhr)
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen