Аз съм поредният който не успях да свикна с нежеланото гасене на двигателя от системата Start/Stop. Блокирах я за постоянно с VCDS-a, но след това ми се прииска да я направя както бих желал да бъде направена заводски, а именно, да запомня състоянието при което е оставена.
Видях, че други колеги преди мен вече са публикували решения за системата, но лично за мен, информацията им не ми беше достатъчна за да си направя подобно у-во. Затова реших да опиша стъпките последователно и подробно за следващи ентусиасти :-)
1. Избор на контролер - Всички представители на EMK с вграден FLASH/EEPROM са подходящи, но аз се спрях на DigiSpark (около 2$ от АлиЕкспрес)
линк : https://ru.aliexpress.com/item/Free-shipping-WAVGAT-Digispark-kickstarter-miniature-for-Arduino-ATTINY85-usb-development-board/32807895683.html?spm=a2g0v.search0104.3.17.46672ef8wLfYaX&ws_ab_test=searchweb0_0,searchweb201602_10_10065_10068_319_10059_10884_317_10887_10696_321_322_10084_453_10083_454_10103_10618_10304_10307_10820_10821_537_10302_536,searchweb201603_51,ppcSwitch_0&algo_expid=6632f038-d29d-46ef-b13f-ab98d9685995-2&algo_pvid=6632f038-d29d-46ef-b13f-ab98d9685995
2. Изработка на схемно решение с показване на всички връзки.
https://drive.google.com/open?id=13yDl9mH6ZVe2JlXYOIjCMjS3gy0NYGXJ
3. Програмен код за Arduino 1.8, предполага се , че изпълнителя на проекта е запознат със средата за програмиране и т.н.
Код: Избери всички
#include "EEPROM.h"
#define OPTRON_OUT PB0
#define LED_BUILTIN PB1
#define LAMP_IN PB2
#define lamp_is_on (digitalRead(LAMP_IN) ? false : true)
#define optron_on digitalWrite(OPTRON_OUT, HIGH)
#define optron_off digitalWrite(OPTRON_OUT, LOW)
#define led_on digitalWrite(LED_BUILTIN, HIGH)
#define led_off digitalWrite(LED_BUILTIN, LOW)
#define save_ee_lamp_on EEPROM.put(0, 1)
#define save_ee_lamp_off EEPROM.put(0, 0)
#define ee_lamp_is_on ((EEPROM.read(0)==1) ? true : false)
void setup() {
pinMode(OPTRON_OUT, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(LAMP_IN, INPUT_PULLUP);
delay(2000);
if(ee_lamp_is_on && !lamp_is_on){
led_on;
optron_on;
delay(1000);
optron_off;
}else{
led_off;
}
}
void loop() {
delay(500);
if(lamp_is_on && !ee_lamp_is_on){
save_ee_lamp_on;
led_on;
}
if(!lamp_is_on && ee_lamp_is_on){
save_ee_lamp_off;
led_off;
}
}
4. И накрая линк към видео за това какво трябва да се очаква като краен резултат
https://youtu.be/r0ZNDNrzroA
Успех :-)