open-hardware.gr






Διαθέσιμοι κώδικες

Φανάρι Ελέγχου Κυκλοφορίας

//Κώδικας Εφαρμογής 3: Φανάρι Ελέγχου Κυκλοφορίας
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Green_Led_Pin = 3;//pin πράσινου
const int Orange_Led_Pin = 6;//pin πορτοκ.
const int Red_Led_Pin = 8;//pin κόκκινου

//διάρκειες φάσεων φαναριού
const unsigned int Green_Delay = 10000;
const unsigned int Orange_Delay = 2000;
const unsigned int Red_Delay = 6000;

void setup()
{               
 pinMode(Green_Led_Pin, OUTPUT);
 pinMode(Orange_Led_Pin, OUTPUT);
 pinMode(Red_Led_Pin, OUTPUT);
}

void loop()
{
  //άναψε πράσινο
  digitalWrite(Green_Led_Pin, HIGH);
  delay(Green_Delay);//αναμονή 10 sec
 
  //σβήσε πράσινο          
  digitalWrite(Green_Led_Pin, LOW);

  //άναψε πορτοκαλί
  digitalWrite(Orange_Led_Pin, HIGH);
  delay(Orange_Delay);//αναμονή 2 sec

  //σβήσε πορτοκαλί
  digitalWrite(Orange_Led_Pin, LOW);

  //άναψε κόκκινο
  digitalWrite(Red_Led_Pin, HIGH);
  delay(Red_Delay);//αναμονή 6 sec
 
 //σβήσε κόκκινο
  digitalWrite(Red_Led_Pin, LOW);
}

Φακός
Έλεγχος LED με κουμπί

//Κώδικας Εφαρμογής 4: Φακός
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int LED_Pin = 12;//pin ελέγχου του LED
const int Button_Pin = 2;//pin του κουμπιού
const int Debounce_Delay = 50;//αναμονή ηρεμίας
int LED_State = LOW;//τρέχουσα κατάσταση κουμπιού
//προηγούμενη κατάσταση κουμπιού
int Prev_Button_State = LOW;

void setup()
{               
 pinMode(LED_Pin, OUTPUT);
 pinMode(Button_Pin, INPUT);
}

void loop()
{ //έλεγχος της κατάστασης του κουμπιού
  int Button_State = digitalRead(Button_Pin); 
//αν πατήθηκε το κουμπί
if((Button_State==HIGH)&&(Prev_Button_State==LOW))
    { //άλλαξε την κατάσταση του LED
      if(LED_State == LOW)
        {
          LED_State = HIGH;
        }
      else
        {
          LED_State = LOW;
        }
      digitalWrite(LED_Pin, LED_State);
    }
  //αν άλλαξε η κατάσταση, αναμονή για ηρεμία
  if(Button_State != Prev_Button_State)
    delay(Debounce_Delay);
  Prev_Button_State = Button_State;
}

Ηλεκτρονικό Ζάρι

//Κώδικας Εφαρμογής 5: Ηλεκτρονικό Ζάρι
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Button_Pin = 3;//pin κουμπιού
const int Debounce_Delay = 50;//αναμονή για ηρεμία
const int roll_delay = 2000;//καθυστέρηση ρίψης
const int LED_Pins[] = {5,7,4,6};//pins των LED
const int dice[6][4] = {{HIGH,LOW,LOW,LOW},//1
                  {LOW,HIGH,LOW,LOW},  //2
                  {HIGH,HIGH,LOW,LOW}, //3
                  {LOW,HIGH,HIGH,LOW}, //4
                  {HIGH,HIGH,HIGH,LOW},//5
                  {LOW,HIGH,HIGH,HIGH}};//6
//προηγούμενη κατάσταση κουμπιού
int Prev_Button_State = LOW;

void setup()
{
 int i;

 for(i=0;i<4;i++)
 {
   pinMode(LED_Pins[i], OUTPUT);  
 }
 pinMode(Button_Pin, INPUT);
 //αρχικοποίηση γεννήτριας ψευδοτυχαίων αριθμών
 randomSeed(analogRead(A0));
 Serial.begin(9600);//αρχικοποίηση σειριακής επικ.
}

