PHP: Problem med FOR-loop mm. *Löst*
- JimmyAndersson
- Inlägg: 26417
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:

Nu har jag hittat felet.
Det är inget fel på koden i for-loopen. Felet låg i att file() läste radbrytningen också.
Först en titt på for-loopen som räknar ner: (Samma kod som tidigare)
Kod: Markera allt
for ($i = $startposition; $i >= $position; $i-=20)
{
$message =chr(0x02).chr(0x30).$i.chr(0x03);
$serial->sendMessage($message);
}
$startposition = 100 <-- lagras i filen position.txt
$position = 50
For-loopen börjar med att utföra $i = $startposition.
Sedan räknar den ner så länge $i är större eller likamed än $position.
Egentligen borde det vara ">" istället för ">=".
Men problemet var som sagt att file() även läste radbrytningen, så låt säga att filen innehåller talet 100. När file() lagt filens innehåll i en array så innehöll arrayen tre tal:
100
13
10
som stoppades in i $startposition.
Så först räknar for-loopen ner från 100 till låt säga 50.
Men sedan... tja, varken 13 eller 10 är större än 50, så det händer inget mer.

Men genom att peta in "FILE_IGNORE_NEW_LINES" i file() så hamnar varken CR (13 decimalt) eller LF (10 decimalt) i arrayen.
Bäst att tillägga:
Nej, file() finns inte med i koden som postats i tråden. Den delen tillkom sent igår och jag har inte hunnit posta de ändringarna. Tidigare använde vi fopen() (som däremot finns i koden som postats tidigare). På se.php.net hittade jag detta om fopen() :
Different operating system families have different line-ending conventions. When you write a text file and want to insert a line break, you need to use the correct line-ending character(s) for your operating system. Unix based systems use \n as the line ending character, Windows based systems use \r\n as the line ending characters and Macintosh based systems use \r as the line ending character.
If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny".
Vilket kan förklara varför det fungerade fint hos bl.a 007sweden, men inte fungerade alls hos mig.

oJsan:
"Varför skicka alla steps till servot, varför inte bara skicka den nya positionen? Hastigheten, med vilken den kommer att panorera, kommer ju att bero på baudraten... vilket kanske inte är så snyggt."
Just därför föredrar iallafall jag att servot flyttas mjukt och fint.

Dessutom kan man då även ändra hur fort servoaxeln ska vrida sig, utan att behöva ändra baudraten.

>>Felet låg i att file() läste radbrytningen också.
Oundvikligt att inte läsa radbrytningen =) Felet var nog snarare att du aldrig kollade vad som skickades till for-loopen...
Gällande filen: Använd explode() och implode() för att spara/läsa en "array" av variabler per rad. Använd t.ex. semikolon för att avgränsa:
122;12;53;973;
Läs in hela raden och använd explode() för att skapa en arr[4] med variabelvärdena.
Oundvikligt att inte läsa radbrytningen =) Felet var nog snarare att du aldrig kollade vad som skickades till for-loopen...

Gällande filen: Använd explode() och implode() för att spara/läsa en "array" av variabler per rad. Använd t.ex. semikolon för att avgränsa:
122;12;53;973;
Läs in hela raden och använd explode() för att skapa en arr[4] med variabelvärdena.
Det är ju också möjligt att starta upp en timer mer i PIC'en och låta den "glida" de olika värden i en ställbar hastighet så att man ställer in ett önskat värde och PIC'en stegar då är-värdet i ställbar hastighet till det överensstämmer med bör-värdet.
Jag har precis gjort något liknande med 2 st 8-bitars PWM i en Renesas M16C/28 och det fungerar alldeles strålande.
Jag har precis gjort något liknande med 2 st 8-bitars PWM i en Renesas M16C/28 och det fungerar alldeles strålande.
- JimmyAndersson
- Inlägg: 26417
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Det kom massa andra saker ivägen, så jag har inte hunnit göra så mycket tidigare.
Nu satte jag mig en stund med Ibooken i soffan och gjorde klart koden och det fungerar fint, om man får tro alla echo-rader jag lagt in.
Jag har knappt programmerat PHP innan, så alla inblandades hjälp har varit mycket värdefullt.
Jag har skrivit ut olika kod-förslag och gått igenom dem och gjort små-program på papper så att jag kunnat lära mig PHP utan att behöva söka så fort jag har velat göra något.
Innan jag satte mig med koden i natt så skrev jag ner i klartext hur varje del ska fungera, sedan var det bara att översätta till PHP. En mycket bra metod som alltid fungerar.
Hela servostyrningsprojektet finns inte i någon annan tråd än.
Jag har ett slutmål, men det kommer dröja några månader innan jag har möjlighet att fixa de sista detaljerna. Fram till dess förändras allt då och då, så det skulle bli lite rörigt att göra en projekttråd nu. Det finns 4-5 versioner av php-koden och tre versioner av GUI'et. Själva mekaniken är inne på sin tredje version nu, men den kommer inte förrändras så mycket mer.
Nu satte jag mig en stund med Ibooken i soffan och gjorde klart koden och det fungerar fint, om man får tro alla echo-rader jag lagt in.

Jag har knappt programmerat PHP innan, så alla inblandades hjälp har varit mycket värdefullt.

Innan jag satte mig med koden i natt så skrev jag ner i klartext hur varje del ska fungera, sedan var det bara att översätta till PHP. En mycket bra metod som alltid fungerar.

Hela servostyrningsprojektet finns inte i någon annan tråd än.
Jag har ett slutmål, men det kommer dröja några månader innan jag har möjlighet att fixa de sista detaljerna. Fram till dess förändras allt då och då, så det skulle bli lite rörigt att göra en projekttråd nu. Det finns 4-5 versioner av php-koden och tre versioner av GUI'et. Själva mekaniken är inne på sin tredje version nu, men den kommer inte förrändras så mycket mer.
- JimmyAndersson
- Inlägg: 26417
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt: