Linux Algemeen, echo laten scrollen binnen 16 karakters

Pagina: 1
Acties:

  • Terror
  • Registratie: Juni 1999
  • Laatst online: 09:09
K'heb op het moment een leuk lcd schermpje aan mijn compu hangen, waar ik dmv lcdmod via een echo naartoe kan schrijven.

echo Hallo > /dev/lcd

Nu heeft echo allemaal layout functies maar scrollen doet ie niet, wat voor mij ideaal zou zijn uiteraard :) Nu vraag ik me af of linux misschien een standaard optie kent om teksten horizontaal scrollend te krijgen in de commandline of een streaming optie naar /dev/lcd ?

Zou een hoop script werk schelen. (Scherm leegmaken, nieuwe regel afkappen en allemaal 1 karakter opschuiven en ook nog juist timen). Draai btw slackware met kernel 2.4.26

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64


  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:46
Heeft dat ding 1 regel of meerdere?

  • Terror
  • Registratie: Juni 1999
  • Laatst online: 09:09
lcd heeft 2 regels met elke regel 16 karakters.

Hier kan je vinden hoe de statische regels in horen gevoegd.

Bij het niet speciferen van een regel wordt het gewoon na de laatste tekst op regel 1 ingevoegd en kapt ie hem op karakter 16 voor het LCD af.

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64


  • Nitroglycerine
  • Registratie: Januari 2002
  • Laatst online: 22:57

Nitroglycerine

Autisme: belemmering en kracht

Met scripting is het zelfs erg makkelijk, zet ieder karakter van de regel in een array en maak een loopje dat continue door de array heen leest, en slechts het aantal karakters laat zien dat je op dat moment wilt (zoiets van 16 karakters op de LCD regel, de totale tekst is 50 karakters, ik doorloop nu voor de 11e keer de loop, dus moet ik karakters 11 t/m 26 laten zien).
Het is een eindeloze loop, het makkelijkst op te lossen door 2 loopjes achter elkaar te zetten, en vervolgens een verwijzing naar het begin van de eerste loop om weer van voren af aan te beginnen.

Hier kon uw advertentie staan


Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <string.h>

#define LCD_LEN 8

int main (int argc, char *argv[]) {
        if (argc < 2) {
                fprintf (stderr, "scroll: need message argument\n");
                exit (1);
        }

        char s[strlen (argv[1]) + LCD_LEN];
        memset (s, ' ', LCD_LEN - 1);
        sprintf (s + LCD_LEN - 1, "%s", argv[1]);

        int i,j,pad;
        for (i = 0; s[i] != '\0'; i++) {
                pad = 0;
                for (j = 0; j < LCD_LEN; j++) {
                        if (s[i+j] == '\0') pad = 1;

                        if (!pad)
                                printf ("%c", s[i+j]);
                        else
                                printf (" ");
                }

                printf ("\n");
                sleep (1);
        }

        return 0;
}


Zoiets? :P
/inelkaarflans

  • Wilke
  • Registratie: December 2000
  • Laatst online: 22:46
code:
1
2
3
4
5
6
7
8
#/bin/bash

for i in `seq 0 ${#1}`; do
  clear
  echo ${1:$i};
  echo ${2:$i};
  sleep 1;
done


Aanroepen met ./naamvanscript "Dit staat op de eerste regel" "Dit staat op de tweede regel"

of zo iets, zie Bash string-functies. Al is bash inderdaad waarschijnlijk niet de makkelijkste/handigste taal hiervoor :P

Beetje buggy/brakjes, maar het idee is wel duidelijk hopelijk.

[ Voor 8% gewijzigd door Wilke op 11-03-2005 15:22 ]


  • Terror
  • Registratie: Juni 1999
  • Laatst online: 09:09
De bedoeling is dat ik via php een commandline regel ga runnen, waardoor de queue van mijn webbased mp3 jukebox zichtbaar wordt op het scherm tussen de lcdproc info door.

Wat je zegt klinkt idd heel simpel, heb alleen nog vrijwel geen ervaring met linuxscripts, dus het inlezen kost me gewoon veel tijd, verder zit ik nog een beetje met alle timing verschijnsels, als in hoe zorg je ervoor dat data voor een bepaalde tijd blijft staan als er ook een ander programma naar het lcd scherm toe schrijt, maargoed, ziet er naar uit dat het toch scripten wordt :) tnnx voor de voorbeeldjes/voorzetjes btw!

[ Voor 4% gewijzigd door Terror op 11-03-2005 15:22 ]

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64


  • froggie
  • Registratie: November 2001
  • Laatst online: 20-11-2024

froggie

Kwaaak

verder zit ik nog een beetje met alle timing verschijnsels, als in hoe zorg je ervoor dat data voor een bepaalde tijd blijft staan als er ook een ander programma naar het lcd scherm toe schrijt
Heeft lcdmod geen buffer waar je naar toe kunt schrijven ipv direct naar het scherm? If so dan laat je al je info gewoon naar die buffer schrijven en zou de rest vanzelf goed moeten komen.

[ Voor 4% gewijzigd door froggie op 11-03-2005 15:41 ]


  • Terror
  • Registratie: Juni 1999
  • Laatst online: 09:09
Voor zover ik weet kan je alleen naar /dev/lcd schrijven en dat is instant. Hem net even van 1 naar 18 laten cyclen en de getallen onder de 18 waren een hele snelle waas die 0,5 sec duurde.

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64


Verwijderd

dan plaats je toch een sleep achter iedere iteratie van de loop?

  • Terror
  • Registratie: Juni 1999
  • Laatst online: 09:09
Ben al een redelijk eindje, het lukt me alleen niet om een input als 1 string gezien te laten worden.

Bijvoorbeeld:
./test.sh 'even kijken wat ie doet'
Geeft op het LCD bij een echo $STRING
even kijken wat ie doet

Maar Iets als:
Bash:
1
2
3
4
5
for i in `seq 1 ${#STRING}`;
do
echo ${1:$STRING:$i} > /dev/lcd;
sleep 0.3
done


Valt ie over met:
./test2.c: line 10: 1: Even kijken wat ie doet: syntax error in expression (error token is "kijken wat ie doet")

Dell XPS M1530 (Red) | T8300 | 4 GB | 750 GB 7200 rpm | 8600m GT | Wifi N | 1440x900 LG | 9 Cells | Windows 8.1 Pro x64

Pagina: 1