void loop()
{//ανάγνωση κατάστασης κουμπιού
 int Button_State = digitalRead(Button_Pin);
 //αν άλλαξε η κατάσταση, αναμονή για ηρεμία 
 if(Button_State != Prev_Button_State)
   delay(Debounce_Delay);
if((Button_State==HIGH)&&(Prev_Button_State==LOW))
 {//αν πατήθηκε το κουμπί κάλεσε τη roll
   roll(); 
 }
 Prev_Button_State = Button_State;
}

void roll()//συνάρτηση ρίψης ζαριού
{
 int i;
 int result = random(1,7);//τυχαίος αριθμός 1 - 6
 for(i=0;i<4;i++)//σβήσε όλα τα LED
 {
   digitalWrite(LED_Pins[i], LOW);
 }
 delay(roll_delay);//περίμενε 2 sec
 for (i=0;i<4;i++)//εμφάνισε το αποτέλεσμα
 {            //ανάβοντας τα κατάλληλα LED
   digitalWrite(LED_Pins[i],dice[result-1][i]);
 }
 Serial.println(result);//εμφάνιση στην κονσόλα
}

Φωτεινός Σηματοδότης Αυτοκινήτων

//Κώδικας Εφαρμογής 6: Φωτεινός Σηματοδότης Αυτοκινήτων με Πεζοφάναρο
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Red_Cars_Pin = 13;//κόκκινο οδηγών
const int Orange_Cars_Pin = 11;//πορτοκαλί οδηγών
const int Green_Cars_Pin = 9;//πράσινο οδηγών
const int Red_Ped_Pin = 6;//κόκκινο πεζών
const int Green_Ped_Pin = 4;//πράσινο πεζών

//διάρκεια φάσης 2
const unsigned long Orange_Delay = 2000;
//αναμονή μέχρι τη φάση 2
const unsigned long wait_to_ph2 = 4000;

//διάρκεια φάσης 1
volatile unsigned long Green_Delay;
//διάρκεια φάσης 3
volatile unsigned long Red_Delay;
unsigned long start_time;//αρχή φάσης
unsigned long elapsed_time = 0;//χρόνος από αρχή

void setup()
{
  pinMode(Red_Cars_Pin, OUTPUT);
  pinMode(Orange_Cars_Pin, OUTPUT);
  pinMode(Green_Cars_Pin, OUTPUT);
  pinMode(Red_Ped_Pin, OUTPUT);
  pinMode(Green_Ped_Pin, OUTPUT);
  //ορισμός διακοπής για το pin του κουμπιού
  attachInterrupt(0, buttonpush, RISING);
}

void loop()
{
  Green_Delay = 10000;//διάρκεια Φάσης 1 10 sec
  Red_Delay = 5000;// διάρκεια φάσης 3 5 sec
  digitalWrite(Red_Ped_Pin, HIGH);//φάση 1
  digitalWrite(Green_Cars_Pin, HIGH);
  elapsed_time = 0;
  start_time = millis();//χρόνος έναρξης φάσης 1
  while(elapsed_time <= Green_Delay)
  {//αναμονή φάσης 1
    elapsed_time = millis()-start_time;
  }       
  digitalWrite(Green_Cars_Pin,LOW);
  digitalWrite(Orange_Cars_Pin, HIGH);//φάση 2
  start_time = millis();//χρόνος έναρξης φάσης 2
  while(millis() - start_time <= Orange_Delay)
  {//αναμονή φάσης 2
  }       
  digitalWrite(Orange_Cars_Pin, LOW);
  digitalWrite(Red_Cars_Pin, HIGH); //φάση 3
  digitalWrite(Red_Ped_Pin, LOW);
  digitalWrite(Green_Ped_Pin, HIGH);
  start_time = millis();//χρόνος έναρξης φάσης 3
  while(millis() - start_time <= Red_Delay)
  {//αναμονή φάσης 3
  }       
  digitalWrite(Green_Ped_Pin, LOW);
  digitalWrite(Red_Cars_Pin, LOW);
}

