Étape 8: Émulation des cartouches d’encre
Maintenant le problème est que je ne veux pas mes cartouches d’encre faux jamais s’habituer, donc pour faire c’est nous avons une image fixe que le microcontrôleur chargera dans la ram il démarre à chaque fois. Cela permettra à l’imprimante non seulement lire, mais écrire lui aussi bien. Lorsque le microcontrôleur est hors tension puis de nouveau sur, les données précédentes sont restaurées. (Double Bonus)
Stockage des tableaux de données dans le microcontrôleur, placer ce quelque part sous la comprennent, mais avant Sub main()
Remarque : Cela peut varier entre familles de microcontrôleurs différents, mais il fonctionne très bien avec mon PIC18F
RAM unsigned char noir [32] = {0 x 10, 0 x 00, 0 x 02, 0xF2, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 50, 0x90, 0x6A, 0 x 17, 0xE3, 0 x 54, 0xA3, 0 x 39, 0 x 50, 0 x 14, 0 x 15, 0 x 31, 0x93, 0xE4, 0xB4, 0 x 24, 0 x 96, 0 x 57, 0 x 04, 0 x 35, 0xF5, 0xE4, 0 x 14} ;
unsigned char cyan [32] de RAM = {0x4C, 0 x 04, 0 x 01, 0xF2, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 50, 0x90, 0x5A, 0 x 19, 0xF0, 0x94, 0 x 03, 0x3B, 0 x 50, 0 x 16, 0 x 17, 0 x 31, 0x93, 0xE4, 0xB4, 0 x 24, 0 x 96, 0 x 57, 0 x 04, 0 x 35, 0xF5, 0xE4, 0 x 34} ;
unsigned char jaune [32] de RAM = {0x4A, 0 x 04, 0 x 01, 0xF2, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 00, 0 x 50, 0x90, 0x6A, 0x8B, 0xC9, 0xA4, 0 x 41, 0x3B, 0 x 50, 0x1A, 0x1B, 0 x 31, 0x93, 0xE4, 0xB4, 0 x 24, 0 x 96, 0 x 57, 0 x 04, 0 x 35, 0xF5, 0xE4, 0x74} ;
Remarque : Remarqué que je n’ai pas Magenta ? C’est parce que c’est la cartouche d’encre, que je n’ai pas.
L’étape suivante consiste à écrire une routine qui vérifie quelle cartouche d’encre est demandée et permettent à l’hôte lire et écrire dans celui-ci.
Voilà comment je l’ai fait :
Sub main() {} {While(1)} epsnCartStartListen() ; while(epsnCartReady()==1) ; Attendez le signal prêt à revenir à faible while(epsnCartReady()==0) ;
unsigned char * inkPtr ;
char addr = 0 x 00 ;
...
addr = espnCartGetAddr() ;
Si (adresse & 0 x 7 == 0 x 01) {/ / si les 3 premiers bits est égal à 0 x 01
inkPtr = & noir [0] ; Pointer vers les données noires
} ElseIf (adresse & 0 x 7 == 0 x 03) {/ / si les 3 premiers bits est égal à 0 x 03
inkPtr = & cyan [0] ; Pointer vers les données cyan
} ElseIf (addr [i] & 0 x 7 == 0 x 05) {}
inkPtr = & cyan [0] ; C’est censé être Magenta, mais je n’ai que
} ElseIf (addr [i] & 0 x 7 == 0 x 07) {}
inkPtr = & jaune [0] ;
} else {}
continuer: / / revenir au début de la boucle principale, parce que nous ne savons pas cette adresse
}
if(addr&0x08) {//WriteMode – vérifier pour voir si l’hôte veut écrire
while(epsnCartReady()) {//keep en boucle jusqu'à ce que la TVD va faible
* inkPtr = epsnCartIn() ;
les données, le pointeur pointe vers
est écrit avec les nouvelles données
inkPtr ++ ; Incrémente le pointeur
}
} else {//Read Mode
{while(epsnCartReady())}
epsnCartOut(*inkPtr) ;
Sortie des données, le pointeur pointe vers
inkPtr ++ ; Inrement le pointeur
}
}
}
}
Succès !
Après ce nouveau code de programmation et d’allumer mon imprimante, l’imprimante accepte 4 cartouches imaginaires grâce à mon microcontrôleur. Je suis également très choqué que j’ai accepté les données de cartouche d’encre cyan pour magenta ainsi !
C’est une prouesse énorme pour moi car il s’agit de mon premier monde réel inverse ingénierie que j’ai jamais fait et j’ai obtenu des résultats prometteurs.
Maintenant je peux continuer à transformer l’imprimante une imprimante 3D
J’espère que vous les gars aimiez ceci, c’est mon deuxième instructable et cela m’a pris un certain temps pour écrire: P
Si vous voulez, vous êtes cordialement invités à télécharger les fichiers sources
A bientôt !
Romain