erreur avec picaxe 18M2 sur CHI030 et programming editor

picho

New Member
Bonjour, j'ai essayé plusieurs fois un programme qui fonctionne très bien avec une picaxe 18m2.
cependant, après avoir modifié très légèrement une autre partie de mon programme, et au moment de la simulation j'ai une erreur de syntaxe [7959] avec cette commande dans programming editor.
"Symbol Tdeg = W0", :confused:
Or, j'ai retaper cette commande, enlever la marque de paragraphe qui suivait pour aller à la ligne suivante, puis je l'ai remise.
j'ai toujours cette erreur.
Je ne sais pas à quoi correspond ce code [7959] ni pourquoi j'ai cette erreur.
Merci à toute personne qui pourrait m'aider.
 

westaust55

Moderator
La ligne de programme
" Symbole Tdeg = W0"
soi-même n'a pas une erreur.

Veuillez signaler votre programme complet de sorte que nous puissions étudier plus plus loin.

Utilisant quelle version du rédacteur de programmation êtes vous? V5.4.2 est le plus tardif.
 

picho

New Member
Voilà le programme intégral.
J'ai pompé une partie de ce programme sur un site internet et je l'ai modifié et testé sur ma carte ch030 (18M2)modifiée, avec un ds18b20 et la carte axe033 avec envoie des données en série. Tout allait bien et le programme fonctionnait.
Hier soir, j'ai voulu ajouter une petite modification avec des boutons poussoirs sur les entrées C.6 et C.7. A la simulation j'ai eu un e erreur. le code est [7959]. La versin de Programming Editor est 5.4.1.

main:
if pinC.6 = 1 then
goto flsh
init:
Symbol Tdeg = W0
Symbol Whole = B2
Symbol Fract = B3
Symbol SignBit = B4
Symbol pig = B5
Symbol TempC_100 = W4
pause 500
Top:
Dev:
ReadTemp12 C.2,Tdeg
Goto CalcT
CalcT:

SignBit = Tdeg / 256 / 128
If SignBit = 0 Then Positive
' its negative
Tdeg = Tdeg ^ $ffff + 1 ' take twos comp
Positive:
TempC_100 = Tdeg * 6 ' TC = value * 0.0625
Tdeg = Tdeg * 25 / 100
TempC_100 = TempC_100 + Tdeg
GoSub DisplayTemp
;Next
Pause 200
GoTo Top

DisplayTemp:
;serout 7,N2400,D (#DevNum, " ")
Whole = TempC_100 / 100
Fract = TempC_100 % 100
If SignBit = 0 Then DisplayTemp_1
serout 7,N2400, ("-")
pause 30

serout 7,N2400,(254,128)
pause 30
serout 7,N2400, ("il fait ",#Whole, ",")
' be sure the fractional is two pigits
pig = Fract / 10
serout 7,N2400, (#pig)
pause 30
pig = Fract % 10
serout 7,N2400, (#pig,$DF,"C ")
pause 30
serout 7,N2400,(254,192) ;move to start 2ème ligne
pause 30
serout 7,N2400,(0)
pause 30
Return
flsh:
pause 500

serout 7,N2400,(254,1)
pause 30
serout 7,N2400,(254,128) ;move to start of first line
pause 30
serout 7,N2400,(" C'est Kiki") ;output text
pause 500
serout 7,N2400,(254,192) ;move to start 2ème ligne
pause 30
serout 7,N2400,("Je suis en foret") ;output text
pause 50
pause 1500

if pinC.7 = 1 then
goto main
end if
goto flsh

Merci pour votre aide.
A bientôt et bien cordialement.
Picho
 

picho

New Member
Désolé.
J'ai mal placé ma commande de test. J'ai également mis à jour mon éditeur de programme à la version 5.4.2.
Maintenant, tout fonctionne.
Encore merci à ceux qui se sont penché sur mon problème
 

westaust55

Moderator
L'erreur originale que vous avez rapportée surgit comme :
Erreur : Le symbole ne peut pas être employé en dedans si des blocs

Il était dû aux lignes :

Code:
main:
if pinC.6 = 1 then 
goto flsh
parce que le ENDIF était absent. Employez :

Code:
main:
if pinC.6 = 1 then goto flsh
 

PieM

Senior Member
Bonjour picho,

Une petite remarque: pour éditer du code sur le forum, utilisez les balises:
mettez vous en mode d'édition avancée (GO Advanced) en bas à droite de la fénêtre d'édition
tapez sur # pour placer le code à l'intérieur.

Concernant le code lui même,mettez la déclaration de symboles en début de programme., et séparez bien les blocs de sous programme:
un peu comme ça...

Code:
#picaxe 18M2

'initialisation ====================
Symbol Tdeg = W0
Symbol Whole = B2
Symbol Fract = B3
Symbol SignBit = B4
Symbol pig = B5
Symbol TempC_100 = W4

main:'=========================
	if pinC.6 = 1 then  flsh
	pause 500
Top:'------------------------------
	' Dev: ce label ne sert à rien.
	ReadTemp12 C.2,Tdeg
	Goto CalcT

CalcT:'------------------------------
	SignBit = Tdeg / 256 / 128
	If SignBit = 0 Then Positive
	Tdeg = Tdeg ^ $ffff + 1 ' take twos comp
	
Positive:'------------------------------
	TempC_100 = Tdeg * 6 ' TC = value * 0.0625
	Tdeg = Tdeg * 25 / 100
	TempC_100 = TempC_100 + Tdeg
	GoSub DisplayTemp
	;Next
	Pause 200
	GoTo Top

DisplayTemp:
	;serout 7,N2400,D (#DevNum, " ")
	Whole = TempC_100 / 100
	Fract = TempC_100 % 100
	If SignBit = 0 Then:goto DisplayTemp_1
	endif
	serout 7,N2400, ("-")
	pause 30
	
	serout 7,N2400,(254,128)
	pause 30
	serout 7,N2400, ("il fait ",#Whole, ",")
	' be sure the fractional is two pigits
	pig = Fract / 10
	serout 7,N2400, (#pig)
	pause 30
	pig = Fract % 10
	serout 7,N2400, (#pig,$DF,"C ")
	pause 30
	serout 7,N2400,(254,192) ;move to start 2ème ligne
	pause 30
	serout 7,N2400,(0)
	pause 30
Return

flsh:'------------------------------
	pause 500
	serout 7,N2400,(254,1)
	pause 30
	serout 7,N2400,(254,128) ;move to start of first line
	pause 30
	serout 7,N2400,(" C'est Kiki") ;output text
	pause 500
	serout 7,N2400,(254,192) ;move to start 2ème ligne
	pause 30
	serout 7,N2400,("Je suis en foret") ;output text
	pause 50
	pause 1500
	
	if pinC.7 = 1 then goto main
	goto flsh
Le sous programme Dev ne sert visiblement à rien.
Il y a un appel à un sous programme DisplayTemp_1 qui n'existe pas, et de toutefaçon la ligne If SignBit = 0 Then DisplayTemp_1 n'est pas correcte.

Il faut soit :
If SignBit = 0 Then goto DisplayTemp_1
..........................
soit
If SignBit = 0 Then : gosub DisplayTemp_1
endif
........................
 

picho

New Member
Merci pour toutes vos réponses.
Cela permet de bien exposer et clarifier les programmes mis sur le forum.
En effet, j'avais bien oublié le "endif". Mais j'ai corrigé en mettant tout sur une seule ligne.
Les autres sous programmes proviennent en partie de ce que j'avais copié et que j'ai laissé en l'état et de petits essais que je tente au fur et à mesures de mes découvertes.
Encore merci.
 
Top