void buttonpush()
{ //αν ο χρόνος μέχρι τη φάση 2 > 4 sec
  if (Green_Delay - elapsed_time > wait_to_ph2)
  {//η μετάβαση στη φάση 2 να γίνει σε 4 sec
    Green_Delay = elapsed_time + wait_to_ph2;
  }
  Red_Delay = 7000;//διάρκεια φάσης 3 7 sec
}

Ρύθμιση Έντασης LED με Ποτενσιόμετρο

//Κώδικας Εφαρμογής 7: Ρύθμιση Έντασης LED με Ποτενσιόμετρο
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Potentiometer_Pin = A0;//Pin ποτενσιόμ.
const int LED_Pin = 3;//Pin PWM για το LED
int Input_Value = 0;//Τιμή από το ποτενσιόμετρο
int brightness = 0;//Φωτεινότητα LED

void setup() {
}

void loop() {
  //Ανάγνωση τιμής από το ποτενσιόμετρο
  Input_Value = analogRead(Potentiometer_Pin);

  //Απεικόνιση τιμής ποτ. σε επίπεδο φωτεινότητας
  brightness = map(Input_Value,0,1023,0,255); 

  //Εγγραφή επιπέδου φωτεινότητας στο PWM pin
  analogWrite(LED_Pin,brightness);
}

Εμφάνιση Μηνύματος σε Οθόνη LCD1602

//Κώδικας Εφαρμογής 8: Εμφάνιση Μηνύματος σε Οθόνη LCD1602
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

//Εισαγωγή βιβλιοθήκης LiquidCrystal
#include <LiquidCrystal.h>

//Δημιουργία μεταβλητής τύπου LiquidCrystal
LiquidCrystal lcd(2,3,4,5,6,7);

void setup(){
  //Oρισμός διαστάσεων της οθόνης
  lcd.begin(16, 2);

  //Εμφάνιση μηνύματος στην LCD
  lcd.print("Hello, world");
}

void loop(){
}

Δημιουργία Παιχνιδιού

//Κώδικας Εφαρμογής 9: Δημιουργία Παιχνιδιού
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

//Εισαγωγή βιβλιοθήκης LiquidCrystal
#include <LiquidCrystal.h>

const int Button_Pins[3] = {8,9,10};//pin κουμπιών
//Θέσεις εμφάνισης κρεμμυδιού στην οθόνη
const int lcd_pos[3] = {1,7,13};

//Δημιουργία μεταβλητής τύπου LiquidCrystal
LiquidCrystal lcd(2,3,4,5,6,7);

void setup(){
  int i;
  //Ορισμός διαστάσεων της οθόνης
  lcd.begin(16, 2);
  for(i=0;i<3;i++)
    pinMode(Button_Pins[i], INPUT);
  //Αρχικοποίηση γεννήτριας ψευδοτυχαίων αριθμών
  randomSeed(analogRead(A0));
}

