hi,
I have written a code for a company and have been able to program several chips using my arduino board. The company now wants to program several hundred chips. In order to do so they want a hex file.
I tried outputting a hex file but apparently it's not working correctly. Can anyone please try to output a hex file for me and send back to me?
I need to program the following chip: ATMega8-16.
The code is attached.
Thank you very much for your help!!!
PS are there any other forums that I should try posting in?
CODE:
const int Button = 2; // pushbutton
const int MOT1_D1 = 3; // motor1 disable 1
const int MOT1_D2 = 4; // motor1 disable 2
const int MOT1_IN1 = 5; // motor1 input 1
const int MOT1_IN2 = 6; // motor1 input 2
const int Limit1 = 7; // left limit switch
const int Limit2 = 8; // right limit switch
const int MOT2_D1 = 9; // motor2 disable 1
const int MOT2_D2 = 10; // motor2 disable 2
const int MOT2_IN1 = 11; // motor2 input 1
const int MOT2_IN2 = 12; // motor2 input 2
const int LED = 13; // LED
const int Jumper = 14; // jumper
const int Input2 = 15; // input 2
const int Input3 = 16; // input 3
// variables
int DoorState = 0; // 0 -> door closed, 1 -> door open
int buttonstate = 0;
int input2state = 0;
int input3state = 0;
int val11 = 0;
int val21 = 0;
int val31 = 0;
int val12 = 0;
int val22 = 0;
int val32 = 0;
// constants
const int closed = 0;
const int open = 1;
const int debounce_time = 100;
const int limit_delay = 4000;
const int motor1_extend_runtime = 4000;
const int motor1_retract_runtime = 4000;
const int motor2_extend_runtime = 6000;
const int motor2_retract_runtime = 6000;
const int delay_before_close = 3000;
const int delay_between_motors = 500;
void setup(){
pinMode(Limit1, INPUT);
pinMode(Limit2, INPUT);
pinMode(Button, INPUT);
pinMode(Jumper, INPUT);
pinMode(Input2, INPUT);
pinMode(Input3, INPUT);
pinMode(LED, OUTPUT);
pinMode(MOT1_D1, OUTPUT);
digitalWrite(MOT1_D1, LOW);
pinMode(MOT1_D2, OUTPUT);
digitalWrite(MOT1_D2, LOW);
pinMode(MOT1_IN1, OUTPUT);
digitalWrite(MOT1_IN1, LOW);
pinMode(MOT1_IN2, OUTPUT);
digitalWrite(MOT1_IN2, LOW);
pinMode(MOT2_D1, OUTPUT);
digitalWrite(MOT2_D1, LOW);
pinMode(MOT2_D2, OUTPUT);
digitalWrite(MOT2_D2, LOW);
pinMode(MOT2_IN1, OUTPUT);
digitalWrite(MOT2_IN1, LOW);
pinMode(MOT2_IN2, OUTPUT);
digitalWrite(MOT2_IN2, LOW);
digitalWrite(LED, LOW);
digitalWrite(LED, HIGH);
delay(3000);
digitalWrite(LED, LOW);
blinks (LED, 10, 100);
initialize_position (DoorState);
}
void loop(){
// debounce for inputs
val11 = digitalRead(Button);
val21 = digitalRead(Input2);
val31 = digitalRead(Input3);
delay(debounce_time); // amount of time for debounce
val12 = digitalRead(Button);
val22 = digitalRead(Input2);
val32 = digitalRead(Input3);
if ((val11 == LOW) && (val12 == LOW)){
buttonstate = LOW;
}
else {
buttonstate = HIGH;
}
if ((val21 == LOW) && (val22 == LOW)){
input2state = LOW;
}
else {
input2state = HIGH;
}
if ((val31 == LOW) && (val32 == LOW)){
input3state = LOW;
}
else {
input3state = HIGH;
}
if (digitalRead(Jumper) == HIGH) {
if ((digitalRead(Limit1) == LOW) && (digitalRead(Limit2) == LOW) && ((buttonstate == LOW) || (input2state == LOW) || (input3state == LOW) )){
extend_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_extend_runtime);
DoorState = open;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(delay_before_close);
if ((digitalRead(Limit1) == LOW) && (digitalRead(Limit2) == LOW)){
retract_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_retract_runtime);
DoorState = closed;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
if ((digitalRead(Limit1) != LOW) || (digitalRead(Limit2) != LOW)){
extend_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_extend_runtime);
DoorState = open;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
}
}
}
else
if ((digitalRead(Limit1) == LOW) && (digitalRead(Limit2) == LOW) && (DoorState == open)){
delay(limit_delay);
retract_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_retract_runtime);
DoorState = closed;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
if ((digitalRead(Limit1) != LOW) || (digitalRead(Limit2) != LOW)){
extend_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_extend_runtime);
DoorState = open;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
}
}
}
else
if (digitalRead(Jumper) == LOW) {
if ((digitalRead(Limit1) == LOW) && (digitalRead(Limit2) == LOW) && ((buttonstate == LOW) || (input2state == LOW) || (input3state == LOW))){
extend_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_extend_runtime);
DoorState = open;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(delay_between_motors);
turn_motor_clockwise (MOT2_D1, MOT2_D2, MOT2_IN1, MOT2_IN2);
delay(motor2_extend_runtime);
stop_actuator (MOT2_D1, MOT2_D2, MOT2_IN1, MOT2_IN2);
}
else
if ((DoorState == open) && ((buttonstate == LOW) || (input2state == LOW) || (input3state == LOW))){
turn_motor_counterclockwise (MOT2_D1, MOT2_D2, MOT2_IN1, MOT2_IN2);
delay(motor2_retract_runtime);
stop_actuator (MOT2_D1, MOT2_D2, MOT2_IN1, MOT2_IN2);
if ((digitalRead(Limit1) == LOW) || (digitalRead(Limit2) == LOW)){
retract_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_retract_runtime);
DoorState = closed;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
if ((digitalRead(Limit1) != LOW) || (digitalRead(Limit2) != LOW)){
extend_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_extend_runtime);
DoorState = open;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
}
}
}
}
}
void blinks (int pin_num, int num_of_blinks, int interval) {
int i = 0;
for (i = 0; i<num_of_blinks; i++) {
digitalWrite(pin_num, HIGH);
delay (interval/2);
digitalWrite(pin_num, LOW);
delay (interval/2);
}
}
void initialize_position (int DoorState) {
while ((digitalRead(Limit1) == HIGH) || (digitalRead(Limit2) == HIGH)) {
//the program does not proceed until both limit switches are in contact
}
// Retract Actuator
delay(limit_delay);
retract_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
delay(motor1_retract_runtime);
DoorState = closed;
stop_actuator (MOT1_D1, MOT1_D2, MOT1_IN1, MOT1_IN2);
}
void extend_actuator (int MOT1_D1, int MOT1_D2, int MOT1_IN1, int MOT1_IN2) {
digitalWrite(MOT1_D1, LOW);
digitalWrite(MOT1_D2, HIGH);
digitalWrite(MOT1_IN1, HIGH);
digitalWrite(MOT1_IN2, LOW);
digitalWrite(LED, HIGH);
}
void retract_actuator (int MOT1_D1, int MOT1_D2, int MOT1_IN1, int MOT1_IN2) {
digitalWrite(MOT1_D1, LOW);
digitalWrite(MOT1_D2, HIGH);
digitalWrite(MOT1_IN1, LOW);
digitalWrite(MOT1_IN2, HIGH);
digitalWrite(LED, HIGH);
}
/*******************************************************************************************
Function name : stop_actuator
Input:
Output:
the program stops the actuator
*******************************************************************************************/
void stop_actuator (int MOT1_D1, int MOT1_D2, int MOT1_IN1, int MOT1_IN2) {
digitalWrite(MOT1_D1, HIGH);
digitalWrite(MOT1_D2, LOW);
digitalWrite(MOT1_IN1, LOW);
digitalWrite(MOT1_IN2, LOW);
digitalWrite(LED, LOW);
}
void turn_motor_clockwise (int MOT2_D1, int MOT2_D2, int MOT2_IN1, int MOT2_IN2) {
digitalWrite(MOT2_D1, LOW);
digitalWrite(MOT2_D2, HIGH);
digitalWrite(MOT2_IN1, HIGH);
digitalWrite(MOT2_IN2, LOW);
digitalWrite(LED, HIGH);
}
void turn_motor_counterclockwise (int MOT2_D1, int MOT2_D2, int MOT2_IN1, int MOT2_IN2) {
digitalWrite(MOT2_D1, LOW);
digitalWrite(MOT2_D2, HIGH);
digitalWrite(MOT2_IN1, LOW);
digitalWrite(MOT2_IN2, HIGH);
digitalWrite(LED, HIGH);
}