PHP: Problem med FOR-loop mm. *Löst*

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
007sweden
Inlägg: 3500
Blev medlem: 3 mars 2005, 20:18:12
Skype: oo7sweden

Inlägg av 007sweden »

Använder färdig styrning från Icecap, inte ändrat något i den. Men tanken är ju absolut bra! Och helt genomförbar.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

I see... kikade på Icecap's sida först efter att jag skrivit inlägget... sen fick jag bråttom hem från jobbet så jag hann aldrig ändra skriva om mitt svar.

...så, Icecap: när kommer v2.0? :)
Användarvisningsbild
Icecap
Inlägg: 26612
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

oJsan: då jag bara har gjort det projekt för skoj och inte ens använd själv (inte heller planerat/trott att jag skulle) lär 2,0 bli GDS.

Men visst, jag tar 650:-/timmen... och innehar F-skattesedel så jag är mottaglig för förslag :wink:
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

:D


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);
   }
Exempel på hur det kan se ut när allt är som det ska:
$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. :)
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

>>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... :wink:
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.
Användarvisningsbild
Icecap
Inlägg: 26612
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

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.
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg av oJsan »

Hur gick det för er, fick ni till någon bra lösning i php? Finns hela servostyrningsprojektet i sin helhet i någon annan tråd?
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

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. :tumupp: 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.
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Uppdaterar tråden med att berätta att jag kopplade upp allt igår.
Det fungerar utmärkt. :)

Tack alla inblandade! :tumupp: :)
Skriv svar