void loop(){
  int i;
  int pos; //Μεταβλητή για τη θέση του κρεμμυδιού
  //Μεταβλητή που δείχνει αν έχει πατηθεί κουμπί
  boolean button_pressed=false;
  //Μεταβλητή για τη θέση που επιλέγει ο χρήστης
  int chosen_pos;

  lcd.print("Press any key");
  do{//Αναμονή μέχρι να πατηθεί κάποιο κουμπί
    for(i=0;i<3;i++) //Έλεγχος των κουμπιών
    {
      if(digitalRead(Button_Pins[i])==HIGH)
      {
        button_pressed = true;
      }
    }
  }
  while(!button_pressed);
  button_pressed = false;
  lcd.clear(); //Καθαρισμός οθόνης
  //Εμφάνιση θέσεων για το κρεμμύδι
  lcd.print("( )   ( )   ( ) ");
  for(i=0;i<15;i++)//Κρύψιμο του κρεμμυδιού
  {
    pos = random(0,3);//Τυχαίος αριθμός 0-2
    //Μετάβαση στην αντίστοιχη θέση
    lcd.setCursor(lcd_pos[pos],0);
    lcd.write('*');//Εμφάνιση κρεμμυδιού
    delay(120);
    //Μετάβαση στη θέση που βρίσκεται το κρεμμύδι
    lcd.setCursor(lcd_pos[pos],0);
    lcd.write(' ');//Εξαφάνιση κρεμμυδιού
    delay(100);
  }
  //Μετάβαση στην αρχή της δεύτερης γραμμής
  lcd.setCursor(0,1);
  lcd.print("Find the onion");//Μήνυμα προτροπής
  do{//Αναμονή μέχρι να επιλέξει ο χρήστης
    //Αποκλειστικός έλεγχος κουμπιών
    if(digitalRead(Button_Pins[0])==HIGH)
    {
      button_pressed = true;
      chosen_pos = 0;
    }
    else if(digitalRead(Button_Pins[1])==HIGH)
    {
      button_pressed = true;
      chosen_pos = 1;
    }
    else if(digitalRead(Button_Pins[2])==HIGH)
    {
      button_pressed = true;
      chosen_pos = 2;
    }
  }
  while(!button_pressed);
  //Εμφάνιση του κρεμμυδιού
  lcd.setCursor(lcd_pos[pos],0);
  lcd.write('*');
  //μετάβαση στην αρχή της 2ης γραμμής
  lcd.setCursor(0,1);
  if(pos==chosen_pos)//Αν βρέθηκε το κρεμμύδι
  {
    lcd.print("YOU WIN!!! :-)  ");//Μήνυμα νίκης
  }
  else
  {
    lcd.print("You Lose :-(    ");//Μήνυμα ήττας
  }
  delay(3000);
  lcd.clear();//Καθαρισμός οθόνης
}

Αισθητήρας LM35/Ηλεκτρονικό Θερμόμετρο

//Κώδικας Εφαρμογής 10: Αισθητήρας LM35/Ηλεκτρονικό Θερμόμετρο
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

//Εισαγωγή βιβλιοθήκης LiquidCrystal
#include <LiquidCrystal.h>

//Δημιουργία μεταβλητής τύπου LiquidCrystal
LiquidCrystal lcd(2,3,4,5,6,7);
const int LM35_Pin = A0;//Pin αισθητήρα LM35

void setup()
{
  //Αλλαγή τάσης αναφοράς σε 1.1V
  analogReference(INTERNAL);
  lcd.begin(16, 2);//Ορισμός διαστάσεων της οθόνης
}

void loop(){
float temperature; //Μεταβλητή για τη θερμοκρασία
//Υπολογισμός της θερμοκρασίας
temperature = (analogRead(LM35_Pin)*1.1*100/1024);

lcd.home();//Μετακίνηση δρομέα στην 1η θέση
if (temperature<4) lcd.print("Παγετός");


//Καθυστέρηση πριν την επόμενη μέτρηση
delay(1000);
}

Φωτοευαίσθητη Αντίσταση

//Κώδικας Εφαρμογής 11: Φωτοευαίσθητη Αντίσταση/Αυτόματο Φωτάκι Νυκτός
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Photoresistor_Pin = A0;//Pin αισθητήρα
const int LED_Pin = 11;//Pin του LED
const int threshold = 15;//Κατώφλι ενεργοποίησης
int Input_Value = 0;//Τιμή από τον αισθητήρα φωτός

void setup() {
pinMode(LED_Pin, OUTPUT);
}

void loop() {
  //Ανάγνωση τιμής από τον αισθητήρα φωτός
  Input_Value = analogRead(Photoresistor_Pin);
  //Σύγκριση τιμής εισόδου με το κατώφλι
  if(Input_Value < threshold)
  {//Αν είναι μικρότερη από το κατώφλι
   digitalWrite(LED_Pin,HIGH);//Άναψε το LED
  }
  else
  {//Αν είναι μεγαλύτερη
   digitalWrite(LED_Pin,LOW);//Σβήσε το LED
  } 
  delay(1000);//Καθυστέρηση 1 δευτερόλεπτο
}

