Я пытаюсь построить лифт / лифт, используя 3 или более Arduino Uno's и 1 Mega (как мастер).
Arduino Uno (Slave) :
Я подключил ИК-датчик, кнопку, светодиод и 7-сегментный дисплей к Uno.
Если я нажму кнопку, светодиод загорится и будет работать до тех пор, пока ИК-датчик не обнаружит клетку лифта. ,Затем светодиод погаснет, и на 7-сегментном дисплее появится номер этажа.
Arduino Mega (Master) :
Мастер используется для шагового двигателяи клавиатура.
Мастер должен спросить рабов (в данном случае Uno) о том, нажата кнопка или нет.
Пример сценария :
Клетка находится на 2 этаже и обнаружена ИК-датчиком. Если я нажму кнопку на втором этаже, Мега должен знать, что клетка уже есть. И если я нажму кнопку на 3-м этаже, Мега должен знать, что клетка находится на 2-м этаже, и что кнопка на 3-м этаже нажата, и она должна управлять двигателем, чтобы поднять клетку на 3-й этаж и показать на 7-сегментном дисплее.
Я должен использовать i2c.
Извините, если трудно понять текст. Мой английский не очень хороший.
Вот код рабов:
#include<arduino.h>
const int dataPin = 11; // wire to 74HC595 pin 11
const int latchPin = 8; // to 74HC595 pin 8
const int clockPin = 12; // to 74HC595 pin 12
int nummers[6] = {126, 12, 182, 158, 204, 204}; //0, 1, 2, 3, 4, 5
int buttonvalue = 0;
int button = 2;
int buttonLed = 3;
// ir sensor and irleds
int irLedGreen = 5;
int irLedRed = 6;
#define IR 4
int detect = 0;
void setup() {
Serial.begin(9600);
//ir sensor
pinMode(irLedGreen, OUTPUT);
pinMode(IR, INPUT);
pinMode(irLedRed, OUTPUT);
//shift out
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
//button
pinMode(button, INPUT);
pinMode(buttonLed, OUTPUT);
}
void loop(){
buttonvalue = digitalRead(button);
detect = digitalRead(IR);
// ir sensor led. It will be green if it detects something else it will be red.
if (detect == LOW) { // if if detects something do the following.
digitalWrite(irLedGreen, HIGH);
digitalWrite(irLedRed, LOW);
} else {
digitalWrite(irLedGreen, LOW);
digitalWrite(irLedRed, HIGH);
}
// button is pressed
if (buttonvalue != 0 ) {
digitalWrite(buttonLed, HIGH);
Serial.println("button");
} else if (detect == LOW) {
digitalWrite(buttonLed, LOW);
digitalWrite(latchPin, LOW); // prepare shift register for data
shiftOut(dataPin, clockPin, MSBFIRST, nummers[4]); // send data
digitalWrite(latchPin, HIGH); // update display
Serial.println("obstakel");
}
digitalWrite(latchPin, LOW); // prepare shift register for data
shiftOut(dataPin, clockPin, MSBFIRST, nummers[0]); // send data
digitalWrite(latchPin, HIGH); // update display
}