can i use my arduino to send programs to a ti83+? because i dont have the required link cable, but i do have a spare 3.5mm headset. and i got a 2.5 to 3.5 mm adapter

void resetLines();
static int par_put(uint8_t *data, uint32_t len);
static int par_get(uint8_t *data, uint32_t len);
#define TIring 6 //White
#define TItip 7 //Red
#define ERR_READ_TIMEOUT 1000
#define ERR_WRITE_TIMEOUT 2000
#define TIMEOUT 4000
#define GET_ENTER_TIMEOUT 30000
void setup(){
resetLines();
}
void loop(){
Serial.begin(9600);
resetLines();
/*
uint8_t A [19] = {0x73,0xA2,0x0D,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00}; //request dir
resetLines();
par_put(A, 19); //send the packet
par_get(A,4); // get the ACK
if (A[1] == 0x56) {
par_get(A,8); //get free memory
uint8_t A [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(A, 4);
int var=0;
while (var!=1)
{
par_get(A, 19);
Serial.print(A[1]);
if(A[1] == 0x92){
var=1;
}
uint8_t A [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(A, 4);
}
Serial.print("karel");
*/
uint8_t C [19] = {0x73,0xA2,0x0D,0x00,0x09,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x00}; //packet for pulling str1
par_put(C, 19); //send the packet
// get the ACK
par_get(C,4);
if (C[1] == 0x56) {
//Serial.print("ok1");
par_get(C,19);
uint8_t C [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(C, 4);
uint8_t B [4] = {0x73,0x09,0x00,0x00}; //Acknowledgement of variable header
par_put(B, 4);
par_get(B,4);
if (B[1] == 0x56) {
//Serial.print("ok");
par_get(C,19);
uint8_t D [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(D, 4);
Serial.print(C[0]);
Serial.print(C[1]);
Serial.print(C[2]);
Serial.print(C[3]);
Serial.print(C[4]);
Serial.print(C[5]);
Serial.print(C[6]);
Serial.print(C[7]);
Serial.print(C[8]);
Serial.print(C[9]);
Serial.print(C[10]);
Serial.print(C[11]);
Serial.print(C[12]);
Serial.print(C[18]);
Serial.println(C[19]);
}
}
//}
delay(2000);
}
//TI LINK PROTOCOL CODE
void resetLines() {
pinMode(TIring, INPUT); // set pin to input
digitalWrite(TIring, HIGH); // turn on pullup resistors
pinMode(TItip, INPUT); // set pin to input
digitalWrite(TItip, HIGH); // turn on pullup resistors
}
static int par_put(uint8_t *data, uint32_t len) {
int bit;
int i, j;
long previousMillis = 0;
uint8_t byte;
for(j=0;j<len;j++) {
byte = data[j];
for (bit = 0; bit < 8; bit++) {
previousMillis = 0;
while ((digitalRead(TIring)<<1 | digitalRead(TItip)) != 0x03) {
if (previousMillis++ > TIMEOUT)
return ERR_WRITE_TIMEOUT+j+100*bit;
};
if (byte & 1) {
pinMode(TIring,OUTPUT);
digitalWrite(TIring,LOW);
previousMillis = 0;
while (digitalRead(TItip) == HIGH) {
if (previousMillis++ > TIMEOUT)
return ERR_WRITE_TIMEOUT+10+j+100*bit;
};
resetLines();
previousMillis = 0;
while (digitalRead(TItip) == LOW) {
if (previousMillis++ > TIMEOUT)
return ERR_WRITE_TIMEOUT+20+j+100*bit;
};
} else {
pinMode(TItip,OUTPUT);
digitalWrite(TItip,LOW); //should already be set because of the pullup resistor register
previousMillis = 0;
while (digitalRead(TIring) == HIGH) {
if (previousMillis++ > TIMEOUT)
return ERR_WRITE_TIMEOUT+30+j+100*bit;
};
resetLines();
previousMillis = 0;
while (digitalRead(TIring) == LOW) {
if (previousMillis++ > TIMEOUT)
return ERR_WRITE_TIMEOUT+40+j+100*bit;
};
}
byte >>= 1;
}
//delayMicroseconds(6);
}
return 0;
}
static int par_get(uint8_t *data, uint32_t len) {
int bit;
int i, j;
long previousMillis = 0;
for(j = 0; j < len; j++) {
uint8_t v, byteout = 0;
for (bit = 0; bit < 8; bit++) {
previousMillis = 0;
while ((v = (digitalRead(TIring)<<1 | digitalRead(TItip))) == 0x03) {
if (previousMillis++ > GET_ENTER_TIMEOUT)
return ERR_READ_TIMEOUT+j+100*bit;
}
if (v == 0x01) {
byteout = (byteout >> 1) | 0x80;
pinMode(TItip,OUTPUT);
digitalWrite(TItip,LOW); //should already be set because of the pullup resistor register
previousMillis = 0;
while (digitalRead(TIring) == LOW) { //wait for the other one to go low
if (previousMillis++ > TIMEOUT)
return ERR_READ_TIMEOUT+10+j+100*bit;
}
//pinMode(TIring,OUTPUT);
digitalWrite(TIring,HIGH);
} else {
byteout = (byteout >> 1) & 0x7F;
pinMode(TIring,OUTPUT);
digitalWrite(TIring,LOW); //should already be set because of the pullup resistor register
previousMillis = 0;
while (digitalRead(TItip) == LOW) {
if (previousMillis++ > TIMEOUT)
return ERR_READ_TIMEOUT+20+j+100*bit;
}
//pinMode(TItip,OUTPUT);
digitalWrite(TItip,HIGH);
}
pinMode(TIring, INPUT); // set pin to input
digitalWrite(TIring, HIGH); // turn on pullup resistors
pinMode(TItip, INPUT); // set pin to input
digitalWrite(TItip, HIGH); // turn on pullup resistors
}
data[j] = byteout;
//delayMicroseconds(6);
}
return 0;
}
void setup(){
resetLines();
}
void loop(){
Serial.begin(9600);
resetLines();
/*
uint8_t A [19] = {0x73,0xA2,0x0D,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00}; //request dir
resetLines();
par_put(A, 19); //send the packet
par_get(A,4); // get the ACK
if (A[1] == 0x56) {
par_get(A,8); //get free memory
uint8_t A [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(A, 4);
int var=0;
while (var!=1)
{
par_get(A, 19);
Serial.print(A[1]);
if(A[1] == 0x92){
var=1;
}
uint8_t A [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(A, 4);
}
Serial.print("karel");
*/
uint8_t C [19] = {0x73,0xA2,0x0D,0x00,0x09,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x00}; //packet for pulling REAL A
par_put(C, 19); //send the packet
// get the ACK
par_get(C,4);
if (C[1] == 0x56) {
//Serial.print("ok1");
par_get(C,19);
uint8_t C [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(C, 4);
uint8_t B [4] = {0x73,0x09,0x00,0x00}; //Acknowledgement of variable header
par_put(B, 4);
par_get(B,4);
if (B[1] == 0x56) {
//Serial.print("ok");
par_get(C,15);
uint8_t D [4] = {0x73,0x56,0x00,0x00}; //Acknowledgement of variable header
par_put(D, 4);
Serial.print(C[0],HEX);
Serial.print(" ");
Serial.print(C[1],HEX);
Serial.print(" ");
Serial.print(C[2],HEX);
Serial.print(" ");
Serial.print(C[3],HEX);
Serial.print(" ");
Serial.print(C[4],HEX);
Serial.print(" ");
Serial.print(C[5],HEX);
Serial.print(" ");
Serial.print(C[6],HEX);
Serial.print(" ");
Serial.print(C[7],HEX);
Serial.print(" ");
Serial.print(C[8],HEX);
Serial.print(" ");
Serial.print(C[9],HEX);
Serial.print(" ");
Serial.print(C[10],HEX);
Serial.print(" ");
Serial.print(C[11],HEX);
Serial.print(" ");
Serial.print(C[12],HEX);
Serial.print(" ");
Serial.print(C[13],HEX);
Serial.print(" ");
Serial.print(C[14],HEX);
Serial.print(" ");
Serial.print(C[15],HEX);
Serial.print(" ");
}
}
//}
delay(2000);
}
Advertisement