Κώδικας Δοκιμής Αισθητήρα

//Κώδικας Δοκιμής Αισθητήρα Εφαρμογής 11
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Sensor_Pin = A0;//Pin αισθητήρα
int Input_Value = 0;//Τιμή από τον αισθητήρα

void setup(){//Αρχικοποίηση σειριακής επικοινωνίας
  Serial.begin(9600);
}

void loop() {
  //Ανάγνωση τιμής από τον αισθητήρα
  Input_Value = analogRead(Sensor_Pin);
  //Εμφάνιση τιμής στη σειριακή οθόνη
  Serial.println(Input_Value);
  delay(1000);//Καθυστέρηση 1 δευτερόλεπτο
}

Αισθητήρας ήχου LM393

//Κώδικας Εφαρμογής 12: Αισθητήρας LM393/Φωτιστικό Ελεγχόμενο με Ήχο
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int LED_Pin = 12;//Pin ελέγχου του LED
const int SoundSensor_Pin = A0;//Pin αισθητήρα
int LED_State = LOW;//Κατάσταση του LED

void setup(){               
  pinMode(LED_Pin, OUTPUT);
}

void loop(){//Ανάγνωση της τιμής του αισθητήρα
  int Sound_Level = analogRead(SoundSensor_Pin); 
  if(Sound_Level<100) //Αν τιμή < κατώφλι
  { //Άλλαξε την κατάσταση του LED
    LED_State = !LED_State;
    digitalWrite(LED_Pin, LED_State);
    delay(300);//Καθυστέρηση 0,3 sec
  }
}

Εναλλακτικός Κώδικας για Σύνδεση LM393 σε Ψηφιακό pin

//Εναλλακτικός Κώδικας Εφαρμογής 12 για Σύνδεση LM393 σε Ψηφιακό pin
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int LED_Pin = 12;//Pin ελέγχου του LED
const int SoundSensor_Pin = 2;//Pin αισθητήρα
int LED_State = LOW;//Κατάσταση του LED

void setup(){               
  pinMode(LED_Pin, OUTPUT);
  pinMode(SoundSensor_Pin, INPUT);
}

void loop(){ //Ανάγνωση της τιμής του αισθητήρα
  int Sound_Level = digitalRead(SoundSensor_Pin); 
  if(Sound_Level==LOW)//Αν έχει ανιχνευθεί ήχος
  { //Άλλαξε την κατάσταση του LED
    LED_State = !LED_State;
    digitalWrite(LED_Pin, LED_State);
    delay(300);//Καθυστέρηση 0,3 sec
  }
}

Αισθητήρας HC-SR04/Ηλεκτρονικό Ζάρι

//Κώδικας Εφαρμογής 13: Αισθητήρας HC-SR04/Ηλεκτρονικό Ζάρι
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

const int Echo_Pin = 2;//Pin εξόδου αισθητήρα
const int Trigger_Pin = 3;//Pin ενεργοπ. αισθητήρα
const int roll_delay = 2000;//Καθυστέρηση ρίψης
const int LED_Pins[] = {5,7,4,6};//Pins των LED
const int dice[6][4] = {{HIGH,LOW,LOW,LOW},//1
                        {LOW,HIGH,LOW,LOW},//2
                {HIGH,HIGH,LOW,LOW},//3
                {LOW,HIGH,HIGH,LOW},//4
                {HIGH,HIGH,HIGH,LOW},//5
                {LOW,HIGH,HIGH,HIGH}};//6

void setup()
{
 int i;

 for(i=0;i<4;i++)
 {
   pinMode(LED_Pins[i], OUTPUT);  
 }
 pinMode(Trigger_Pin, OUTPUT);
 pinMode(Echo_Pin, INPUT);
 //Αρχικοποίηση γεννήτριας ψευδοτυχαίων αριθμών
 randomSeed(analogRead(A0));
 //Αρχικοποίηση σειριακής επικοινωνίας
 Serial.begin(9600);
}

void loop()
{
 long duration;//Μεταβλητή για διάρκεια παλμού
 float distance; //Μεταβλητή για απόσταση
 //Παλμός εκκίνησης μέτρησης
 digitalWrite(Trigger_Pin,HIGH);
 delayMicroseconds(11);
 digitalWrite(Trigger_Pin,LOW);

 //Ανάγνωση διάρκειας επιστρεφόμενου παλμού
 duration = pulseIn(Echo_Pin, HIGH);
 distance = 0.034*duration/2;//Υπολογισμός απόστασης
 if(distance < 5)
 {//Αν η απόσταση < 5 cm ρίξε το ζάρι
   roll(); 
 }
 else
  delay(200);//Αναμονή πριν την επόμενη μέτρηση
}

void roll()
{
 int i;
 int result = random(1,7);//Τυχαίος αριθμός 1 - 6
 for(i=0;i<4;i++)//Σβήσε όλα τα LED
 {
   digitalWrite(LED_Pins[i], LOW);
 }
 delay(roll_delay);//Περίμενε 2 sec
 for (i=0;i<4;i++)//Εμφάνισε το αποτέλεσμα
 {            //ανάβοντας τα κατάλληλα LED
   digitalWrite(LED_Pins[i],dice[result-1][i]);
 }
 Serial.println(result);//Εμφάνιση στην κονσόλα
}

Αισθητήρας ADXL335

//Κώδικας Εφαρμογής 14: Αισθητήρας ADXL335/Εισαγωγή Κειμένου σε LCD
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

//Εισαγωγή βιβλιοθήκης για την οθόνη LCD
#include <LiquidCrystal.h>

const int x_pin = A0;//Pin άξονα x
const int y_pin = A1;//Pin άξονα y
const int z_pin = A2;//Pin άξονα z
const int leftsens=610;//Ευαισθησία αριστερά
const int rightsens=430;//Ευαισθησία δεξιά
const int forwardsens=420;//Ευαισθησία εμπρός
const int backsens=595;//Ευαισθησία πίσω
const int flipsens=435;//Ευαισθησία κάτω
const int zup = 610;//Όριο επαναφοράς άξονα z
//Ακολουθία επιλέξιμων χαρακτήρων
const char set[]={
  ' ','A','B','C','D','E','F','G','H','I','J',
  'K','L','M','N','O','P','Q','R','S','T','U',
  'V','W','X','Y','Z','0','1','2','3','4','5',
  '6','7','8','9','0','.',',','!','@','#','$',
  '%','^','&','*','(',')'};
//Θέση τελευταίου χαρακτήρα στην ακολουθία
const int last= sizeof(set)-1;
char str[2][16];//Πίνακας κατάστασης οθόνης
int row=0;//Τρέχουσα γραμμή στην LCD
int col=0;//Τρέχουσα στήλη στην LCD
//Δημιουργία αντικειμένου LiquidCrystal
LiquidCrystal lcd(2,3,4,5,6,7);

void setup(){
  //Αρχικοποίηση πίνακα κατάστασης LCD
  for (int i=0;i<2;i++)
  {
    for(int j=0;j<16;j++)
      str[i][j]=0;//Θέση του χαρακτήρα ‘ ‘ στο set
  }
  lcd.begin(16,2);//Εκκίνηση οθόνης LCD
  lcd.blink();//Εμφάνιση δρομέα που αναβοσβήνει
  analogReference(EXTERNAL);//προσαρμογή τάσης αναφοράς
  while(analogRead(z_pin)<zup);//Αρχική αναμονή
}

void loop(){
  int x,y,z;//Τιμές εισόδου
  long curr = millis();//Χρονική στιγμή έναρξης
  long count=0;//Πλήθος μετρήσεων
  float avgx=0, avgy=0, avgz=0;//Μέσες τιμές
  while (millis()-curr<200)//Χρόνος εξομάλυνσης 0,2s
  {
    count++;//Αύξησε πλήθος μετρήσεων
    x=analogRead(x_pin);//Διάβασε επιτάχυνση x
    y=analogRead(y_pin);//Διάβασε επιτάχυνση y
    z=analogRead(z_pin);//Διάβασε επιτάχυνση z
    avgx=avgx+x;//Μερικό άθροισμα x
    avgy=avgy+y;//Μερικό άθροισμα y
    avgz=avgz+z;//Μερικό άθροισμα z 
  }
  avgx=avgx/count;//Υπολογισμός μέσης τιμής x
  avgy=avgy/count;//Υπολογισμός μέσης τιμής y
  avgz=avgz/count;//Υπολογισμός μέσης τιμής z
  if (avgz<flipsens)//Αν έχει αναποδογυρίσει
  {
    row==0?row++:row--;//Άλλαξε σειρά
    lcd.setCursor(col,row);//Δρομέας στη νέα θέση
    while(analogRead(z_pin)<zup);//Αναμονή επαναφοράς
  }
  else if (avgy>backsens)//Αν έχει γύρει πίσω
  {//Υπολόγισε θέση προηγούμενου χαρακτήρα στο set
    str[row][col]>0?str[row][col]--:str[row][col]=last;
    lcd.write(set[str[row][col]]);//Εμφάνιση χαρακτήρα
    lcd.setCursor(col,row);//Δρομέας στην ίδια θέση
    while(analogRead(z_pin)<zup);//Αναμονή επαναφοράς
  }
  else if (avgy<forwardsens)//Αν έχει γύρει εμπρός
  {//Υπολόγισε θέση επόμενου χαρακτήρα στο set
    str[row][col]<last?str[row][col]++:str[row][col]=0;
    lcd.write(set[str[row][col]]);//Εμφάνισε χαρακτήρα
    lcd.setCursor(col,row);//Δρομέας στην ίδια θέση
    while(analogRead(z_pin)<zup);//Αναμονή επαναφοράς
  }
  else if (avgx>leftsens)//Αν έχει γύρει αριστερά
  {//Υπολόγισε την προηγούμενη από την τρέχουσα θέση
    col==0?col=15,(row==0?row=1:row=0):col--;
    lcd.setCursor(col,row);//Δρομέας στη νέα θέση
    while(analogRead(z_pin)<zup);//Αναμονή επαναφοράς
  }
  else if (avgx<rightsens)//Αν έχει γύρει δεξιά
  {//Υπολόγισε την επόμενη από την τρέχουσα θέση
    col==15?col=0,(row==0?row=1:row=0):col++;
    lcd.setCursor(col,row);// Δρομέας στη νέα θέση
    while(analogRead(z_pin)<zup);//Αναμονή επαναφοράς
  }
}

Δοκιμή Αισθητήρα ADXL335

//Κώδικας Δοκιμής Αισθητήρα Εφαρμογής 14
//από το βιβλίο "Ανάπτυξη Εφαρμογών με το Arduino"
//Εκδόσεις Τζιόλα
//Π. Παπάζογλου, Σ. Λιωνής

void setup(){
  //Αρχικοποίηση σειριακής επικοινωνίας
  Serial.begin(9600);
  analogReference(EXTERNAL);//αλλαγή τάσης αναφοράς
}

void loop(){
  int x,y,z;//Μεταβλητές για τους 3 άξονες
  //Αναλογική ανάγνωση εισόδων
  x=analogRead(A0);
  y=analogRead(A1);
  z=analogRead(A2);
  //Εμφάνιση μετρήσεων στη σειριακή οθόνη
  Serial.print("x");
  Serial.print(" ");
  Serial.print(x);
  Serial.print(" ");
  Serial.print("y");
  Serial.print(" ");
  Serial.print(y);
  Serial.print(" ");
  Serial.print("z");
  Serial.print(" ");
  Serial.println(z);
  delay(100);//καθυστέρηση πριν τη νέα μέτρηση
}


Υλικό υπό ενημέρωση...
About

Σχετικά με τη σελίδα και τον δημιουργό της - επικοινωνία

Διαβάστε περισσότερα